From 44500089e51a2a71a777b438b69663e8837b5866 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 02:30:01 +0300 Subject: [PATCH 01/13] early-simplify-locals --- src/module.ts | 1 + tests/compiler/logical.optimized.wat | 31 +-- .../resolve-elementaccess.optimized.wat | 112 ++++----- tests/compiler/std/array.optimized.wat | 230 +++++++++--------- .../std/string-casemapping.optimized.wat | 2 +- tests/compiler/std/string.optimized.wat | 112 ++++----- tests/compiler/std/typedarray.optimized.wat | 124 +++++----- tests/compiler/wasi/trace.optimized.wat | 112 ++++----- 8 files changed, 358 insertions(+), 366 deletions(-) diff --git a/src/module.ts b/src/module.ts index 53239a43b3..974d2bcb31 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1506,6 +1506,7 @@ export class Module { // --- PassRunner::addDefaultFunctionOptimizationPasses --- if (optimizeLevel >= 3 || shrinkLevel >= 1) { + passes.push("simplify-locals-nostructure"); passes.push("ssa-nomerge"); } if (optimizeLevel >= 3) { diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 1077a81d75..0febdcace6 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -965,21 +965,15 @@ (func $start:logical (local $0 f64) (local $1 i32) - (local $2 i32) - (local $3 f32) + (local $2 f32) + (local $3 i32) (local $4 i32) - (local $5 i32) call $logical/Obj#constructor - local.tee $4 + local.tee $3 call $~lib/rt/pure/__retain - local.tee $2 - if (result i32) - i32.const 1 - else - i32.const 0 - end - local.get $2 + local.tee $1 call $~lib/rt/pure/__release + local.get $1 i32.eqz if i32.const 0 @@ -990,16 +984,11 @@ unreachable end call $logical/Obj#constructor - local.tee $2 + local.tee $1 call $~lib/rt/pure/__retain - local.tee $5 - if (result i32) - i32.const 1 - else - i32.const 0 - end - local.get $5 + local.tee $4 call $~lib/rt/pure/__release + local.get $4 i32.eqz if i32.const 0 @@ -1009,9 +998,9 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release ) (func $~start diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index b6e217bab8..ed4abbb609 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -1273,10 +1273,10 @@ (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 $4 i64) + (local $5 i32) + (local $6 i64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i64) @@ -1300,7 +1300,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 0 i32.ne i64.extend_i32_u @@ -1319,22 +1319,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $7 i32.const 1 - local.get $6 + local.get $7 select i32.const 1075 i32.sub - local.tee $6 + local.tee $7 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1346,15 +1346,15 @@ i64.shl i64.const 1 i64.sub - local.get $6 + local.get $7 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -1377,7 +1377,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -1388,7 +1388,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 2104 @@ -1399,13 +1399,17 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 + local.get $3 + i64.const 32 + i64.shr_u + local.tee $6 local.get $2 local.get $2 i64.clz @@ -1416,32 +1420,28 @@ 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 + local.get $4 + local.get $10 i64.mul + local.get $4 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 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $10 + local.get $6 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1451,46 +1451,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + local.tee $5 + local.get $7 local.get $0 i32.sub i32.add i32.const -64 i32.sub - global.get $~lib/util/number/_frc_plus - local.tee $2 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_plus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $10 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $6 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $4 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1502,45 +1502,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 + local.get $5 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 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_minus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $3 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $3 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 - i64.mul local.get $3 + i64.mul + local.get $4 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 94c9216dca..a76a32f780 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2654,6 +2654,7 @@ (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 @@ -2662,10 +2663,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 $3 local.get $1 i32.const 0 i32.lt_s @@ -2687,11 +2688,11 @@ i32.lt_s select end - local.tee $1 + local.tee $6 i32.const 2 i32.shl i32.add - local.get $5 + local.get $3 local.get $2 i32.const 0 i32.lt_s @@ -2699,9 +2700,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 @@ -2713,40 +2714,40 @@ 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 - i32.sub - local.tee $2 - local.get $4 local.get $1 i32.sub local.tee $1 - local.get $2 + local.get $4 + local.get $6 + i32.sub + local.tee $2 local.get $1 + local.get $2 i32.lt_s select i32.const 2 @@ -5696,6 +5697,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $1 call $~lib/rt/pure/__retain local.set $4 @@ -5738,26 +5740,25 @@ end br $folding-inner0 end - local.get $2 - local.set $3 local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $3 + local.set $5 + local.get $2 + local.tee $3 i32.const 256 i32.lt_s if local.get $1 local.get $3 - local.get $2 + local.get $5 call $~lib/util/sort/insertionSort else local.get $1 local.get $3 - local.get $2 + local.get $5 call $~lib/util/sort/weakHeapSort end - local.get $2 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -8324,10 +8325,10 @@ (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 $4 i64) + (local $5 i32) + (local $6 i64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i64) @@ -8351,7 +8352,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 0 i32.ne i64.extend_i32_u @@ -8370,22 +8371,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $7 i32.const 1 - local.get $6 + local.get $7 select i32.const 1075 i32.sub - local.tee $6 + local.tee $7 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -8397,15 +8398,15 @@ i64.shl i64.const 1 i64.sub - local.get $6 + local.get $7 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8418,8 +8419,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -8428,7 +8429,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -8439,7 +8440,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 9720 @@ -8450,13 +8451,17 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 + local.get $3 + i64.const 32 + i64.shr_u + local.tee $6 local.get $2 local.get $2 i64.clz @@ -8467,32 +8472,28 @@ 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 + local.get $4 + local.get $10 i64.mul + local.get $4 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 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $10 + local.get $6 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -8502,46 +8503,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + local.tee $5 + local.get $7 local.get $0 i32.sub i32.add i32.const -64 i32.sub - global.get $~lib/util/number/_frc_plus - local.tee $2 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_plus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $10 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $6 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $4 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -8553,45 +8554,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 + local.get $5 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 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_minus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $3 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $3 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 - i64.mul local.get $3 + i64.mul + local.get $4 i64.const 4294967295 i64.and i64.add @@ -18060,6 +18061,7 @@ (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 @@ -18068,10 +18070,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 $3 local.get $1 i32.const 0 i32.lt_s @@ -18093,9 +18095,9 @@ i32.lt_s select end - local.tee $1 + local.tee $6 i32.add - local.get $5 + local.get $3 local.get $2 i32.const 0 i32.lt_s @@ -18103,9 +18105,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 @@ -18117,38 +18119,38 @@ i32.lt_s select end - local.tee $2 + local.tee $1 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 - i32.sub - local.tee $2 - local.get $4 local.get $1 i32.sub local.tee $1 - local.get $2 + local.get $4 + local.get $6 + i32.sub + local.tee $2 local.get $1 + local.get $2 i32.lt_s select call $~lib/memory/memory.copy @@ -18944,6 +18946,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $1 call $~lib/rt/pure/__retain local.set $4 @@ -18986,26 +18989,25 @@ end br $folding-inner0 end - local.get $2 - local.set $3 local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $3 + local.set $5 + local.get $2 + local.tee $3 i32.const 256 i32.lt_s if local.get $1 local.get $3 - local.get $2 + local.get $5 call $~lib/util/sort/insertionSort else local.get $1 local.get $3 - local.get $2 + local.get $5 call $~lib/util/sort/weakHeapSort end - local.get $2 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -19432,14 +19434,14 @@ local.get $3 if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add @@ -19452,10 +19454,10 @@ i32.const 2 i32.shl i32.add - local.get $6 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $6 call $~lib/rt/pure/__release end local.get $2 @@ -19478,14 +19480,14 @@ local.get $3 if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add @@ -19498,10 +19500,10 @@ i32.const 2 i32.shl i32.add - local.get $6 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $6 call $~lib/rt/pure/__release end local.get $2 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index badcd07fcd..f3c3c8e62d 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -2492,9 +2492,9 @@ block $~lib/util/string/isFinalSigma|inlined.0 (result i32) local.get $0 local.set $6 - local.get $4 i32.const 0 local.set $3 + local.get $4 i32.const 0 local.get $4 local.tee $1 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 43f485e7e6..46029b2f83 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -7264,10 +7264,10 @@ (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 $4 i64) + (local $5 i32) + (local $6 i64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i64) @@ -7291,7 +7291,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 0 i32.ne i64.extend_i32_u @@ -7310,22 +7310,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $7 i32.const 1 - local.get $6 + local.get $7 select i32.const 1075 i32.sub - local.tee $6 + local.tee $7 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -7337,15 +7337,15 @@ i64.shl i64.const 1 i64.sub - local.get $6 + local.get $7 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7358,8 +7358,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -7368,7 +7368,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -7379,7 +7379,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 20104 @@ -7390,13 +7390,17 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 + local.get $3 + i64.const 32 + i64.shr_u + local.tee $6 local.get $2 local.get $2 i64.clz @@ -7407,32 +7411,28 @@ 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 + local.get $4 + local.get $10 i64.mul + local.get $4 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 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $10 + local.get $6 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -7442,46 +7442,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + local.tee $5 + local.get $7 local.get $0 i32.sub i32.add i32.const -64 i32.sub - global.get $~lib/util/number/_frc_plus - local.tee $2 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_plus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $10 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $6 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $4 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -7493,45 +7493,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 + local.get $5 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 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_minus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $3 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $3 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 - i64.mul local.get $3 + i64.mul + local.get $4 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 8b92f0d440..bec6348352 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -3113,7 +3113,7 @@ i32.lt_s select end - local.tee $2 + local.tee $0 local.get $3 i32.const 0 i32.lt_s @@ -3121,9 +3121,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 @@ -3135,15 +3135,15 @@ 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 end @@ -21301,10 +21301,10 @@ (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 $4 i64) + (local $5 i32) + (local $6 i64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i64) @@ -21328,7 +21328,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 0 i32.ne i64.extend_i32_u @@ -21347,22 +21347,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $7 i32.const 1 - local.get $6 + local.get $7 select i32.const 1075 i32.sub - local.tee $6 + local.tee $7 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -21374,15 +21374,15 @@ i64.shl i64.const 1 i64.sub - local.get $6 + local.get $7 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21395,8 +21395,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -21405,7 +21405,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -21416,7 +21416,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 8072 @@ -21427,13 +21427,17 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 + local.get $3 + i64.const 32 + i64.shr_u + local.tee $6 local.get $2 local.get $2 i64.clz @@ -21444,32 +21448,28 @@ 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 + local.get $4 + local.get $10 i64.mul + local.get $4 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 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $10 + local.get $6 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -21479,46 +21479,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + local.tee $5 + local.get $7 local.get $0 i32.sub i32.add i32.const -64 i32.sub - global.get $~lib/util/number/_frc_plus - local.tee $2 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_plus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $10 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $6 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $4 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -21530,45 +21530,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 + local.get $5 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 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_minus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $3 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $3 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 - i64.mul local.get $3 + i64.mul + local.get $4 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 52c13126ca..439fe08198 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -1254,10 +1254,10 @@ (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 $4 i64) + (local $5 i32) + (local $6 i64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i64) @@ -1281,7 +1281,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 0 i32.ne i64.extend_i32_u @@ -1300,22 +1300,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $7 i32.const 1 - local.get $6 + local.get $7 select i32.const 1075 i32.sub - local.tee $6 + local.tee $7 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1327,15 +1327,15 @@ i64.shl i64.const 1 i64.sub - local.get $6 + local.get $7 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -1358,7 +1358,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -1369,7 +1369,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 1760 @@ -1380,13 +1380,17 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 + local.get $3 + i64.const 32 + i64.shr_u + local.tee $6 local.get $2 local.get $2 i64.clz @@ -1397,32 +1401,28 @@ 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 + local.get $4 + local.get $10 i64.mul + local.get $4 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 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $10 + local.get $6 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1432,46 +1432,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + local.tee $5 + local.get $7 local.get $0 i32.sub i32.add i32.const -64 i32.sub - global.get $~lib/util/number/_frc_plus - local.tee $2 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_plus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $10 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $6 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $4 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1483,45 +1483,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 + local.get $5 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 + local.get $3 i64.const 32 i64.shr_u - local.tee $5 - local.get $3 + local.tee $2 + global.get $~lib/util/number/_frc_minus + local.tee $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $6 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 + local.get $6 i64.mul - local.get $2 + local.get $3 + local.get $4 i64.const 4294967295 i64.and - local.tee $2 - local.get $3 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 - i64.mul local.get $3 + i64.mul + local.get $4 i64.const 4294967295 i64.and i64.add From 003320e9f64b2d47e2ad3bfc3e03d3ddbc750ca9 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 02:33:22 +0300 Subject: [PATCH 02/13] +notee --- src/module.ts | 2 +- .../resolve-elementaccess.optimized.wat | 112 ++++----- tests/compiler/std/array.optimized.wat | 230 +++++++++--------- .../std/string-casemapping.optimized.wat | 2 +- tests/compiler/std/string.optimized.wat | 112 ++++----- tests/compiler/std/typedarray.optimized.wat | 124 +++++----- tests/compiler/wasi/trace.optimized.wat | 112 ++++----- 7 files changed, 346 insertions(+), 348 deletions(-) diff --git a/src/module.ts b/src/module.ts index 974d2bcb31..c80af2ef71 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1506,7 +1506,7 @@ export class Module { // --- PassRunner::addDefaultFunctionOptimizationPasses --- if (optimizeLevel >= 3 || shrinkLevel >= 1) { - passes.push("simplify-locals-nostructure"); + passes.push("simplify-locals-notee-nostructure"); passes.push("ssa-nomerge"); } if (optimizeLevel >= 3) { diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index ed4abbb609..b6e217bab8 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -1273,10 +1273,10 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i64) (local $8 i32) (local $9 i32) (local $10 i64) @@ -1300,7 +1300,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u @@ -1319,22 +1319,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $7 + local.get $6 i32.const 1 - local.get $7 + local.get $6 select i32.const 1075 i32.sub - local.tee $7 + local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1346,15 +1346,15 @@ i64.shl i64.const 1 i64.sub - local.get $7 + local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1377,7 +1377,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -1388,7 +1388,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 2104 @@ -1399,17 +1399,13 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $6 local.get $2 local.get $2 i64.clz @@ -1420,28 +1416,32 @@ 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 $4 - local.get $10 + local.get $5 + local.get $7 i64.mul - local.get $4 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 $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1451,46 +1451,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 local.get $0 i32.sub i32.add i32.const -64 i32.sub - local.get $3 + global.get $~lib/util/number/_frc_plus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_plus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $6 + local.get $5 i64.mul - local.get $10 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $4 + local.tee $2 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $4 + local.get $7 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1502,45 +1502,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $5 + local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub local.get $2 - local.get $3 + global.get $~lib/util/number/_frc_minus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_minus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $6 + local.get $5 i64.mul - local.get $3 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $3 + local.tee $2 + local.get $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $3 + local.get $7 i64.mul - local.get $4 + local.get $3 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index a76a32f780..94c9216dca 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2654,7 +2654,6 @@ (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 @@ -2663,10 +2662,10 @@ local.get $4 i32.lt_s select - local.set $5 + local.set $3 local.get $0 i32.load offset=4 - local.tee $3 + local.tee $5 local.get $1 i32.const 0 i32.lt_s @@ -2688,11 +2687,11 @@ i32.lt_s select end - local.tee $6 + local.tee $1 i32.const 2 i32.shl i32.add - local.get $3 + local.get $5 local.get $2 i32.const 0 i32.lt_s @@ -2700,9 +2699,9 @@ local.get $2 local.get $4 i32.add - local.tee $1 + local.tee $2 i32.const 0 - local.get $1 + local.get $2 i32.const 0 i32.gt_s select @@ -2714,40 +2713,40 @@ i32.lt_s select end - local.tee $1 + local.tee $2 i32.const 2 i32.shl i32.add - local.get $5 + local.get $3 i32.const 0 i32.lt_s if (result i32) + local.get $3 local.get $4 - local.get $5 i32.add - local.tee $2 + local.tee $3 i32.const 0 - local.get $2 + local.get $3 i32.const 0 i32.gt_s select else - local.get $5 + local.get $3 local.get $4 - local.get $5 + local.get $3 local.get $4 i32.lt_s select end - local.get $1 - i32.sub - local.tee $1 - local.get $4 - local.get $6 + local.get $2 i32.sub local.tee $2 + local.get $4 local.get $1 + i32.sub + local.tee $1 local.get $2 + local.get $1 i32.lt_s select i32.const 2 @@ -5697,7 +5696,6 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $1 call $~lib/rt/pure/__retain local.set $4 @@ -5740,25 +5738,26 @@ end br $folding-inner0 end + local.get $2 + local.set $3 local.get $4 call $~lib/rt/pure/__retain - local.set $5 - local.get $2 - local.tee $3 + local.set $2 + local.get $3 i32.const 256 i32.lt_s if local.get $1 local.get $3 - local.get $5 + local.get $2 call $~lib/util/sort/insertionSort else local.get $1 local.get $3 - local.get $5 + local.get $2 call $~lib/util/sort/weakHeapSort end - local.get $5 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -8325,10 +8324,10 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i64) (local $8 i32) (local $9 i32) (local $10 i64) @@ -8352,7 +8351,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u @@ -8371,22 +8370,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $7 + local.get $6 i32.const 1 - local.get $7 + local.get $6 select i32.const 1075 i32.sub - local.tee $7 + local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -8398,15 +8397,15 @@ i64.shl i64.const 1 i64.sub - local.get $7 + local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8419,8 +8418,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -8429,7 +8428,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -8440,7 +8439,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 9720 @@ -8451,17 +8450,13 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $6 local.get $2 local.get $2 i64.clz @@ -8472,28 +8467,32 @@ 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 $4 - local.get $10 + local.get $5 + local.get $7 i64.mul - local.get $4 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 $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8503,46 +8502,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 local.get $0 i32.sub i32.add i32.const -64 i32.sub - local.get $3 + global.get $~lib/util/number/_frc_plus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_plus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $6 + local.get $5 i64.mul - local.get $10 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $4 + local.tee $2 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $4 + local.get $7 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8554,45 +8553,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $5 + local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub local.get $2 - local.get $3 + global.get $~lib/util/number/_frc_minus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_minus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $6 + local.get $5 i64.mul - local.get $3 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $3 + local.tee $2 + local.get $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $3 + local.get $7 i64.mul - local.get $4 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -18061,7 +18060,6 @@ (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 @@ -18070,10 +18068,10 @@ local.get $4 i32.lt_s select - local.set $5 + local.set $3 local.get $0 i32.load offset=4 - local.tee $3 + local.tee $5 local.get $1 i32.const 0 i32.lt_s @@ -18095,9 +18093,9 @@ i32.lt_s select end - local.tee $6 + local.tee $1 i32.add - local.get $3 + local.get $5 local.get $2 i32.const 0 i32.lt_s @@ -18105,9 +18103,9 @@ local.get $2 local.get $4 i32.add - local.tee $1 + local.tee $2 i32.const 0 - local.get $1 + local.get $2 i32.const 0 i32.gt_s select @@ -18119,38 +18117,38 @@ i32.lt_s select end - local.tee $1 + local.tee $2 i32.add - local.get $5 + local.get $3 i32.const 0 i32.lt_s if (result i32) + local.get $3 local.get $4 - local.get $5 i32.add - local.tee $2 + local.tee $3 i32.const 0 - local.get $2 + local.get $3 i32.const 0 i32.gt_s select else - local.get $5 + local.get $3 local.get $4 - local.get $5 + local.get $3 local.get $4 i32.lt_s select end - local.get $1 - i32.sub - local.tee $1 - local.get $4 - local.get $6 + local.get $2 i32.sub local.tee $2 + local.get $4 local.get $1 + i32.sub + local.tee $1 local.get $2 + local.get $1 i32.lt_s select call $~lib/memory/memory.copy @@ -18946,7 +18944,6 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $1 call $~lib/rt/pure/__retain local.set $4 @@ -18989,25 +18986,26 @@ end br $folding-inner0 end + local.get $2 + local.set $3 local.get $4 call $~lib/rt/pure/__retain - local.set $5 - local.get $2 - local.tee $3 + local.set $2 + local.get $3 i32.const 256 i32.lt_s if local.get $1 local.get $3 - local.get $5 + local.get $2 call $~lib/util/sort/insertionSort else local.get $1 local.get $3 - local.get $5 + local.get $2 call $~lib/util/sort/weakHeapSort end - local.get $5 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -19434,14 +19432,14 @@ local.get $3 if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add @@ -19454,10 +19452,10 @@ i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 call $~lib/rt/pure/__retain i32.store - local.get $6 + local.get $4 call $~lib/rt/pure/__release end local.get $2 @@ -19480,14 +19478,14 @@ local.get $3 if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add @@ -19500,10 +19498,10 @@ i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 call $~lib/rt/pure/__retain i32.store - local.get $6 + local.get $4 call $~lib/rt/pure/__release end local.get $2 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index f3c3c8e62d..badcd07fcd 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -2492,9 +2492,9 @@ block $~lib/util/string/isFinalSigma|inlined.0 (result i32) local.get $0 local.set $6 + local.get $4 i32.const 0 local.set $3 - local.get $4 i32.const 0 local.get $4 local.tee $1 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 46029b2f83..43f485e7e6 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -7264,10 +7264,10 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i64) (local $8 i32) (local $9 i32) (local $10 i64) @@ -7291,7 +7291,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u @@ -7310,22 +7310,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $7 + local.get $6 i32.const 1 - local.get $7 + local.get $6 select i32.const 1075 i32.sub - local.tee $7 + local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -7337,15 +7337,15 @@ i64.shl i64.const 1 i64.sub - local.get $7 + local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7358,8 +7358,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -7368,7 +7368,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -7379,7 +7379,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 20104 @@ -7390,17 +7390,13 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $6 local.get $2 local.get $2 i64.clz @@ -7411,28 +7407,32 @@ 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 $4 - local.get $10 + local.get $5 + local.get $7 i64.mul - local.get $4 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 $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7442,46 +7442,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 local.get $0 i32.sub i32.add i32.const -64 i32.sub - local.get $3 + global.get $~lib/util/number/_frc_plus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_plus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $6 + local.get $5 i64.mul - local.get $10 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $4 + local.tee $2 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $4 + local.get $7 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7493,45 +7493,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $5 + local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub local.get $2 - local.get $3 + global.get $~lib/util/number/_frc_minus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_minus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $6 + local.get $5 i64.mul - local.get $3 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $3 + local.tee $2 + local.get $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $3 + local.get $7 i64.mul - local.get $4 + local.get $3 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index bec6348352..8b92f0d440 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -3113,7 +3113,7 @@ i32.lt_s select end - local.tee $0 + local.tee $2 local.get $3 i32.const 0 i32.lt_s @@ -3121,9 +3121,9 @@ local.get $3 local.get $4 i32.add - local.tee $2 + local.tee $0 i32.const 0 - local.get $2 + local.get $0 i32.const 0 i32.gt_s select @@ -3135,15 +3135,15 @@ i32.lt_s select end - local.tee $2 + local.tee $0 i32.lt_s if - local.get $0 + local.get $2 local.get $6 i32.add local.get $1 - local.get $2 local.get $0 + local.get $2 i32.sub call $~lib/memory/memory.fill end @@ -21301,10 +21301,10 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i64) (local $8 i32) (local $9 i32) (local $10 i64) @@ -21328,7 +21328,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u @@ -21347,22 +21347,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $7 + local.get $6 i32.const 1 - local.get $7 + local.get $6 select i32.const 1075 i32.sub - local.tee $7 + local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -21374,15 +21374,15 @@ i64.shl i64.const 1 i64.sub - local.get $7 + local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21395,8 +21395,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -21405,7 +21405,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -21416,7 +21416,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 8072 @@ -21427,17 +21427,13 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $6 local.get $2 local.get $2 i64.clz @@ -21448,28 +21444,32 @@ 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 $4 - local.get $10 + local.get $5 + local.get $7 i64.mul - local.get $4 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 $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21479,46 +21479,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 local.get $0 i32.sub i32.add i32.const -64 i32.sub - local.get $3 + global.get $~lib/util/number/_frc_plus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_plus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $6 + local.get $5 i64.mul - local.get $10 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $4 + local.tee $2 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $4 + local.get $7 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21530,45 +21530,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $5 + local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub local.get $2 - local.get $3 + global.get $~lib/util/number/_frc_minus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_minus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $6 + local.get $5 i64.mul - local.get $3 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $3 + local.tee $2 + local.get $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $3 + local.get $7 i64.mul - local.get $4 + local.get $3 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 439fe08198..52c13126ca 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -1254,10 +1254,10 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i64) (local $8 i32) (local $9 i32) (local $10 i64) @@ -1281,7 +1281,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u @@ -1300,22 +1300,22 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $7 + local.get $6 i32.const 1 - local.get $7 + local.get $6 select i32.const 1075 i32.sub - local.tee $7 + local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1327,15 +1327,15 @@ i64.shl i64.const 1 i64.sub - local.get $7 + local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1358,7 +1358,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -1369,7 +1369,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 1760 @@ -1380,17 +1380,13 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 i32.shl i32.add local.get $0 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $6 local.get $2 local.get $2 i64.clz @@ -1401,28 +1397,32 @@ 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 $4 - local.get $10 + local.get $5 + local.get $7 i64.mul - local.get $4 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 $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1432,46 +1432,46 @@ i64.shr_u i64.add global.get $~lib/util/number/_exp_pow - local.tee $5 - local.get $7 + local.tee $4 + local.get $6 local.get $0 i32.sub i32.add i32.const -64 i32.sub - local.get $3 + global.get $~lib/util/number/_frc_plus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_plus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $10 - local.get $6 + local.get $5 i64.mul - local.get $10 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $4 + local.tee $2 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $4 + local.get $7 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1483,45 +1483,45 @@ i64.const 1 i64.sub local.tee $2 - local.get $5 + local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub local.get $2 - local.get $3 + global.get $~lib/util/number/_frc_minus + local.tee $2 i64.const 32 i64.shr_u - local.tee $2 - global.get $~lib/util/number/_frc_minus - local.tee $4 + local.tee $5 + local.get $3 i64.const 32 i64.shr_u - local.tee $6 + local.tee $7 i64.mul local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $6 + local.get $5 i64.mul - local.get $3 - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $3 + local.tee $2 + local.get $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $3 + local.get $7 i64.mul - local.get $4 + local.get $3 i64.const 4294967295 i64.and i64.add From e70720753e5f1a04adc6aaf964d5869073f213f4 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 02:39:23 +0300 Subject: [PATCH 03/13] +vacuum --- src/module.ts | 1 + tests/compiler/logical.optimized.wat | 29 ++++++++++++---------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/module.ts b/src/module.ts index c80af2ef71..9685c13568 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1507,6 +1507,7 @@ export class Module { if (optimizeLevel >= 3 || shrinkLevel >= 1) { passes.push("simplify-locals-notee-nostructure"); + passes.push("vacuum"); passes.push("ssa-nomerge"); } if (optimizeLevel >= 3) { diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 0febdcace6..288c89ac35 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -1,9 +1,9 @@ (module (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_none (func)) (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_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -962,18 +962,16 @@ call $~lib/rt/pure/decrement end ) - (func $start:logical - (local $0 f64) + (func $~start + (local $0 i32) (local $1 i32) - (local $2 f32) - (local $3 i32) - (local $4 i32) + (local $2 i32) call $logical/Obj#constructor - local.tee $3 - call $~lib/rt/pure/__retain local.tee $1 + call $~lib/rt/pure/__retain + local.tee $0 call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.eqz if i32.const 0 @@ -984,11 +982,11 @@ unreachable end call $logical/Obj#constructor - local.tee $1 + local.tee $0 call $~lib/rt/pure/__retain - local.tee $4 + local.tee $2 call $~lib/rt/pure/__release - local.get $4 + local.get $2 i32.eqz if i32.const 0 @@ -998,13 +996,10 @@ 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:logical + local.get $0 + call $~lib/rt/pure/__release ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) From a15300972ca65baaf016b4d45d8492742159c4a1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 03:05:08 +0300 Subject: [PATCH 04/13] more rse earlier --- src/module.ts | 5 +- tests/compiler/do.optimized.wat | 52 +- .../extends-baseaggregate.optimized.wat | 52 +- tests/compiler/for.optimized.wat | 81 +- .../implicit-getter-setter.optimized.wat | 52 +- tests/compiler/issues/1095.optimized.wat | 52 +- tests/compiler/issues/1225.optimized.wat | 52 +- tests/compiler/logical.optimized.wat | 52 +- tests/compiler/managed-cast.optimized.wat | 52 +- tests/compiler/number.optimized.wat | 2 - tests/compiler/object-literal.optimized.wat | 52 +- tests/compiler/rc/local-init.optimized.wat | 52 +- .../rc/logical-and-mismatch.optimized.wat | 52 +- .../rc/logical-or-mismatch.optimized.wat | 52 +- tests/compiler/rc/optimize.optimized.wat | 52 +- tests/compiler/rc/rereturn.optimized.wat | 52 +- .../rc/ternary-mismatch.optimized.wat | 52 +- tests/compiler/resolve-ternary.optimized.wat | 52 +- .../retain-release-sanity.optimized.wat | 52 +- tests/compiler/retain-return.optimized.wat | 52 +- tests/compiler/rt/finalize.optimized.wat | 52 +- tests/compiler/runtime-full.optimized.wat | 52 +- tests/compiler/scoped.optimized.wat | 9 +- .../compiler/std/array-literal.optimized.wat | 52 +- tests/compiler/std/array.optimized.wat | 1269 +++++------ tests/compiler/std/arraybuffer.optimized.wat | 52 +- tests/compiler/std/dataview.optimized.wat | 52 +- tests/compiler/std/map.optimized.wat | 52 +- tests/compiler/std/math.optimized.wat | 446 ++-- .../std/operator-overloading.optimized.wat | 4 +- tests/compiler/std/set.optimized.wat | 52 +- tests/compiler/std/staticarray.optimized.wat | 52 +- .../std/string-casemapping.optimized.wat | 225 +- .../std/string-encoding.optimized.wat | 52 +- tests/compiler/std/string.optimized.wat | 1877 +++++++++-------- tests/compiler/std/typedarray.optimized.wat | 616 +++--- tests/compiler/while.optimized.wat | 56 +- 37 files changed, 3002 insertions(+), 2940 deletions(-) diff --git a/src/module.ts b/src/module.ts index 9685c13568..96b0ebf6d2 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1507,6 +1507,7 @@ export class Module { if (optimizeLevel >= 3 || shrinkLevel >= 1) { passes.push("simplify-locals-notee-nostructure"); + passes.push("rse"); passes.push("vacuum"); passes.push("ssa-nomerge"); } @@ -1520,10 +1521,6 @@ export class Module { passes.push("local-cse"); passes.push("reorder-locals"); } - if (optimizeLevel >= 2 || shrinkLevel >= 1) { - passes.push("rse"); - passes.push("vacuum"); - } // FIXME: see issue #1288 // if (usesARC) { // if (optimizeLevel < 3) { diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 9678b0e24c..13ee0d6c52 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -160,23 +160,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 @@ -191,25 +191,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -221,24 +221,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -247,7 +247,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -257,7 +257,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -667,16 +667,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -688,18 +688,18 @@ unreachable end i32.const 1216 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2784 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1216 @@ -713,7 +713,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -731,10 +731,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -747,7 +747,7 @@ i32.const 1216 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index b46078dcd4..304b4904b7 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -85,23 +85,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,25 +116,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -146,24 +146,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -172,7 +172,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -182,7 +182,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -592,16 +592,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -613,18 +613,18 @@ unreachable end i32.const 1568 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3136 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1568 @@ -638,7 +638,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -656,10 +656,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -672,7 +672,7 @@ i32.const 1568 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 89dd49b021..579428fa82 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -157,23 +157,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 @@ -188,25 +188,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -218,24 +218,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -244,7 +244,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -254,7 +254,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -664,16 +664,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -685,18 +685,18 @@ unreachable end i32.const 1216 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2784 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1216 @@ -710,7 +710,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -728,10 +728,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -744,7 +744,7 @@ i32.const 1216 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) @@ -1046,7 +1046,6 @@ (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) i32.const 0 global.set $for/ran loop $for-loop|0 @@ -1329,42 +1328,44 @@ end i32.const 0 global.set $for/ran + i32.const 0 + local.set $2 call $for/Ref#constructor call $for/Ref#constructor - local.set $1 + local.set $0 call $~lib/rt/pure/__release loop $for-loop|05 block $for-break0 call $for/Ref#constructor - local.tee $0 + local.tee $1 call $~lib/rt/pure/__release - local.get $0 + local.get $1 if - local.get $3 + local.get $2 i32.const 1 i32.add - local.tee $3 + local.tee $2 i32.const 10 i32.eq if - local.get $1 + local.get $0 if - local.get $1 + local.get $0 call $~lib/rt/pure/__release end i32.const 0 - local.set $1 + local.set $0 br $for-break0 end call $for/Ref#constructor - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.set $1 + local.set $0 br $for-loop|05 end end end - local.get $3 + local.get $2 i32.const 10 i32.ne if @@ -1375,7 +1376,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 if i32.const 0 i32.const 1040 @@ -1386,7 +1387,7 @@ end i32.const 1 global.set $for/ran - local.get $1 + local.get $0 call $~lib/rt/pure/__release global.get $for/ran i32.eqz diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 8804cd6553..779ea253f5 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -92,23 +92,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,25 +123,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -153,24 +153,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -179,7 +179,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -189,7 +189,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -599,16 +599,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -620,18 +620,18 @@ unreachable end i32.const 1232 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2800 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1232 @@ -645,7 +645,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -663,10 +663,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -679,7 +679,7 @@ i32.const 1232 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index c6a03f1537..2c23f79404 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -77,23 +77,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,25 +108,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -138,24 +138,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,7 +164,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -174,7 +174,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -584,16 +584,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -605,18 +605,18 @@ unreachable end i32.const 1312 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2880 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1312 @@ -630,7 +630,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -648,10 +648,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -664,7 +664,7 @@ i32.const 1312 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 1419f32b1a..37e44e8191 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -78,23 +78,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,25 +109,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -139,24 +139,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -165,7 +165,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -175,7 +175,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -585,16 +585,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -606,18 +606,18 @@ unreachable end i32.const 1232 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2800 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1232 @@ -631,7 +631,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -649,10 +649,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -665,7 +665,7 @@ i32.const 1232 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 288c89ac35..e59eaa06b5 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -75,23 +75,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,25 +106,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -136,24 +136,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -162,7 +162,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -172,7 +172,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -582,16 +582,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -603,18 +603,18 @@ unreachable end i32.const 1232 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2800 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1232 @@ -628,7 +628,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -646,10 +646,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -662,7 +662,7 @@ i32.const 1232 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 48c9c1ad62..41383bad90 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -80,23 +80,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 @@ -111,25 +111,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -141,24 +141,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -167,7 +167,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -177,7 +177,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -587,16 +587,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -608,18 +608,18 @@ unreachable end i32.const 1392 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2960 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1392 @@ -633,7 +633,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -651,10 +651,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -667,7 +667,7 @@ i32.const 1392 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 23ae2c7979..3fd153cc6e 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -1359,7 +1359,6 @@ select ) (func $~lib/number/F32.isInteger (param $0 f32) (result i32) - (local $1 i32) local.get $0 f32.trunc local.get $0 @@ -1385,7 +1384,6 @@ select ) (func $~lib/number/F64.isInteger (param $0 f64) (result i32) - (local $1 i32) local.get $0 f64.trunc local.get $0 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 8ed9a4db9e..9fb5ce8199 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -84,23 +84,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,25 +115,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -145,24 +145,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -171,7 +171,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -181,7 +181,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -591,16 +591,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -612,18 +612,18 @@ unreachable end i32.const 1440 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3008 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1440 @@ -637,7 +637,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -655,10 +655,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -671,7 +671,7 @@ i32.const 1440 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 85d41f12f6..d25ba45aa4 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -75,23 +75,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,25 +106,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -136,24 +136,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -162,7 +162,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -172,7 +172,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -582,16 +582,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -603,18 +603,18 @@ unreachable end i32.const 1200 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2768 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1200 @@ -628,7 +628,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -646,10 +646,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -662,7 +662,7 @@ i32.const 1200 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index f06157dc9d..bcfd706103 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -75,23 +75,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,25 +106,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -136,24 +136,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -162,7 +162,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -172,7 +172,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -582,16 +582,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -603,18 +603,18 @@ unreachable end i32.const 1184 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2752 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1184 @@ -628,7 +628,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -646,10 +646,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -662,7 +662,7 @@ i32.const 1184 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index e6aaa14ed7..0ee135fd09 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -75,23 +75,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,25 +106,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -136,24 +136,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -162,7 +162,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -172,7 +172,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -582,16 +582,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -603,18 +603,18 @@ unreachable end i32.const 1184 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2752 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1184 @@ -628,7 +628,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -646,10 +646,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -662,7 +662,7 @@ i32.const 1184 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index f5a7756869..a655fd3623 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -165,23 +165,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 @@ -196,25 +196,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -226,24 +226,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -252,7 +252,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -262,7 +262,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -672,16 +672,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -693,18 +693,18 @@ unreachable end i32.const 1216 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2784 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1216 @@ -718,7 +718,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -736,10 +736,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -752,7 +752,7 @@ i32.const 1216 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index cd89413c86..04e6d6ae71 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -78,23 +78,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,25 +109,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -139,24 +139,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -165,7 +165,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -175,7 +175,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -585,16 +585,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -606,18 +606,18 @@ unreachable end i32.const 1232 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2800 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1232 @@ -631,7 +631,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -649,10 +649,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -665,7 +665,7 @@ i32.const 1232 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 5d516a991a..5c66d5b631 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -77,23 +77,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,25 +108,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -138,24 +138,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,7 +164,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -174,7 +174,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -584,16 +584,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -605,18 +605,18 @@ unreachable end i32.const 1184 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2752 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1184 @@ -630,7 +630,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -648,10 +648,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -664,7 +664,7 @@ i32.const 1184 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index f54ad32f8d..08c31d502b 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -104,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 @@ -135,25 +135,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -165,24 +165,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -191,7 +191,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -201,7 +201,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -611,16 +611,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -632,18 +632,18 @@ unreachable end i32.const 2880 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 4448 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 2880 @@ -657,7 +657,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -675,10 +675,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -691,7 +691,7 @@ i32.const 2880 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index d11b808cd8..4c99175311 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -102,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 @@ -133,25 +133,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -163,24 +163,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -189,7 +189,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -199,7 +199,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -609,16 +609,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -630,18 +630,18 @@ unreachable end i32.const 1664 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3232 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1664 @@ -655,7 +655,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -673,10 +673,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -689,7 +689,7 @@ i32.const 1664 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index b6554497a6..72b4c576f6 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -80,23 +80,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 @@ -111,25 +111,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -141,24 +141,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -167,7 +167,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -177,7 +177,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -587,16 +587,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -608,18 +608,18 @@ unreachable end i32.const 1376 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2944 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1376 @@ -633,7 +633,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -651,10 +651,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -667,7 +667,7 @@ i32.const 1376 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index f2717b2010..671366654c 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -100,23 +100,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 @@ -131,25 +131,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -161,24 +161,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -187,7 +187,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -197,7 +197,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -607,16 +607,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -628,18 +628,18 @@ unreachable end i32.const 1600 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3168 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1600 @@ -653,7 +653,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -671,10 +671,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -687,7 +687,7 @@ i32.const 1600 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 4b565d853b..0a6d9adf60 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -78,23 +78,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,25 +109,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -139,24 +139,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -165,7 +165,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -175,7 +175,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -585,16 +585,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -606,18 +606,18 @@ unreachable end i32.const 1216 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2784 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1216 @@ -631,7 +631,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -649,10 +649,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -665,7 +665,7 @@ i32.const 1216 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/scoped.optimized.wat b/tests/compiler/scoped.optimized.wat index 001d9087e1..d9bbd8322b 100644 --- a/tests/compiler/scoped.optimized.wat +++ b/tests/compiler/scoped.optimized.wat @@ -5,7 +5,6 @@ (start $~start) (func $~start (local $0 i32) - (local $1 i32) loop $for-loop|0 local.get $0 i32.const 1 @@ -18,15 +17,17 @@ br $for-loop|0 end end + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $1 + local.get $0 i32.const 1 i32.lt_s if - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|1 end end diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index b585dc8b7d..dcb6c1ef2d 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -130,23 +130,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 @@ -161,25 +161,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -191,24 +191,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -217,7 +217,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -227,7 +227,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -637,16 +637,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -658,18 +658,18 @@ unreachable end i32.const 1536 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3104 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1536 @@ -683,7 +683,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -701,10 +701,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -717,7 +717,7 @@ i32.const 1536 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 94c9216dca..9691d0bf30 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -461,23 +461,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 @@ -492,25 +492,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -522,24 +522,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -548,7 +548,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -558,7 +558,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -968,16 +968,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -989,18 +989,18 @@ unreachable end i32.const 11936 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 13504 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 11936 @@ -1014,7 +1014,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -1032,10 +1032,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -1048,7 +1048,7 @@ i32.const 11936 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -4198,7 +4198,6 @@ i32.xor ) (func $~lib/math/NativeMath.seedRandom (param $0 i64) - (local $1 i32) i32.const 1 global.set $~lib/math/random_seeded local.get $0 @@ -8920,24 +8919,24 @@ local.get $6 i32.lt_s if - local.get $4 - local.tee $2 local.get $0 local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 + local.get $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $4 call $~lib/rt/pure/__retain @@ -9006,33 +9005,34 @@ call $~lib/rt/pure/__release end local.get $2 + local.tee $0 if - local.get $2 + local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 local.get $1 - local.get $0 + local.get $2 call $~lib/string/String.__concat - local.tee $0 - local.tee $4 + local.tee $3 + local.tee $2 local.get $1 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $0 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 local.set $1 end local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -9059,155 +9059,156 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $8 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $7 + local.tee $6 i32.const 0 i32.lt_s if - local.get $8 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $7 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $2 + local.get $3 select return end i32.const 7840 local.set $1 - local.get $8 + local.get $5 call $~lib/string/String#get:length - local.set $5 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $3 + local.get $6 i32.lt_s if local.get $4 - local.tee $3 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $5 + local.get $8 if local.get $1 - local.tee $3 - local.get $8 + local.tee $2 + local.get $5 call $~lib/string/String.__concat - local.tee $6 + local.tee $7 local.tee $1 - local.get $3 + local.get $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $3 + local.get $2 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $7 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 + local.tee $0 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $0 local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $0 - call $~lib/rt/pure/__release local.get $4 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -10091,169 +10092,170 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 - local.tee $3 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.tee $3 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 local.tee $1 - local.get $3 + local.get $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $3 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 + local.tee $0 if - local.get $3 + local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $0 + local.tee $2 local.get $1 local.get $1 - local.get $0 + local.get $2 call $~lib/string/String.__concat - local.tee $0 - local.tee $4 + local.tee $3 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $0 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -10434,169 +10436,170 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 - local.tee $3 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.tee $3 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 local.tee $1 - local.get $3 + local.get $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $3 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 + local.tee $0 if - local.get $3 + local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $0 + local.tee $2 local.get $1 local.get $1 - local.get $0 + local.get $2 call $~lib/string/String.__concat - local.tee $0 - local.tee $4 + local.tee $3 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $0 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -10616,169 +10619,170 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 - local.tee $3 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.tee $3 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 local.tee $1 - local.get $3 + local.get $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $3 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 + local.tee $0 if - local.get $3 + local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $0 + local.tee $2 local.get $1 local.get $1 - local.get $0 + local.get $2 call $~lib/string/String.__concat - local.tee $0 - local.tee $4 + local.tee $3 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $0 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -10802,71 +10806,71 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 - local.tee $3 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $4 + local.tee $2 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 + local.tee $4 if local.get $1 local.get $1 @@ -10874,94 +10878,95 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.tee $3 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 local.tee $1 - local.get $3 + local.get $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain local.set $1 - local.get $3 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 + local.tee $0 if local.get $1 local.get $1 - local.get $3 + local.get $0 call $~lib/array/Array<~lib/array/Array>#toString - local.tee $0 + local.tee $4 call $~lib/string/String.__concat + local.tee $3 local.tee $2 - local.tee $4 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $0 + local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $1 ) @@ -11226,9 +11231,9 @@ (local $28 i32) (local $29 i32) (local $30 i32) - (local $31 i32) - (local $32 f32) - (local $33 f64) + (local $31 f32) + (local $32 f64) + (local $33 i32) (local $34 i32) (local $35 i32) (local $36 i32) @@ -11253,8 +11258,6 @@ (local $55 i32) (local $56 i32) (local $57 i32) - (local $58 i32) - (local $59 i32) i32.const 0 call $~lib/array/Array#constructor global.set $std/array/arr @@ -12267,14 +12270,14 @@ i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $15 + local.tee $14 i32.const 5 i32.const 2 i32.const 3 i32.const 2304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 + local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12299,14 +12302,14 @@ i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $6 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 i32.const 2400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12331,14 +12334,14 @@ i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $7 + local.tee $9 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 $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12363,14 +12366,14 @@ i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $11 + local.tee $7 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 $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12395,14 +12398,14 @@ i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $26 + local.tee $12 i32.const 5 i32.const 2 i32.const 3 i32.const 2688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $24 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12427,14 +12430,14 @@ i32.const -2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $17 + local.tee $15 i32.const 5 i32.const 2 i32.const 3 i32.const 2784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12459,14 +12462,14 @@ i32.const -2 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $14 + local.tee $17 i32.const 5 i32.const 2 i32.const 3 i32.const 2880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12499,7 +12502,7 @@ i32.const 2976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12525,14 +12528,14 @@ i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $22 + local.tee $20 i32.const 5 i32.const 2 i32.const 3 i32.const 3072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12565,7 +12568,7 @@ i32.const 3168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $25 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12587,45 +12590,45 @@ call $~lib/rt/pure/__release local.get $10 call $~lib/rt/pure/__release - local.get $15 + local.get $14 call $~lib/rt/pure/__release - local.get $23 + local.get $22 + call $~lib/rt/pure/__release + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $13 + local.get $12 call $~lib/rt/pure/__release - local.get $26 + local.get $24 + 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 $14 - call $~lib/rt/pure/__release - local.get $20 + local.get $13 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release - local.get $21 + local.get $18 call $~lib/rt/pure/__release - local.get $22 + local.get $20 call $~lib/rt/pure/__release - local.get $24 + local.get $21 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $25 + local.get $23 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 42 @@ -13504,14 +13507,14 @@ i32.shl i32.add f32.load - local.tee $32 + local.tee $31 f32.const nan:0x400000 f32.eq if (result i32) i32.const 1 else - local.get $32 - local.get $32 + local.get $31 + local.get $31 f32.ne end br_if $__inlined_func$~lib/array/Array#includes @@ -13558,27 +13561,27 @@ drop local.get $3 i32.load offset=4 - local.set $15 + local.set $14 loop $while-continue|021 local.get $0 local.get $4 i32.lt_s if i32.const 1 - local.get $15 + local.get $14 local.get $0 i32.const 3 i32.shl i32.add f64.load - local.tee $33 + local.tee $32 f64.const nan:0x8000000000000 f64.eq if (result i32) i32.const 1 else - local.get $33 - local.get $33 + local.get $32 + local.get $32 f64.ne end br_if $__inlined_func$~lib/array/Array#includes @@ -13696,7 +13699,7 @@ i32.const 3440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13721,14 +13724,14 @@ i32.const 0 i32.const 0 call $~lib/array/Array#splice - local.tee $8 + local.tee $6 i32.const 0 i32.const 2 i32.const 3 i32.const 3504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13747,7 +13750,7 @@ i32.const 3520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13772,14 +13775,14 @@ i32.const 2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $11 + local.tee $7 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 $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13798,7 +13801,7 @@ i32.const 3648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $12 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13823,14 +13826,14 @@ i32.const 2 i32.const 2 call $~lib/array/Array#splice - local.tee $17 + 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 $18 + local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13849,7 +13852,7 @@ i32.const 3760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13874,7 +13877,7 @@ i32.const 0 i32.const 1 call $~lib/array/Array#splice - local.tee $20 + local.tee $13 i32.const 1 i32.const 2 i32.const 3 @@ -13900,7 +13903,7 @@ i32.const 3872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13924,14 +13927,14 @@ i32.const -1 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $22 + local.tee $20 i32.const 1 i32.const 2 i32.const 3 i32.const 3952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13950,7 +13953,7 @@ i32.const 3984 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $25 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13974,14 +13977,14 @@ i32.const -2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $27 + local.tee $25 i32.const 2 i32.const 2 i32.const 3 i32.const 4064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 + local.tee $26 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14000,7 +14003,7 @@ i32.const 4096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 + local.tee $27 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14024,14 +14027,14 @@ i32.const -2 i32.const 1 call $~lib/array/Array#splice - local.tee $30 + local.tee $28 i32.const 1 i32.const 2 i32.const 3 i32.const 4176 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.tee $29 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14050,7 +14053,7 @@ i32.const 4208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $30 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14074,14 +14077,14 @@ i32.const -7 i32.const 1 call $~lib/array/Array#splice - local.tee $35 + local.tee $33 i32.const 1 i32.const 2 i32.const 3 i32.const 4288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $36 + local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14100,7 +14103,7 @@ i32.const 4320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 + local.tee $35 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14124,14 +14127,14 @@ i32.const -2 i32.const -1 call $~lib/array/Array#splice - local.tee $38 + local.tee $36 i32.const 0 i32.const 2 i32.const 3 i32.const 4400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $39 + local.tee $37 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14150,7 +14153,7 @@ i32.const 4416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $40 + local.tee $38 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14174,14 +14177,14 @@ i32.const 1 i32.const -2 call $~lib/array/Array#splice - local.tee $41 + local.tee $39 i32.const 0 i32.const 2 i32.const 3 i32.const 4512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $42 + local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14200,7 +14203,7 @@ i32.const 4528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $43 + local.tee $41 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14224,14 +14227,14 @@ i32.const 4 i32.const 0 call $~lib/array/Array#splice - local.tee $44 + local.tee $42 i32.const 0 i32.const 2 i32.const 3 i32.const 4624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 + local.tee $43 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14250,7 +14253,7 @@ i32.const 4640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $46 + local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14275,14 +14278,14 @@ i32.const 7 i32.const 0 call $~lib/array/Array#splice - local.tee $47 + local.tee $45 i32.const 0 i32.const 2 i32.const 3 i32.const 4736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $48 + local.tee $46 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14301,7 +14304,7 @@ i32.const 4752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $49 + local.tee $47 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14326,14 +14329,14 @@ i32.const 7 i32.const 5 call $~lib/array/Array#splice - local.tee $50 + local.tee $48 i32.const 0 i32.const 2 i32.const 3 i32.const 4848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $51 + local.tee $49 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14352,7 +14355,7 @@ i32.const 4864 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $52 + local.tee $50 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14373,7 +14376,7 @@ local.tee $1 i32.const 1 call $~lib/array/Array#splice - local.tee $15 + local.tee $14 i32.load offset=12 if i32.const 0 @@ -14426,10 +14429,10 @@ local.get $10 i32.const 2 call $~lib/array/Array#splice - local.set $23 - local.get $15 + local.set $22 + local.get $14 call $~lib/rt/pure/__release - local.get $23 + local.get $22 i32.load offset=12 i32.const 2 i32.ne @@ -14441,10 +14444,10 @@ call $~lib/builtins/abort unreachable end - local.get $23 + local.get $22 i32.const 0 call $~lib/array/Array#__get - local.tee $53 + local.tee $51 i32.load i32.const 3 i32.ne @@ -14456,10 +14459,10 @@ call $~lib/builtins/abort unreachable end - local.get $23 + local.get $22 i32.const 1 call $~lib/array/Array#__get - local.tee $54 + local.tee $52 i32.load i32.const 4 i32.ne @@ -14486,7 +14489,7 @@ local.get $10 i32.const 0 call $~lib/array/Array#__get - local.tee $55 + local.tee $53 i32.load i32.const 1 i32.ne @@ -14501,7 +14504,7 @@ local.get $10 i32.const 1 call $~lib/array/Array#__get - local.tee $56 + local.tee $54 i32.load i32.const 2 i32.ne @@ -14516,7 +14519,7 @@ local.get $10 i32.const 2 call $~lib/array/Array#__get - local.tee $57 + local.tee $55 i32.load i32.const 5 i32.ne @@ -14534,7 +14537,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 + local.tee $14 i32.load offset=4 local.tee $0 i32.const 1 @@ -14547,9 +14550,9 @@ i32.const 2 call $std/array/Ref#constructor i32.store offset=8 - local.get $15 + local.get $14 call $~lib/array/Array#splice - local.tee $26 + local.tee $24 i32.load offset=12 i32.const 1 i32.ne @@ -14561,7 +14564,7 @@ call $~lib/builtins/abort unreachable end - local.get $26 + local.get $24 i32.const 0 call $~lib/array/Array#__get local.tee $0 @@ -14586,7 +14589,7 @@ call $~lib/builtins/abort unreachable end - local.get $15 + local.get $14 i32.load offset=12 i32.const 2 i32.ne @@ -14598,10 +14601,10 @@ call $~lib/builtins/abort unreachable end - local.get $15 + local.get $14 i32.const 0 call $~lib/array/Array#__get - local.tee $58 + local.tee $56 if i32.const 0 i32.const 1296 @@ -14610,7 +14613,7 @@ call $~lib/builtins/abort unreachable end - local.get $15 + local.get $14 i32.const 1 call $~lib/array/Array#__get local.tee $1 @@ -14641,38 +14644,42 @@ 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 $9 + call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $13 + local.get $12 + 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 + local.get $13 call $~lib/rt/pure/__release - local.get $14 + local.get $19 call $~lib/rt/pure/__release - local.get $20 + local.get $18 call $~lib/rt/pure/__release - local.get $19 + 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 $24 + local.get $23 call $~lib/rt/pure/__release local.get $25 call $~lib/rt/pure/__release + local.get $26 + call $~lib/rt/pure/__release local.get $27 call $~lib/rt/pure/__release local.get $28 @@ -14681,7 +14688,7 @@ call $~lib/rt/pure/__release local.get $30 call $~lib/rt/pure/__release - local.get $31 + local.get $33 call $~lib/rt/pure/__release local.get $34 call $~lib/rt/pure/__release @@ -14727,13 +14734,9 @@ 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 $0 call $~lib/rt/pure/__release - local.get $58 + local.get $56 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -15216,18 +15219,20 @@ call $~lib/builtins/abort unreachable end + i32.const 0 + local.set $0 loop $for-loop|0 - local.get $5 + local.get $0 i32.const 100 i32.lt_s if global.get $std/array/arr call $~lib/array/Array#pop drop - local.get $5 + local.get $0 i32.const 1 i32.add - local.set $5 + local.set $0 br $for-loop|0 end end @@ -15874,7 +15879,7 @@ i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $17 call $std/array/isArraysEqual i32.eqz if @@ -15906,7 +15911,7 @@ i32.const 6944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $13 call $std/array/isArraysEqual i32.eqz if @@ -15939,7 +15944,7 @@ i32.const 7104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15971,7 +15976,7 @@ i32.const 7232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15989,7 +15994,7 @@ i32.const 7280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $16 + local.set $15 i32.const 1 i32.const 2 i32.const 3 @@ -16010,7 +16015,7 @@ i32.const 7360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $8 + local.set $9 i32.const 4 i32.const 2 i32.const 3 @@ -16020,20 +16025,20 @@ local.set $0 i32.const 64 call $std/array/createReverseOrderedArray - local.set $7 + local.set $8 i32.const 128 call $std/array/createReverseOrderedArray - local.set $9 + local.set $7 i32.const 1024 call $std/array/createReverseOrderedArray local.set $11 i32.const 10000 call $std/array/createReverseOrderedArray - local.set $13 + local.set $12 i32.const 512 call $std/array/createRandomOrderedArray - local.set $17 - local.get $16 + local.set $16 + local.get $15 call $std/array/assertSortedDefault local.get $5 call $std/array/assertSortedDefault @@ -16044,7 +16049,7 @@ i32.const 7456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16065,7 +16070,7 @@ i32.const 7488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16077,9 +16082,9 @@ call $~lib/builtins/abort unreachable end - local.get $8 + local.get $9 call $std/array/assertSortedDefault - local.get $8 + local.get $9 local.get $0 i32.const 0 call $std/array/isArraysEqual @@ -16092,9 +16097,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 call $std/array/assertSortedDefault - local.get $7 + local.get $8 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -16107,9 +16112,9 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $7 call $std/array/assertSortedDefault - local.get $9 + local.get $7 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -16137,9 +16142,9 @@ call $~lib/builtins/abort unreachable end - local.get $13 + local.get $12 call $std/array/assertSortedDefault - local.get $13 + local.get $12 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -16152,47 +16157,47 @@ call $~lib/builtins/abort unreachable end - local.get $17 + local.get $16 call $std/array/assertSortedDefault local.get $1 call $~lib/rt/pure/__release - local.get $18 + local.get $17 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $14 + local.get $13 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $20 + local.get $19 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $19 + local.get $18 call $~lib/rt/pure/__release - local.get $16 + local.get $15 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $8 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release - local.get $9 + local.get $7 call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $13 + local.get $12 call $~lib/rt/pure/__release - local.get $17 + local.get $16 call $~lib/rt/pure/__release - local.get $21 + local.get $20 call $~lib/rt/pure/__release - local.get $22 + local.get $21 call $~lib/rt/pure/__release i32.const 64 call $std/array/createRandomOrderedArray @@ -16241,18 +16246,18 @@ i32.const 7904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $8 + local.set $9 i32.const 1 global.set $~argumentsLength block $__inlined_func$std/array/isSorted<~lib/string/String|null> (result i32) local.get $5 call $~lib/rt/pure/__retain - local.tee $7 + local.tee $8 i32.const 7952 call $~lib/rt/pure/__retain local.tee $6 call $~lib/array/Array<~lib/array/Array>#sort - local.tee $9 + local.tee $7 call $~lib/rt/pure/__retain local.set $0 local.get $6 @@ -16325,16 +16330,16 @@ call $~lib/builtins/abort unreachable end - local.get $9 - call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release i32.const 7952 call $~lib/rt/pure/__release local.get $5 - local.get $8 + local.get $9 call $std/array/isArraysEqual<~lib/string/String|null> i32.eqz if @@ -16362,14 +16367,14 @@ f64.const 32 f64.mul i32.trunc_f64_s - local.set $7 + local.set $8 i32.const 0 local.set $6 i32.const 7840 local.set $0 loop $for-loop|01 local.get $6 - local.get $7 + local.get $8 i32.lt_s if block $__inlined_func$~lib/string/String#charAt (result i32) @@ -16407,7 +16412,7 @@ local.get $0 local.get $2 call $~lib/string/String.__concat - local.tee $9 + local.tee $7 local.tee $0 i32.ne if @@ -16419,7 +16424,7 @@ end local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $7 call $~lib/rt/pure/__release local.get $6 i32.const 1 @@ -16450,7 +16455,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $9 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -16489,7 +16494,7 @@ local.tee $6 i32.const 7840 call $~lib/array/Array#join - local.tee $8 + local.tee $9 i32.const 8576 call $~lib/string/String.__eq i32.eqz @@ -16507,10 +16512,10 @@ i32.const 8608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $8 i32.const 8640 call $~lib/array/Array#join - local.tee $9 + local.tee $7 i32.const 8576 call $~lib/string/String.__eq i32.eqz @@ -16531,7 +16536,7 @@ local.tee $11 i32.const 8704 call $~lib/array/Array#join - local.tee $13 + local.tee $12 i32.const 8736 call $~lib/string/String.__eq i32.eqz @@ -16575,10 +16580,10 @@ i32.const 10080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $15 i32.const 7840 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $17 + local.tee $16 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -16611,7 +16616,7 @@ i32.store offset=8 local.get $4 call $~lib/array/Array#join - local.tee $18 + local.tee $17 i32.const 10160 call $~lib/string/String.__eq i32.eqz @@ -16631,17 +16636,17 @@ call $~lib/rt/pure/__retain local.tee $5 i32.load offset=4 - local.tee $14 + local.tee $13 i32.const 0 call $std/array/Ref#constructor i32.store - local.get $14 + local.get $13 i32.const 0 call $std/array/Ref#constructor i32.store offset=4 local.get $5 call $~lib/array/Array#join - local.tee $14 + local.tee $13 i32.const 10240 call $~lib/string/String.__eq i32.eqz @@ -16659,31 +16664,31 @@ call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $13 + local.get $12 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $16 + local.get $15 call $~lib/rt/pure/__release - local.get $17 + local.get $16 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $18 + local.get $17 call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $14 + local.get $13 call $~lib/rt/pure/__release i32.const 0 i32.const 2 @@ -16691,7 +16696,7 @@ i32.const 10320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $3 + local.set $0 i32.const 1 i32.const 2 i32.const 3 @@ -16713,11 +16718,11 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $6 - local.get $3 + local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $0 - local.get $0 + local.tee $1 + local.get $1 i32.const 7840 call $~lib/string/String.__eq i32.eqz @@ -16732,9 +16737,9 @@ local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $0 - local.set $22 - local.get $0 + local.tee $1 + local.set $21 + local.get $1 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -16749,9 +16754,9 @@ local.get $5 i32.const 8144 call $~lib/array/Array#join - local.tee $0 - local.set $24 - local.get $0 + local.tee $1 + local.set $23 + local.get $1 i32.const 10432 call $~lib/string/String.__eq i32.eqz @@ -16766,9 +16771,9 @@ local.get $6 i32.const 8144 call $~lib/array/Array#join - local.tee $0 + local.tee $1 local.set $25 - local.get $0 + local.get $1 i32.const 10464 call $~lib/string/String.__eq i32.eqz @@ -16786,15 +16791,15 @@ i32.const 10496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $9 i32.load offset=4 - local.get $8 + local.get $9 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $7 + local.set $8 i32.const 8144 call $~lib/rt/pure/__release - local.get $7 + local.get $8 i32.const 10528 call $~lib/string/String.__eq i32.eqz @@ -16812,9 +16817,9 @@ i32.const 10560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $7 i32.load offset=4 - local.get $9 + local.get $7 i32.load offset=12 call $~lib/util/string/joinIntegerArray local.set $11 @@ -16838,15 +16843,15 @@ i32.const 10640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 + local.tee $12 i32.load offset=4 - local.get $13 + local.get $12 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $16 + local.set $15 i32.const 8144 call $~lib/rt/pure/__release - local.get $16 + local.get $15 i32.const 10688 call $~lib/string/String.__eq i32.eqz @@ -16864,15 +16869,15 @@ i32.const 10752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 + local.tee $16 i32.load offset=4 - local.get $17 + local.get $16 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $18 + local.set $17 i32.const 8144 call $~lib/rt/pure/__release - local.get $18 + local.get $17 i32.const 10800 call $~lib/string/String.__eq i32.eqz @@ -16890,12 +16895,12 @@ i32.const 10912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $27 + local.tee $26 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $0 - local.set $28 - local.get $0 + local.tee $1 + local.set $27 + local.get $1 i32.const 10960 call $~lib/string/String.__eq i32.eqz @@ -16913,12 +16918,12 @@ i32.const 11072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 + local.tee $28 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $0 - local.set $30 - local.get $0 + local.tee $1 + local.set $29 + local.get $1 i32.const 11104 call $~lib/string/String.__eq i32.eqz @@ -16936,9 +16941,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 - i32.load offset=4 local.tee $1 + i32.load offset=4 + local.tee $2 i32.const 2 i32.const 2 i32.const 3 @@ -16946,7 +16951,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $1 + local.get $2 i32.const 2 i32.const 2 i32.const 3 @@ -16954,15 +16959,15 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $0 + local.get $1 i32.load offset=4 - local.get $0 + local.get $1 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.set $14 + local.set $13 i32.const 8144 call $~lib/rt/pure/__release - local.get $14 + local.get $13 i32.const 11200 call $~lib/string/String.__eq i32.eqz @@ -16980,9 +16985,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 - i32.load offset=4 local.tee $2 + i32.load offset=4 + local.tee $3 i32.const 2 i32.const 0 i32.const 6 @@ -16990,7 +16995,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 i32.const 2 i32.const 0 i32.const 6 @@ -16998,15 +17003,15 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $1 + local.get $2 i32.load offset=4 - local.get $1 + local.get $2 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.set $20 + local.set $19 i32.const 8144 call $~lib/rt/pure/__release - local.get $20 + local.get $19 i32.const 11200 call $~lib/string/String.__eq i32.eqz @@ -17024,7 +17029,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 i32.const 1 i32.const 2 @@ -17032,7 +17037,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.tee $30 i32.load offset=4 i32.const 1 i32.const 2 @@ -17041,17 +17046,17 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $31 + local.get $30 i32.store - local.get $2 + local.get $3 i32.load offset=4 - local.get $2 + local.get $3 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> - local.set $19 + local.set $18 i32.const 8144 call $~lib/rt/pure/__release - local.get $19 + local.get $18 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -17063,7 +17068,7 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $0 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -17072,27 +17077,29 @@ local.get $6 call $~lib/rt/pure/__release call $~lib/rt/pure/__release - local.get $22 + local.get $21 call $~lib/rt/pure/__release - local.get $24 + local.get $23 call $~lib/rt/pure/__release local.get $25 call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $13 + local.get $12 + 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 + local.get $26 call $~lib/rt/pure/__release local.get $27 call $~lib/rt/pure/__release @@ -17100,14 +17107,12 @@ call $~lib/rt/pure/__release local.get $29 call $~lib/rt/pure/__release - local.get $30 - call $~lib/rt/pure/__release - local.get $14 - call $~lib/rt/pure/__release - local.get $20 + local.get $13 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release + local.get $18 + call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/rt/pure/__release i32.const 4 @@ -17116,9 +17121,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $6 i32.load offset=4 - local.tee $3 + local.tee $0 i32.const 1 i32.const 2 i32.const 3 @@ -17126,7 +17131,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $0 i32.const 3 i32.const 2 i32.const 3 @@ -17134,7 +17139,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $3 + local.get $0 i32.const 3 i32.const 2 i32.const 3 @@ -17142,7 +17147,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 - local.get $3 + local.get $0 i32.const 3 i32.const 2 i32.const 3 @@ -17150,9 +17155,9 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 - local.get $5 + local.get $6 call $~lib/array/Array<~lib/array/Array>#flat - local.tee $6 + local.tee $9 i32.load offset=12 i32.const 10 i32.ne @@ -17164,15 +17169,17 @@ call $~lib/builtins/abort unreachable end + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $12 + local.get $0 i32.const 10 i32.lt_s if - local.get $6 - local.get $12 + local.get $9 + local.get $0 call $~lib/array/Array#__get - local.get $12 + local.get $0 i32.ne if i32.const 0 @@ -17182,10 +17189,10 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $0 i32.const 1 i32.add - local.set $12 + local.set $0 br $for-loop|1 end end @@ -17197,7 +17204,7 @@ call $~lib/rt/pure/__retain local.tee $8 i32.load offset=4 - local.tee $3 + local.tee $0 i32.const 1 i32.const 2 i32.const 27 @@ -17205,7 +17212,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $0 i32.const 3 i32.const 2 i32.const 27 @@ -17213,7 +17220,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $3 + local.get $0 i32.const 3 i32.const 2 i32.const 27 @@ -17221,7 +17228,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=8 - local.get $3 + local.get $0 i32.const 1 i32.const 2 i32.const 27 @@ -17231,15 +17238,15 @@ i32.store offset=12 local.get $8 call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat - local.set $3 + local.set $4 i32.const 8 i32.const 2 i32.const 27 i32.const 11808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $5 + local.get $4 i32.load offset=12 i32.const 8 i32.ne @@ -17252,21 +17259,21 @@ unreachable end i32.const 0 - local.set $12 + local.set $0 loop $for-loop|2 - local.get $12 - local.get $4 + local.get $0 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $3 - local.get $12 + local.get $4 + local.get $0 call $~lib/array/Array#__get local.tee $7 - local.get $4 - local.get $12 + local.get $5 + local.get $0 call $~lib/array/Array#__get - local.tee $9 + local.tee $11 call $~lib/string/String.__eq i32.eqz if @@ -17279,12 +17286,12 @@ end local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $11 call $~lib/rt/pure/__release - local.get $12 + local.get $0 i32.const 1 i32.add - local.set $12 + local.set $0 br $for-loop|2 end end @@ -17294,7 +17301,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $0 i32.load offset=4 local.tee $7 i32.const 0 @@ -17312,7 +17319,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $12 + local.get $0 call $~lib/array/Array<~lib/array/Array>#flat local.tee $7 i32.load offset=12 @@ -17324,34 +17331,34 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $0 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release local.get $10 call $~lib/rt/pure/__release - local.get $23 - call $~lib/rt/pure/__release - local.get $15 + local.get $22 call $~lib/rt/pure/__release - local.get $26 + local.get $14 call $~lib/rt/pure/__release - local.get $0 + local.get $24 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $8 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $8 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release ) (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19218,21 +19225,20 @@ (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 $0 i32.load offset=12 - local.tee $4 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 local.get $1 select - local.tee $6 + local.tee $5 i32.add - local.tee $2 + local.tee $3 i32.const 268435452 i32.gt_u if @@ -19243,78 +19249,80 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 2 i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $6 i32.load offset=4 - local.set $2 - local.get $4 + local.set $3 + local.get $2 i32.const 2 i32.shl - local.set $4 + local.set $2 local.get $0 i32.load offset=4 local.set $0 loop $for-loop|0 - local.get $3 local.get $4 + local.get $2 i32.lt_u if - local.get $2 local.get $3 + local.get $4 i32.add local.get $0 - local.get $3 + local.get $4 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $4 i32.const 4 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end local.get $2 - local.get $4 + local.get $3 i32.add - local.set $0 + local.set $4 local.get $1 i32.load offset=4 local.set $3 - local.get $6 + local.get $5 i32.const 2 i32.shl local.set $2 + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $5 + local.get $0 local.get $2 i32.lt_u if local.get $0 - local.get $5 + local.get $4 i32.add + local.get $0 local.get $3 - local.get $5 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $5 + local.get $0 i32.const 4 i32.add - local.set $5 + local.set $0 br $for-loop|1 end end local.get $1 call $~lib/rt/pure/__release - local.get $7 + local.get $6 ) (func $~lib/array/Array<~lib/string/String>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -19323,10 +19331,12 @@ local.get $0 i32.load offset=4 local.set $5 - local.get $3 local.get $0 i32.load offset=12 local.tee $4 + local.set $6 + local.get $3 + local.get $4 local.get $3 local.get $4 i32.lt_s @@ -19349,7 +19359,7 @@ local.get $1 local.get $4 local.get $1 - local.get $4 + local.get $6 i32.lt_s select end @@ -19704,7 +19714,6 @@ (func $~lib/array/Array<~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.get $0 i32.load offset=12 local.set $3 @@ -19767,36 +19776,38 @@ call $~lib/rt/pure/__retain local.tee $3 i32.load offset=4 - local.set $5 + local.set $4 local.get $0 i32.load offset=4 local.get $1 i32.const 2 i32.shl i32.add + local.set $1 + i32.const 0 local.set $0 local.get $2 i32.const 2 i32.shl - local.set $1 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $1 + local.get $0 + local.get $2 i32.lt_u if + local.get $0 local.get $4 - local.get $5 i32.add local.get $0 - local.get $4 + local.get $1 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $while-continue|0 end end diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index a9850b2d24..b0dafe80b1 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -92,23 +92,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,25 +123,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -153,24 +153,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -179,7 +179,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -189,7 +189,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -599,16 +599,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -620,18 +620,18 @@ unreachable end i32.const 1440 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3008 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1440 @@ -645,7 +645,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -663,10 +663,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -679,7 +679,7 @@ i32.const 1440 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 3dc4bc8c3a..1fc37200c5 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -100,23 +100,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 @@ -131,25 +131,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -161,24 +161,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -187,7 +187,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -197,7 +197,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -607,16 +607,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -628,18 +628,18 @@ unreachable end i32.const 1520 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3088 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1520 @@ -653,7 +653,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -671,10 +671,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -687,7 +687,7 @@ i32.const 1520 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index 90addc1de8..e1e10c778f 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -99,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 @@ -130,25 +130,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -160,24 +160,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -186,7 +186,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -196,7 +196,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -606,16 +606,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -627,18 +627,18 @@ unreachable end i32.const 1568 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3136 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1568 @@ -652,7 +652,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -670,10 +670,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -686,7 +686,7 @@ i32.const 1568 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 900b694d99..e9c68a62b6 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -5179,7 +5179,7 @@ (local $5 i64) (local $6 i32) (local $7 f64) - block $~lib/util/math/exp2_lut|inlined.0 + block $~lib/util/math/exp2_lut|inlined.0 (result f64) local.get $0 i64.reinterpret_f64 local.tee $3 @@ -5194,48 +5194,45 @@ i32.const 63 i32.ge_u if + f64.const 1 local.get $1 i32.const 969 i32.sub i32.const -2147483648 i32.ge_u - if - f64.const 1 - local.set $2 - br $~lib/util/math/exp2_lut|inlined.0 - end + br_if $~lib/util/math/exp2_lut|inlined.0 + drop local.get $1 i32.const 1033 i32.ge_u if + f64.const 0 local.get $3 i64.const -4503599627370496 i64.eq br_if $~lib/util/math/exp2_lut|inlined.0 + drop + f64.const 1 + local.get $0 + f64.add local.get $1 i32.const 2047 i32.ge_u - if - f64.const 1 - local.get $0 - f64.add - local.set $2 - br $~lib/util/math/exp2_lut|inlined.0 - end + br_if $~lib/util/math/exp2_lut|inlined.0 + drop + f64.const inf local.get $3 i64.const 63 i64.shr_u i64.eqz - if - f64.const inf - local.set $2 - br $~lib/util/math/exp2_lut|inlined.0 - else - local.get $3 - i64.const -4570929321408987136 - i64.ge_u - br_if $~lib/util/math/exp2_lut|inlined.0 - end + br_if $~lib/util/math/exp2_lut|inlined.0 + drop + f64.const 0 + local.get $3 + i64.const -4570929321408987136 + i64.ge_u + br_if $~lib/util/math/exp2_lut|inlined.0 + drop end i32.const 0 local.get $1 @@ -5365,7 +5362,6 @@ f64.const 2.2250738585072014e-308 f64.mul end - local.set $2 br $~lib/util/math/exp2_lut|inlined.0 end local.get $3 @@ -5375,9 +5371,7 @@ f64.mul local.get $2 f64.add - local.set $2 end - local.get $2 ) (func $std/math/test_exp2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) local.get $0 @@ -5398,61 +5392,60 @@ ) (func $~lib/math/NativeMathf.exp2 (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.get $0 - f64.promote_f32 - local.set $1 - block $~lib/util/math/exp2f_lut|inlined.0 + (local $4 f64) + (local $5 i64) + block $~lib/util/math/exp2f_lut|inlined.0 (result f32) + local.get $0 + f64.promote_f32 + local.set $1 local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 20 i32.shr_u i32.const 2047 i32.and - local.tee $4 + local.tee $3 i32.const 1072 i32.ge_u if - local.get $3 + f32.const 0 + local.get $2 i32.const -8388608 i32.eq br_if $~lib/util/math/exp2f_lut|inlined.0 - local.get $4 + drop + local.get $0 + local.get $0 + f32.add + local.get $3 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 + br_if $~lib/util/math/exp2f_lut|inlined.0 + drop + local.get $0 + f32.const 1701411834604692317316873e14 + f32.mul 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 + br_if $~lib/util/math/exp2f_lut|inlined.0 + drop + f32.const 0 local.get $0 f32.const -150 f32.le br_if $~lib/util/math/exp2f_lut|inlined.0 + drop end f64.const 0.6931471806916203 local.get $1 local.get $1 f64.const 211106232532992 f64.add - local.tee $5 + local.tee $4 f64.const 211106232532992 f64.sub f64.sub @@ -5470,9 +5463,9 @@ f64.mul f64.mul f64.add - local.get $5 + local.get $4 i64.reinterpret_f64 - local.tee $6 + local.tee $5 i32.wrap_i64 i32.const 31 i32.and @@ -5481,16 +5474,14 @@ i32.const 3336 i32.add i64.load - local.get $6 + local.get $5 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 @@ -7091,21 +7082,20 @@ (local $3 f64) (local $4 i32) (local $5 i32) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) (local $8 i32) (local $9 i32) (local $10 f64) (local $11 i32) - (local $12 f64) - (local $13 i64) - (local $14 f64) - (local $15 i32) + (local $12 i32) + (local $13 f64) + (local $14 i64) + (local $15 f64) (local $16 i32) (local $17 f64) (local $18 i32) - (local $19 i32) - (local $20 f64) + (local $19 f64) local.get $1 f64.abs f64.const 2 @@ -7160,30 +7150,30 @@ end local.get $0 i64.reinterpret_f64 - local.tee $13 + local.tee $14 i32.wrap_i64 local.set $18 - local.get $13 + local.get $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $15 + local.tee $16 i32.const 2147483647 i32.and local.set $4 local.get $1 i64.reinterpret_f64 - local.tee $13 + local.tee $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $8 i32.const 2147483647 i32.and - local.tee $8 - local.get $13 + local.tee $9 + local.get $14 i32.wrap_i64 - local.tee $19 + local.tee $6 i32.or i32.eqz if @@ -7191,14 +7181,14 @@ return end i32.const 1 - local.get $19 + local.get $6 i32.const 0 - local.get $8 + local.get $9 i32.const 2146435072 i32.eq select i32.const 1 - local.get $8 + local.get $9 i32.const 2146435072 i32.gt_s i32.const 1 @@ -7220,51 +7210,51 @@ f64.add return end - local.get $15 + local.get $16 i32.const 0 i32.lt_s if (result i32) - local.get $8 + local.get $9 i32.const 1128267776 i32.ge_s if (result i32) i32.const 2 else - local.get $8 + local.get $9 i32.const 1072693248 i32.ge_s if (result i32) i32.const 52 i32.const 20 - local.get $8 + local.get $9 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $9 + local.tee $11 i32.const 20 i32.gt_s local.tee $5 select - local.get $9 + local.get $11 i32.sub - local.set $11 + local.set $12 i32.const 2 - local.get $19 - local.get $8 + local.get $6 + local.get $9 local.get $5 select local.tee $5 - local.get $11 + local.get $12 i32.shr_u - local.tee $9 + local.tee $11 i32.const 1 i32.and i32.sub i32.const 0 local.get $5 - local.get $9 local.get $11 + local.get $12 i32.shl i32.eq select @@ -7276,10 +7266,10 @@ i32.const 0 end local.set $5 - local.get $19 + local.get $6 i32.eqz if - local.get $8 + local.get $9 i32.const 2146435072 i32.eq if @@ -7293,20 +7283,20 @@ i32.const 1072693248 i32.ge_s if - local.get $1 f64.const 0 - local.get $7 + local.get $1 + local.get $8 i32.const 0 - i32.ge_s + i32.lt_s select return else + f64.const 0 local.get $1 f64.neg - f64.const 0 - local.get $7 + local.get $8 i32.const 0 - i32.lt_s + i32.ge_s select return end @@ -7317,11 +7307,11 @@ end unreachable end - local.get $8 + local.get $9 i32.const 1072693248 i32.eq if - local.get $7 + local.get $8 i32.const 0 i32.ge_s if @@ -7333,7 +7323,7 @@ f64.div return end - local.get $7 + local.get $8 i32.const 1073741824 i32.eq if @@ -7342,11 +7332,11 @@ f64.mul return end - local.get $7 + local.get $8 i32.const 1071644672 i32.eq if - local.get $15 + local.get $16 i32.const 0 i32.ge_s if @@ -7378,12 +7368,12 @@ local.get $3 f64.div local.get $3 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select local.set $3 - local.get $15 + local.get $16 i32.const 0 i32.lt_s if (result f64) @@ -7414,7 +7404,7 @@ return end end - local.get $15 + local.get $16 i32.const 0 i32.lt_s if (result f64) @@ -7439,11 +7429,11 @@ f64.const 1 end local.set $10 - local.get $8 + local.get $9 i32.const 1105199104 i32.gt_s if (result f64) - local.get $8 + local.get $9 i32.const 1139802112 i32.gt_s if @@ -7453,7 +7443,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7465,7 +7455,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.gt_s select @@ -7486,7 +7476,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7506,7 +7496,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.gt_s select @@ -7544,9 +7534,9 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $6 + local.set $7 local.get $0 - local.get $6 + local.get $7 local.get $3 f64.sub f64.sub @@ -7574,7 +7564,7 @@ i32.const 1023 i32.sub i32.add - local.set $7 + local.set $6 local.get $4 i32.const 1048575 i32.and @@ -7584,25 +7574,28 @@ local.set $4 local.get $5 i32.const 235662 - i32.gt_s - if + i32.le_s + if (result i32) + i32.const 0 + else local.get $5 i32.const 767610 i32.lt_s - if + if (result i32) i32.const 1 - local.set $16 else - local.get $7 + local.get $6 i32.const 1 i32.add - local.set $7 + local.set $6 local.get $4 i32.const -1048576 i32.add local.set $4 + i32.const 0 end end + local.set $5 f64.const 0.9617967009544373 local.get $3 i64.reinterpret_f64 @@ -7614,16 +7607,16 @@ i64.shl i64.or f64.reinterpret_i64 - local.tee $6 + local.tee $7 f64.const 1.5 f64.const 1 - local.get $16 + local.get $5 select local.tee $2 f64.sub local.tee $3 f64.const 1 - local.get $6 + local.get $7 local.get $2 f64.add f64.div @@ -7634,29 +7627,29 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $14 + local.tee $15 f64.const 3 - local.get $14 - local.get $14 + local.get $15 + local.get $15 f64.mul - local.tee $20 + local.tee $19 f64.add local.get $17 local.get $17 f64.mul - local.tee $12 - local.get $12 + local.tee $13 + local.get $13 f64.mul f64.const 0.5999999999999946 - local.get $12 + local.get $13 f64.const 0.4285714285785502 - local.get $12 + local.get $13 f64.const 0.33333332981837743 - local.get $12 + local.get $13 f64.const 0.272728123808534 - local.get $12 + local.get $13 f64.const 0.23066074577556175 - local.get $12 + local.get $13 f64.const 0.20697501780033842 f64.mul f64.add @@ -7671,7 +7664,7 @@ f64.mul local.get $0 local.get $3 - local.get $14 + local.get $15 local.get $4 i32.const 1 i32.shr_s @@ -7679,7 +7672,7 @@ i32.or i32.const 524288 i32.add - local.get $16 + local.get $5 i32.const 18 i32.shl i32.add @@ -7690,8 +7683,8 @@ local.tee $0 f64.mul f64.sub - local.get $14 - local.get $6 + local.get $15 + local.get $7 local.get $0 local.get $2 f64.sub @@ -7700,7 +7693,7 @@ f64.sub f64.mul local.tee $2 - local.get $14 + local.get $15 local.get $17 f64.add f64.mul @@ -7711,17 +7704,17 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 + local.tee $7 f64.mul local.tee $3 local.get $2 - local.get $6 + local.get $7 f64.mul local.get $0 - local.get $6 + local.get $7 f64.const 3 f64.sub - local.get $20 + local.get $19 f64.sub f64.sub local.get $17 @@ -7735,7 +7728,7 @@ f64.reinterpret_i64 local.tee $2 f64.mul - local.tee $20 + local.tee $19 f64.const -7.028461650952758e-09 local.get $2 f64.mul @@ -7749,18 +7742,18 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $16 + local.get $5 select f64.add local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $16 + local.get $5 select local.tee $3 f64.add - local.get $7 + local.get $6 f64.convert_i32_s local.tee $0 f64.add @@ -7768,14 +7761,14 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $6 + local.set $7 local.get $2 - local.get $6 + local.get $7 local.get $0 f64.sub local.get $3 f64.sub - local.get $20 + local.get $19 f64.sub f64.sub end @@ -7788,7 +7781,7 @@ f64.reinterpret_i64 local.tee $0 f64.sub - local.get $6 + local.get $7 f64.mul local.get $1 local.get $3 @@ -7796,27 +7789,27 @@ f64.add local.tee $1 local.get $0 - local.get $6 + local.get $7 f64.mul local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 - local.tee $13 + local.tee $14 i32.wrap_i64 local.set $5 block $folding-inner1 block $folding-inner0 - local.get $13 + local.get $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $11 + local.tee $12 i32.const 1083179008 i32.ge_s if local.get $5 - local.get $11 + local.get $12 i32.const 1083179008 i32.sub i32.or @@ -7830,14 +7823,14 @@ i32.or br_if $folding-inner0 else - local.get $11 + local.get $12 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 local.get $5 - local.get $11 + local.get $12 i32.const -1064252416 i32.sub i32.or @@ -7850,31 +7843,31 @@ select br_if $folding-inner1 end - local.get $11 + local.get $12 i32.const 2147483647 i32.and - local.tee $9 + local.tee $11 i32.const 20 i32.shr_s i32.const 1023 i32.sub local.set $5 i32.const 0 - local.set $7 + local.set $6 local.get $1 - local.get $9 + local.get $11 i32.const 1071644672 i32.gt_s if i32.const 1048575 - local.get $11 + local.get $12 i32.const 1048576 local.get $5 i32.const 1 i32.add i32.shr_s i32.add - local.tee $9 + local.tee $11 i32.const 2147483647 i32.and i32.const 20 @@ -7885,7 +7878,7 @@ i32.shr_s i32.const -1 i32.xor - local.get $9 + local.get $11 i32.and i64.extend_i32_s i64.const 32 @@ -7893,7 +7886,7 @@ f64.reinterpret_i64 local.set $0 i32.const 0 - local.get $9 + local.get $11 i32.const 1048575 i32.and i32.const 1048576 @@ -7902,14 +7895,14 @@ local.get $5 i32.sub i32.shr_s - local.tee $7 + local.tee $6 i32.sub - local.get $7 - local.get $11 + local.get $6 + local.get $12 i32.const 0 i32.lt_s select - local.set $7 + local.set $6 local.get $2 local.get $0 f64.sub @@ -7991,7 +7984,7 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.get $7 + local.get $6 i32.const 20 i32.shl i32.add @@ -8002,7 +7995,7 @@ i32.le_s if (result f64) local.get $0 - local.get $7 + local.get $6 call $~lib/math/NativeMath.scalbn else local.get $0 @@ -8054,13 +8047,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 @@ -8136,7 +8129,7 @@ local.tee $4 i32.const 2147483647 i32.and - local.set $7 + local.set $6 local.get $4 i32.const 31 i32.shr_u @@ -8155,28 +8148,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 + 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 @@ -8184,15 +8177,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 @@ -8201,33 +8194,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 $~lib/math/exp2f|inlined.0 (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 @@ -8253,7 +8247,7 @@ f64.mul f64.add f64.mul - local.get $8 + local.get $7 f64.convert_i64_s f64.add f64.mul @@ -8261,18 +8255,17 @@ f64.const -1022 f64.lt br_if $~lib/math/exp2f|inlined.0 + 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 $~lib/math/exp2f|inlined.0 + drop local.get $2 local.get $2 f64.nearest - local.tee $5 + local.tee $11 f64.sub local.tee $2 local.get $2 @@ -8306,15 +8299,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 @@ -8322,13 +8313,13 @@ 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 ) @@ -8394,7 +8385,6 @@ i32.xor ) (func $~lib/math/NativeMath.seedRandom (param $0 i64) - (local $1 i32) i32.const 1 global.set $~lib/math/random_seeded local.get $0 diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index 868a0b1ae3..49e1f223da 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -1075,11 +1075,13 @@ global.set $std/operator-overloading/excl global.get $std/operator-overloading/excl local.tee $0 + local.set $1 + local.get $0 i32.load if (result i32) i32.const 0 else - local.get $0 + local.get $1 i32.load offset=4 i32.eqz end diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index e96619941d..27157c4e65 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -96,23 +96,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 @@ -127,25 +127,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -157,24 +157,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -183,7 +183,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -193,7 +193,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -603,16 +603,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -624,18 +624,18 @@ unreachable end i32.const 1456 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3024 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1456 @@ -649,7 +649,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -667,10 +667,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -683,7 +683,7 @@ i32.const 1456 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 632f355aed..1566c00a87 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -130,23 +130,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 @@ -161,25 +161,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -191,24 +191,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -217,7 +217,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -227,7 +227,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -637,16 +637,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -658,18 +658,18 @@ unreachable end i32.const 1472 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 3040 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1472 @@ -683,7 +683,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -701,10 +701,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -717,7 +717,7 @@ i32.const 1472 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index badcd07fcd..84d97b0c7c 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -422,23 +422,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 @@ -453,25 +453,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -483,24 +483,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -509,7 +509,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -519,7 +519,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -929,16 +929,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -950,18 +950,18 @@ unreachable end i32.const 18912 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 20480 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 18912 @@ -975,7 +975,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -993,10 +993,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -1009,7 +1009,7 @@ i32.const 18912 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -2368,21 +2368,21 @@ (local $11 i32) local.get $0 call $~lib/string/String#get:length - local.tee $11 + local.tee $8 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $11 + local.get $8 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc - local.set $9 + local.set $10 loop $for-loop|0 local.get $4 - local.get $11 + local.get $8 i32.lt_u if local.get $0 @@ -2391,18 +2391,20 @@ i32.shl i32.add i32.load16_u - local.tee $1 + local.tee $2 + local.set $1 + local.get $2 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $11 + local.get $8 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $1 + local.get $2 i32.const 55295 i32.sub i32.const 1025 @@ -2415,7 +2417,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $6 + local.tee $5 i32.const 56319 i32.sub i32.const 1025 @@ -2425,11 +2427,11 @@ i32.const 1 i32.add local.set $4 - local.get $6 + local.get $5 i32.const 1023 i32.and - local.get $1 - local.tee $2 + local.get $2 + local.tee $1 i32.const 1023 i32.and i32.const 10 @@ -2437,91 +2439,91 @@ i32.or i32.const 65536 i32.add - local.tee $1 + local.tee $2 i32.const 131072 i32.ge_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $2 - local.get $6 + local.get $1 + local.get $5 i32.const 16 i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-continue|0 end end end - local.get $1 + local.get $2 i32.const 304 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 else - local.get $1 + local.get $2 i32.const 931 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $11 + local.get $8 i32.const 1 i32.gt_u if (result i32) block $~lib/util/string/isFinalSigma|inlined.0 (result i32) local.get $0 - local.set $6 + local.set $5 local.get $4 i32.const 0 local.set $3 i32.const 0 local.get $4 - local.tee $1 + local.tee $2 i32.const 30 i32.sub - local.tee $2 + local.tee $1 i32.const 0 - local.get $2 + local.get $1 i32.gt_s select - local.set $10 + local.set $11 loop $while-continue|1 - local.get $1 - local.get $10 + local.get $2 + local.get $11 i32.gt_s if block $~lib/util/string/codePointBefore|inlined.0 (result i32) - local.get $1 - local.set $2 + local.get $2 + local.set $1 i32.const -1 - local.get $1 + local.get $2 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 drop - local.get $6 - local.get $2 + local.get $5 + local.get $1 i32.const 1 i32.sub i32.const 1 @@ -2533,22 +2535,22 @@ i32.and i32.const 56320 i32.eq - local.get $2 + local.get $1 i32.const 2 i32.sub i32.const 0 i32.ge_s i32.and if - local.get $6 - local.get $2 + local.get $5 + local.get $1 i32.const 2 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $2 + local.tee $1 i32.const 64512 i32.and i32.const 55296 @@ -2557,7 +2559,7 @@ local.get $7 i32.const 1023 i32.and - local.get $2 + local.get $1 i32.const 1023 i32.and i32.const 10 @@ -2577,9 +2579,9 @@ i32.eq select end - local.tee $2 + local.tee $1 local.set $7 - local.get $2 + local.get $1 i32.const 918000 i32.lt_u if (result i32) @@ -2592,12 +2594,12 @@ i32.eqz if i32.const 0 - local.get $2 + local.get $1 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $2 + local.get $1 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2608,14 +2610,14 @@ i32.const 1 local.set $3 end - local.get $1 local.get $2 + local.get $1 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $1 + local.set $2 br $while-continue|1 end end @@ -2626,41 +2628,41 @@ drop i32.const 1 i32.add - local.tee $1 + local.tee $2 i32.const 30 i32.add - local.tee $2 - local.get $11 - local.get $2 - local.get $11 + local.tee $1 + local.get $8 + local.get $1 + local.get $8 i32.lt_s select - local.set $5 + local.set $6 loop $while-continue|2 - local.get $1 - local.get $5 + local.get $2 + local.get $6 i32.lt_s if - local.get $6 - local.get $1 + local.get $5 + local.get $2 i32.const 1 i32.shl i32.add i32.load16_u - local.tee $2 + local.tee $1 i32.const 64512 i32.and i32.const 55296 i32.eq - local.get $11 - local.get $1 + local.get $8 + local.get $2 i32.const 1 i32.add i32.ne i32.and if (result i32) - local.get $6 - local.get $1 + local.get $5 + local.get $2 i32.const 1 i32.shl i32.add @@ -2671,7 +2673,7 @@ i32.const 56320 i32.eq if (result i32) - local.get $2 + local.get $1 i32.const 10 i32.shl local.get $7 @@ -2679,10 +2681,10 @@ i32.const -56613888 i32.add else - local.get $2 + local.get $1 end else - local.get $2 + local.get $1 end local.tee $7 i32.const 918000 @@ -2697,12 +2699,11 @@ i32.eqz if local.get $7 - local.tee $1 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $1 + local.get $7 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2710,14 +2711,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $1 + local.get $2 local.get $7 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $1 + local.set $2 br $while-continue|2 end end @@ -2733,53 +2734,53 @@ end i32.store16 else - local.get $1 + local.get $2 i32.const 9398 i32.sub i32.const 25 i32.le_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $1 + local.get $2 i32.const 26 i32.add i32.store16 else - local.get $1 + local.get $2 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $1 + local.tee $2 i32.const 65536 i32.lt_s if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $1 + local.get $2 i32.store16 else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $1 + local.get $2 i32.const 65536 i32.sub - local.tee $1 + local.tee $2 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $1 + local.get $2 i32.const 1023 i32.and i32.const 56320 @@ -2788,18 +2789,18 @@ i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 end end end end end else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add @@ -2820,15 +2821,15 @@ i32.const 1 i32.add local.set $4 - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-loop|0 end end + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 4e7584b42c..dc5826a290 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -163,23 +163,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 @@ -194,25 +194,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -224,24 +224,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -250,7 +250,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -260,7 +260,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -670,16 +670,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -691,18 +691,18 @@ unreachable end i32.const 22064 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 23632 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 22064 @@ -716,7 +716,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -734,10 +734,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -750,7 +750,7 @@ i32.const 22064 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 43f485e7e6..35a7728eb5 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -750,23 +750,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 @@ -781,25 +781,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -811,24 +811,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -837,7 +837,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -847,7 +847,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -1257,16 +1257,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -1278,18 +1278,18 @@ unreachable end i32.const 22000 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 23568 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 22000 @@ -1303,7 +1303,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -1321,10 +1321,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -1337,7 +1337,7 @@ i32.const 22000 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -3448,36 +3448,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) - (local $7 i32) + (local $6 i32) + (local $7 i64) (local $8 i32) - (local $9 f64) + (local $9 i32) (local $10 i64) - (local $11 f64) - (local $12 i64) + (local $11 i64) + (local $12 f64) (local $13 i64) - (local $14 i32) + (local $14 f64) (local $15 i32) (local $16 i64) - (local $17 i32) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $5 call $~lib/string/String#get:length - local.tee $17 + local.tee $6 i32.eqz br_if $folding-inner0 - local.get $3 + local.get $5 local.tee $0 i32.load16_u - local.set $15 + local.set $8 f64.const 1 - local.set $9 + local.set $14 loop $while-continue|0 - local.get $17 + local.get $6 if (result i32) - local.get $15 + local.get $8 call $~lib/util/string/isSpace else i32.const 0 @@ -3488,43 +3487,43 @@ i32.add local.tee $0 i32.load16_u - local.set $15 - local.get $17 + local.set $8 + local.get $6 i32.const 1 i32.sub - local.set $17 + local.set $6 br $while-continue|0 end end - local.get $17 + local.get $6 i32.eqz br_if $folding-inner0 - local.get $15 + local.get $8 i32.const 45 i32.eq if (result i32) - local.get $17 + local.get $6 i32.const 1 i32.sub - local.tee $17 + local.tee $6 i32.eqz br_if $folding-inner0 f64.const -1 - local.set $9 + local.set $14 local.get $0 i32.const 2 i32.add local.tee $0 i32.load16_u else - local.get $15 + local.get $8 i32.const 43 i32.eq if (result i32) - local.get $17 + local.get $6 i32.const 1 i32.sub - local.tee $17 + local.tee $6 i32.eqz br_if $folding-inner0 local.get $0 @@ -3533,14 +3532,14 @@ local.tee $0 i32.load16_u else - local.get $15 + local.get $8 end end - local.tee $15 + local.tee $8 i32.const 73 i32.eq i32.const 0 - local.get $17 + local.get $6 i32.const 8 i32.ge_s select @@ -3558,30 +3557,30 @@ i32.const 0 end if - local.get $3 + local.get $5 call $~lib/rt/pure/__release f64.const inf - local.get $9 + local.get $14 f64.mul return end br $folding-inner0 end - local.get $15 + local.get $8 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 - local.get $15 + local.get $8 i32.const 46 i32.ne select br_if $folding-inner0 local.get $0 - local.set $4 + local.set $1 loop $while-continue|1 - local.get $15 + local.get $8 i32.const 48 i32.eq if @@ -3590,63 +3589,63 @@ i32.add local.tee $0 i32.load16_u - local.set $15 - local.get $17 + local.set $8 + local.get $6 i32.const 1 i32.sub - local.set $17 + local.set $6 br $while-continue|1 end end - local.get $17 + local.get $6 i32.const 0 i32.le_s if - local.get $3 + local.get $5 call $~lib/rt/pure/__release f64.const 0 return end - local.get $15 + local.get $8 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 $17 + local.get $6 i32.const 1 i32.sub - local.tee $17 + local.tee $6 if (result i32) i32.const 0 else - local.get $4 + local.get $1 end br_if $folding-inner0 i32.const 1 - local.set $8 + local.set $15 loop $for-loop|2 local.get $0 i32.load16_u - local.tee $15 + local.tee $8 i32.const 48 i32.eq if - local.get $17 + local.get $6 i32.const 1 i32.sub - local.set $17 - local.get $1 + local.set $6 + local.get $3 i32.const 1 i32.sub - local.set $1 + local.set $3 local.get $0 i32.const 2 i32.add @@ -3654,59 +3653,59 @@ br $for-loop|2 end end - local.get $17 + local.get $6 i32.const 0 i32.le_s if - local.get $3 + local.get $5 call $~lib/rt/pure/__release f64.const 0 return end - local.get $15 + local.get $8 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 i32.const 0 - local.get $4 local.get $1 + local.get $3 select select br_if $folding-inner0 end - local.get $15 + local.get $8 i32.const 48 i32.sub - local.set $14 + local.set $9 loop $for-loop|3 i32.const 1 - local.get $8 + local.get $15 i32.eqz i32.const 0 - local.get $15 + local.get $8 i32.const 46 i32.eq select - local.get $14 + local.get $9 i32.const 10 i32.lt_u select if block $for-break3 - local.get $14 + local.get $9 i32.const 10 i32.lt_u if - local.get $14 + local.get $9 i64.extend_i32_u - local.get $16 + local.get $7 i64.const 10 i64.mul i64.add - local.get $16 - local.get $14 + local.get $7 + local.get $9 i32.eqz i32.eqz i64.extend_i32_u @@ -3715,21 +3714,21 @@ i32.const 19 i32.lt_s select - local.set $16 + local.set $7 local.get $2 i32.const 1 i32.add local.set $2 else local.get $2 - local.set $1 + local.set $3 i32.const 1 - local.set $8 + local.set $15 end - local.get $17 + local.get $6 i32.const 1 i32.sub - local.tee $17 + local.tee $6 i32.eqz br_if $for-break3 local.get $0 @@ -3737,17 +3736,17 @@ i32.add local.tee $0 i32.load16_u - local.tee $15 + local.tee $8 i32.const 48 i32.sub - local.set $14 + local.set $9 br $for-loop|3 end end end - local.get $1 + local.get $3 local.get $2 - local.get $8 + local.get $15 select i32.const 19 local.get $2 @@ -3756,138 +3755,142 @@ i32.lt_s select i32.sub - local.set $4 - i32.const 1 - local.set $2 - block $~lib/util/string/parseExp|inlined.0 - local.get $0 - local.tee $1 - i32.load16_u - i32.const 32 - i32.or - i32.const 101 - i32.ne - br_if $~lib/util/string/parseExp|inlined.0 - local.get $1 - i32.const 2 - i32.add - local.tee $14 - i32.load16_u - local.tee $0 - i32.const 45 - i32.eq - if (result i32) - local.get $17 + local.set $1 + block $~lib/util/string/scientific|inlined.0 + i32.const 1 + block $~lib/util/string/parseExp|inlined.0 (result i32) i32.const 1 - i32.sub - local.tee $17 - i32.eqz - br_if $~lib/util/string/parseExp|inlined.0 - i32.const -1 local.set $2 - local.get $14 + i32.const 0 + local.get $0 + local.tee $3 + i32.load16_u + i32.const 32 + i32.or + i32.const 101 + i32.ne + br_if $~lib/util/string/parseExp|inlined.0 + drop + local.get $3 i32.const 2 i32.add - local.tee $14 + local.tee $9 i32.load16_u - else - local.get $0 - i32.const 43 + local.tee $0 + i32.const 45 i32.eq if (result i32) - local.get $17 + i32.const 0 + local.get $6 i32.const 1 i32.sub - local.tee $17 + local.tee $6 i32.eqz br_if $~lib/util/string/parseExp|inlined.0 - local.get $14 + drop + i32.const -1 + local.set $2 + local.get $9 i32.const 2 i32.add - local.tee $14 + local.tee $9 i32.load16_u else local.get $0 + i32.const 43 + i32.eq + if (result i32) + i32.const 0 + local.get $6 + i32.const 1 + i32.sub + local.tee $6 + i32.eqz + br_if $~lib/util/string/parseExp|inlined.0 + drop + local.get $9 + i32.const 2 + i32.add + local.tee $9 + i32.load16_u + else + local.get $0 + end + end + local.set $0 + loop $while-continue|4 + local.get $0 + i32.const 48 + i32.eq + if + i32.const 0 + local.get $6 + i32.const 1 + i32.sub + local.tee $6 + i32.eqz + br_if $~lib/util/string/parseExp|inlined.0 + drop + local.get $9 + i32.const 2 + i32.add + local.tee $9 + i32.load16_u + local.set $0 + br $while-continue|4 + end end - end - local.set $0 - loop $while-continue|4 local.get $0 i32.const 48 - i32.eq - if - local.get $17 - i32.const 1 - i32.sub - local.tee $17 - i32.eqz - br_if $~lib/util/string/parseExp|inlined.0 - local.get $14 - i32.const 2 - i32.add - local.tee $14 - 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 $17 - select - if - local.get $5 - i32.const 3200 - i32.ge_s + i32.sub + local.set $0 + loop $for-loop|5 + local.get $0 + i32.const 10 + i32.lt_u + i32.const 0 + local.get $6 + select if local.get $2 i32.const 3200 i32.mul - local.set $7 - br $~lib/util/string/parseExp|inlined.0 - end - local.get $0 - local.get $5 - i32.const 10 - i32.mul - i32.add - local.set $5 - local.get $17 - i32.const 1 - i32.sub - local.set $17 - local.get $14 - i32.const 2 - i32.add - local.tee $14 - i32.load16_u - i32.const 48 - i32.sub - local.set $0 - br $for-loop|5 + local.get $4 + i32.const 3200 + i32.ge_s + br_if $~lib/util/string/parseExp|inlined.0 + drop + local.get $0 + local.get $4 + i32.const 10 + i32.mul + i32.add + local.set $4 + local.get $6 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 2 + i32.add + local.tee $9 + i32.load16_u + i32.const 48 + i32.sub + local.set $0 + br $for-loop|5 + end end + local.get $2 + local.get $4 + i32.mul end - local.get $2 - local.get $5 - i32.mul - local.set $7 - end - block $~lib/util/string/scientific|inlined.0 - i32.const 1 - local.get $4 - local.get $7 + local.get $1 i32.add local.tee $0 i32.const -342 i32.lt_s - local.get $16 + local.get $7 i64.eqz select br_if $~lib/util/string/scientific|inlined.0 @@ -3896,12 +3899,12 @@ i32.gt_s if f64.const inf - local.set $11 + local.set $12 br $~lib/util/string/scientific|inlined.0 end - local.get $16 + local.get $7 f64.convert_i64_u - local.set $11 + local.set $12 local.get $0 i32.eqz br_if $~lib/util/string/scientific|inlined.0 @@ -3914,7 +3917,7 @@ i32.gt_s select if - local.get $11 + local.get $12 local.get $0 i32.const 3 i32.shl @@ -3922,11 +3925,11 @@ i32.add f64.load f64.mul - local.set $11 + local.set $12 i32.const 22 local.set $0 end - local.get $16 + local.get $7 i64.const 9007199254740991 i64.le_u if (result i32) @@ -3948,7 +3951,7 @@ i32.const 0 i32.gt_s if - local.get $11 + local.get $12 local.get $0 i32.const 3 i32.shl @@ -3956,10 +3959,10 @@ i32.add f64.load f64.mul - local.set $11 + local.set $12 br $~lib/util/string/scientific|inlined.0 end - local.get $11 + local.get $12 i32.const 0 local.get $0 i32.sub @@ -3974,33 +3977,33 @@ i32.const 0 i32.lt_s if (result f64) - local.get $16 - local.get $16 + local.get $7 + local.get $7 i64.clz - local.tee $13 + local.tee $10 i64.shl - local.set $16 + local.set $7 local.get $0 local.tee $2 i64.extend_i32_s - local.get $13 + local.get $10 i64.sub - local.set $13 + local.set $10 loop $for-loop|6 local.get $2 i32.const -14 i32.le_s if f64.const 0.00004294967296 - local.get $16 + local.get $7 i64.const 6103515625 i64.rem_u - local.get $16 + local.get $7 i64.const 6103515625 i64.div_u - local.tee $10 + local.tee $13 i64.clz - local.tee $12 + local.tee $11 i64.const 18 i64.sub i64.shl @@ -4008,15 +4011,15 @@ f64.mul f64.nearest i64.trunc_f64_u - local.get $10 - local.get $12 + local.get $13 + local.get $11 i64.shl i64.add - local.set $16 - local.get $13 - local.get $12 + local.set $7 + local.get $10 + local.get $11 i64.sub - local.set $13 + local.set $10 local.get $2 i32.const 14 i32.add @@ -4024,75 +4027,75 @@ br $for-loop|6 end end - local.get $16 + local.get $7 i32.const 0 local.get $2 i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $10 + local.tee $13 i64.div_u - local.tee $6 + local.tee $16 i64.clz - local.set $12 - local.get $16 - local.get $10 + local.set $11 + local.get $7 + local.get $13 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $12 + local.get $11 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $10 + local.get $13 f64.convert_i64_u f64.div i64.trunc_f64_u - local.get $6 - local.get $12 + local.get $16 + local.get $11 i64.shl i64.add f64.convert_i64_u - local.get $13 - local.get $12 + local.get $10 + local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn else - local.get $16 - local.get $16 + local.get $7 + local.get $7 i64.ctz - local.tee $13 + local.tee $10 i64.shr_u - local.set $16 - local.get $13 + local.set $7 + local.get $10 local.get $0 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.add global.set $~lib/util/string/__fixmulShift loop $for-loop|7 - local.get $5 + local.get $4 i32.const 13 i32.ge_s if i64.const 32 - local.get $16 + local.get $7 i64.const 32 i64.shr_u i64.const 1220703125 i64.mul - local.get $16 + local.get $7 i64.const 4294967295 i64.and i64.const 1220703125 i64.mul - local.tee $16 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.tee $13 + local.tee $10 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4100,11 +4103,11 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $12 + local.tee $11 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $16 + local.get $7 local.get $0 i64.extend_i32_u i64.shl @@ -4112,46 +4115,46 @@ i64.shr_u i64.const 1 i64.and - local.get $13 + local.get $10 local.get $0 i64.extend_i32_u i64.shl - local.get $16 + local.get $7 i64.const 4294967295 i64.and - local.get $12 + local.get $11 i64.shr_u i64.or i64.add - local.set $16 - local.get $5 + local.set $7 + local.get $4 i32.const 13 i32.sub - local.set $5 + local.set $4 br $for-loop|7 end end - local.get $5 + local.get $4 call $~lib/math/ipow32 local.tee $0 i64.extend_i32_u - local.get $16 + local.get $7 i64.const 4294967295 i64.and i64.mul - local.set $13 + local.set $10 i64.const 32 local.get $0 i64.extend_i32_u - local.get $16 + local.get $7 i64.const 32 i64.shr_u i64.mul - local.get $13 + local.get $10 i64.const 32 i64.shr_u i64.add - local.tee $16 + local.tee $7 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4159,11 +4162,11 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $12 + local.tee $11 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $13 + local.get $10 local.get $0 i64.extend_i32_u i64.shl @@ -4171,14 +4174,14 @@ i64.shr_u i64.const 1 i64.and - local.get $16 + local.get $7 local.get $0 i64.extend_i32_u i64.shl - local.get $13 + local.get $10 i64.const 4294967295 i64.and - local.get $12 + local.get $11 i64.shr_u i64.or i64.add @@ -4188,16 +4191,16 @@ call $~lib/math/NativeMath.scalbn end end - local.set $11 + local.set $12 end - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $11 - local.get $9 + local.get $12 + local.get $14 f64.copysign return end - local.get $3 + local.get $5 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -7610,11 +7613,11 @@ (func $start:std/string (local $0 i32) (local $1 i32) - (local $2 f64) - (local $3 i32) + (local $2 i32) + (local $3 f64) (local $4 i32) (local $5 i32) - (local $6 i32) + (local $6 f32) (local $7 i32) (local $8 i32) (local $9 i32) @@ -7647,9 +7650,9 @@ (local $36 i32) (local $37 i32) (local $38 i32) - (local $39 i32) + (local $39 i64) (local $40 i32) - (local $41 f32) + (local $41 i32) (local $42 i32) (local $43 i32) (local $44 i32) @@ -7682,7 +7685,7 @@ (local $71 i32) (local $72 i32) (local $73 i32) - (local $74 i64) + (local $74 i32) (local $75 i32) (local $76 i32) (local $77 i32) @@ -8030,7 +8033,7 @@ global.set $~argumentsLength i32.const 0 call $~lib/string/String.fromCharCode@varargs - local.tee $42 + local.tee $7 i32.const 1296 call $~lib/string/String.__eq i32.eqz @@ -8046,7 +8049,7 @@ global.set $~argumentsLength i32.const 54 call $~lib/string/String.fromCharCode@varargs - local.tee $43 + local.tee $8 i32.const 1472 call $~lib/string/String.__eq i32.eqz @@ -8062,7 +8065,7 @@ global.set $~argumentsLength i32.const 65590 call $~lib/string/String.fromCharCode@varargs - local.tee $44 + local.tee $9 i32.const 1472 call $~lib/string/String.__eq i32.eqz @@ -8077,7 +8080,7 @@ i32.const 55296 i32.const 57088 call $~lib/string/String.fromCharCode - local.tee $45 + local.tee $10 i32.const 1504 call $~lib/string/String.__eq i32.eqz @@ -8091,7 +8094,7 @@ end i32.const 0 call $~lib/string/String.fromCodePoint - local.tee $46 + local.tee $11 i32.const 1296 call $~lib/string/String.__eq i32.eqz @@ -8105,7 +8108,7 @@ end i32.const 54 call $~lib/string/String.fromCodePoint - local.tee $47 + local.tee $12 i32.const 1472 call $~lib/string/String.__eq i32.eqz @@ -8119,7 +8122,7 @@ end i32.const 119558 call $~lib/string/String.fromCodePoint - local.tee $48 + local.tee $13 i32.const 1584 call $~lib/string/String.__eq i32.eqz @@ -8132,7 +8135,7 @@ unreachable end global.get $std/string/str - local.set $12 + local.set $5 i32.const 1616 if (result i32) i32.const 1616 @@ -8144,19 +8147,19 @@ drop block $__inlined_func$~lib/string/String#startsWith i32.const 0 - local.get $12 + local.get $5 call $~lib/string/String#get:length - local.tee $3 + local.tee $2 i32.const 0 - local.get $3 + local.get $2 i32.lt_s select - local.tee $9 + local.tee $4 i32.const 1616 call $~lib/string/String#get:length local.tee $0 i32.add - local.get $3 + local.get $2 i32.gt_s if i32.const 1616 @@ -8165,8 +8168,8 @@ local.set $0 br $__inlined_func$~lib/string/String#startsWith end - local.get $12 - local.get $9 + local.get $5 + local.get $4 i32.const 1616 local.get $0 call $~lib/util/string/compareImpl @@ -8186,10 +8189,10 @@ unreachable end global.get $std/string/str - local.set $9 + local.set $4 block $__inlined_func$~lib/string/String#endsWith i32.const 536870904 - local.get $9 + local.get $4 call $~lib/string/String#get:length local.tee $0 i32.const 536870904 @@ -8210,7 +8213,7 @@ local.set $0 br $__inlined_func$~lib/string/String#endsWith end - local.get $9 + local.get $4 local.get $0 i32.const 1680 local.get $1 @@ -8251,7 +8254,7 @@ i32.const 0 i32.const 1744 call $~lib/string/String#padStart - local.tee $49 + local.tee $14 global.get $std/string/str call $~lib/string/String.__eq i32.eqz @@ -8267,7 +8270,7 @@ i32.const 15 i32.const 1744 call $~lib/string/String#padStart - local.tee $50 + local.tee $15 global.get $std/string/str call $~lib/string/String.__eq i32.eqz @@ -8283,7 +8286,7 @@ i32.const 3 i32.const 1744 call $~lib/string/String#padStart - local.tee $51 + local.tee $16 i32.const 1776 call $~lib/string/String.__eq i32.eqz @@ -8299,7 +8302,7 @@ i32.const 10 i32.const 1280 call $~lib/string/String#padStart - local.tee $52 + local.tee $17 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -8315,7 +8318,7 @@ i32.const 100 i32.const 1280 call $~lib/string/String#padStart - local.tee $53 + local.tee $18 i32.const 1328 call $~lib/string/String.__eq i32.eqz @@ -8331,7 +8334,7 @@ i32.const 5 i32.const 1744 call $~lib/string/String#padStart - local.tee $54 + local.tee $19 i32.const 1840 call $~lib/string/String.__eq i32.eqz @@ -8347,7 +8350,7 @@ i32.const 6 i32.const 1872 call $~lib/string/String#padStart - local.tee $55 + local.tee $20 i32.const 1904 call $~lib/string/String.__eq i32.eqz @@ -8363,7 +8366,7 @@ i32.const 8 i32.const 1872 call $~lib/string/String#padStart - local.tee $56 + local.tee $21 i32.const 1936 call $~lib/string/String.__eq i32.eqz @@ -8379,7 +8382,7 @@ i32.const 0 i32.const 1744 call $~lib/string/String#padEnd - local.tee $57 + local.tee $22 global.get $std/string/str call $~lib/string/String.__eq i32.eqz @@ -8395,7 +8398,7 @@ i32.const 15 i32.const 1744 call $~lib/string/String#padEnd - local.tee $58 + local.tee $23 global.get $std/string/str call $~lib/string/String.__eq i32.eqz @@ -8411,7 +8414,7 @@ i32.const 3 i32.const 1744 call $~lib/string/String#padEnd - local.tee $59 + local.tee $24 i32.const 1776 call $~lib/string/String.__eq i32.eqz @@ -8427,7 +8430,7 @@ i32.const 10 i32.const 1280 call $~lib/string/String#padEnd - local.tee $60 + local.tee $25 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -8443,7 +8446,7 @@ i32.const 100 i32.const 1280 call $~lib/string/String#padEnd - local.tee $61 + local.tee $26 i32.const 1328 call $~lib/string/String.__eq i32.eqz @@ -8459,7 +8462,7 @@ i32.const 5 i32.const 1744 call $~lib/string/String#padEnd - local.tee $62 + local.tee $27 i32.const 1968 call $~lib/string/String.__eq i32.eqz @@ -8475,7 +8478,7 @@ i32.const 6 i32.const 1808 call $~lib/string/String#padEnd - local.tee $63 + local.tee $28 i32.const 2000 call $~lib/string/String.__eq i32.eqz @@ -8491,7 +8494,7 @@ i32.const 8 i32.const 1808 call $~lib/string/String#padEnd - local.tee $64 + local.tee $29 i32.const 2032 call $~lib/string/String.__eq i32.eqz @@ -8914,7 +8917,7 @@ end i32.const 1280 call $~lib/string/String#trimStart - local.tee $65 + local.tee $30 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -8928,7 +8931,7 @@ end i32.const 2288 call $~lib/string/String#trimStart - local.tee $66 + local.tee $31 i32.const 2288 call $~lib/string/String.__eq i32.eqz @@ -8942,7 +8945,7 @@ end i32.const 2320 call $~lib/string/String#trimStart - local.tee $67 + local.tee $32 i32.const 2368 call $~lib/string/String.__eq i32.eqz @@ -8956,7 +8959,7 @@ end i32.const 1280 call $~lib/string/String#trimEnd - local.tee $68 + local.tee $33 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -8970,7 +8973,7 @@ end i32.const 2288 call $~lib/string/String#trimEnd - local.tee $69 + local.tee $34 i32.const 2288 call $~lib/string/String.__eq i32.eqz @@ -8984,7 +8987,7 @@ end i32.const 2320 call $~lib/string/String#trimEnd - local.tee $70 + local.tee $35 i32.const 2400 call $~lib/string/String.__eq i32.eqz @@ -8998,7 +9001,7 @@ end i32.const 1280 call $~lib/string/String#trim - local.tee $71 + local.tee $36 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -9012,7 +9015,7 @@ end i32.const 2288 call $~lib/string/String#trim - local.tee $72 + local.tee $37 i32.const 2288 call $~lib/string/String.__eq i32.eqz @@ -9026,7 +9029,7 @@ end i32.const 2320 call $~lib/string/String#trim - local.tee $73 + local.tee $38 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -9288,13 +9291,13 @@ i32.const 3008 i32.const 0 call $~lib/string/parseInt - local.tee $2 + local.tee $3 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.eq i32.and i32.eqz @@ -9428,8 +9431,8 @@ i32.const 1280 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9442,8 +9445,8 @@ i32.const 3440 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9456,8 +9459,8 @@ i32.const 3472 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9470,8 +9473,8 @@ i32.const 1872 i32.const 37 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9484,8 +9487,8 @@ i32.const 3504 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9498,8 +9501,8 @@ i32.const 3536 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9513,11 +9516,11 @@ i32.const 0 call $~lib/util/string/strtol f32.demote_f64 - local.set $41 + local.set $6 i32.const 3536 call $~lib/rt/pure/__release - local.get $41 - local.get $41 + local.get $6 + local.get $6 f32.eq if i32.const 0 @@ -9530,8 +9533,8 @@ i32.const 3536 i32.const 0 call $~lib/string/parseInt - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -9799,8 +9802,8 @@ end i32.const 1280 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10448,8 +10451,8 @@ end i32.const 3472 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10461,8 +10464,8 @@ end i32.const 3440 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10474,8 +10477,8 @@ end i32.const 6144 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10487,8 +10490,8 @@ end i32.const 6176 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10500,8 +10503,8 @@ end i32.const 6208 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10513,8 +10516,8 @@ end i32.const 6240 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10526,8 +10529,8 @@ end i32.const 6272 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10539,8 +10542,8 @@ end i32.const 6304 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10552,8 +10555,8 @@ end i32.const 6336 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10565,8 +10568,8 @@ end i32.const 6368 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10578,8 +10581,8 @@ end i32.const 6400 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10591,8 +10594,8 @@ end i32.const 6432 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10604,8 +10607,8 @@ end i32.const 6464 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10617,8 +10620,8 @@ end i32.const 6496 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10630,8 +10633,8 @@ end i32.const 6528 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10643,8 +10646,8 @@ end i32.const 6560 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10956,8 +10959,8 @@ end i32.const 7696 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10969,8 +10972,8 @@ end i32.const 7728 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -10982,8 +10985,8 @@ end i32.const 7760 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -11032,16 +11035,16 @@ i32.const 8368 i32.const 8528 call $~lib/string/String.__concat - local.tee $75 + local.tee $40 i32.const 8688 call $~lib/string/String.__concat - local.tee $76 + local.tee $41 i32.const 8848 call $~lib/string/String.__concat - local.tee $77 + local.tee $42 i32.const 9008 call $~lib/string/String.__concat - local.tee $78 + local.tee $43 call $~lib/string/parseFloat f64.const 1797693134862315708145274e284 f64.ne @@ -11343,8 +11346,8 @@ end i32.const 11856 call $~lib/string/parseFloat - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.eq if i32.const 0 @@ -11740,13 +11743,13 @@ end i32.const 65377 call $~lib/string/String.fromCodePoint - local.tee $12 + local.tee $5 i32.const 55296 call $~lib/string/String.fromCodePoint - local.tee $3 + local.tee $2 i32.const 56322 call $~lib/string/String.fromCodePoint - local.tee $9 + local.tee $4 call $~lib/string/String.__concat local.tee $1 call $~lib/rt/pure/__retain @@ -11761,11 +11764,11 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $4 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -11786,7 +11789,7 @@ i32.const 1280 i32.const 100 call $~lib/string/String#repeat - local.tee $79 + local.tee $44 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -11801,7 +11804,7 @@ i32.const 1328 i32.const 0 call $~lib/string/String#repeat - local.tee $80 + local.tee $45 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -11816,7 +11819,7 @@ i32.const 1328 i32.const 1 call $~lib/string/String#repeat - local.tee $81 + local.tee $46 i32.const 1328 call $~lib/string/String.__eq i32.eqz @@ -11831,7 +11834,7 @@ i32.const 1328 i32.const 2 call $~lib/string/String#repeat - local.tee $82 + local.tee $47 i32.const 12368 call $~lib/string/String.__eq i32.eqz @@ -11846,7 +11849,7 @@ i32.const 1328 i32.const 3 call $~lib/string/String#repeat - local.tee $83 + local.tee $48 i32.const 12448 call $~lib/string/String.__eq i32.eqz @@ -11861,7 +11864,7 @@ i32.const 11952 i32.const 4 call $~lib/string/String#repeat - local.tee $84 + local.tee $49 i32.const 12480 call $~lib/string/String.__eq i32.eqz @@ -11876,7 +11879,7 @@ i32.const 1328 i32.const 5 call $~lib/string/String#repeat - local.tee $85 + local.tee $50 i32.const 12512 call $~lib/string/String.__eq i32.eqz @@ -11891,7 +11894,7 @@ i32.const 1328 i32.const 6 call $~lib/string/String#repeat - local.tee $86 + local.tee $51 i32.const 12544 call $~lib/string/String.__eq i32.eqz @@ -11906,7 +11909,7 @@ i32.const 1328 i32.const 7 call $~lib/string/String#repeat - local.tee $87 + local.tee $52 i32.const 12576 call $~lib/string/String.__eq i32.eqz @@ -11922,7 +11925,7 @@ i32.const 1280 i32.const 1280 call $~lib/string/String#replace - local.tee $88 + local.tee $53 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -11938,7 +11941,7 @@ i32.const 1280 i32.const 3472 call $~lib/string/String#replace - local.tee $89 + local.tee $54 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -11954,7 +11957,7 @@ i32.const 3472 i32.const 1280 call $~lib/string/String#replace - local.tee $90 + local.tee $55 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -11970,7 +11973,7 @@ i32.const 1280 i32.const 1280 call $~lib/string/String#replace - local.tee $91 + local.tee $56 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -11986,7 +11989,7 @@ i32.const 3440 i32.const 3472 call $~lib/string/String#replace - local.tee $92 + local.tee $57 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12002,7 +12005,7 @@ i32.const 1808 i32.const 3472 call $~lib/string/String#replace - local.tee $93 + local.tee $58 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -12018,7 +12021,7 @@ i32.const 2256 i32.const 3472 call $~lib/string/String#replace - local.tee $94 + local.tee $59 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12034,7 +12037,7 @@ i32.const 11952 i32.const 11952 call $~lib/string/String#replace - local.tee $95 + local.tee $60 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12050,7 +12053,7 @@ i32.const 3440 i32.const 3472 call $~lib/string/String#replace - local.tee $96 + local.tee $61 i32.const 12640 call $~lib/string/String.__eq i32.eqz @@ -12066,7 +12069,7 @@ i32.const 1280 i32.const 3472 call $~lib/string/String#replace - local.tee $97 + local.tee $62 i32.const 12672 call $~lib/string/String.__eq i32.eqz @@ -12082,7 +12085,7 @@ i32.const 12736 i32.const 3472 call $~lib/string/String#replace - local.tee $98 + local.tee $63 i32.const 12672 call $~lib/string/String.__eq i32.eqz @@ -12098,7 +12101,7 @@ i32.const 12768 i32.const 12800 call $~lib/string/String#replace - local.tee $99 + local.tee $64 i32.const 12832 call $~lib/string/String.__eq i32.eqz @@ -12114,7 +12117,7 @@ i32.const 12768 i32.const 1280 call $~lib/string/String#replace - local.tee $100 + local.tee $65 i32.const 11952 call $~lib/string/String.__eq i32.eqz @@ -12130,7 +12133,7 @@ i32.const 1280 i32.const 1808 call $~lib/string/String#replaceAll - local.tee $101 + local.tee $66 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12146,7 +12149,7 @@ i32.const 3440 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $102 + local.tee $67 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12162,7 +12165,7 @@ i32.const 1808 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $103 + local.tee $68 i32.const 12800 call $~lib/string/String.__eq i32.eqz @@ -12178,7 +12181,7 @@ i32.const 1808 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $104 + local.tee $69 i32.const 12912 call $~lib/string/String.__eq i32.eqz @@ -12194,7 +12197,7 @@ i32.const 11952 i32.const 11952 call $~lib/string/String#replaceAll - local.tee $105 + local.tee $70 i32.const 2000 call $~lib/string/String.__eq i32.eqz @@ -12210,7 +12213,7 @@ i32.const 1328 i32.const 12912 call $~lib/string/String#replaceAll - local.tee $106 + local.tee $71 i32.const 12976 call $~lib/string/String.__eq i32.eqz @@ -12226,7 +12229,7 @@ i32.const 11952 i32.const 12800 call $~lib/string/String#replaceAll - local.tee $107 + local.tee $72 i32.const 13024 call $~lib/string/String.__eq i32.eqz @@ -12242,7 +12245,7 @@ i32.const 13088 i32.const 12800 call $~lib/string/String#replaceAll - local.tee $108 + local.tee $73 i32.const 13120 call $~lib/string/String.__eq i32.eqz @@ -12258,7 +12261,7 @@ i32.const 2256 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $109 + local.tee $74 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12274,7 +12277,7 @@ i32.const 13152 i32.const 12800 call $~lib/string/String#replaceAll - local.tee $110 + local.tee $75 i32.const 2256 call $~lib/string/String.__eq i32.eqz @@ -12290,7 +12293,7 @@ i32.const 13184 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $111 + local.tee $76 i32.const 13216 call $~lib/string/String.__eq i32.eqz @@ -12306,7 +12309,7 @@ i32.const 11952 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $112 + local.tee $77 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -12322,7 +12325,7 @@ i32.const 3440 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $113 + local.tee $78 i32.const 13248 call $~lib/string/String.__eq i32.eqz @@ -12338,7 +12341,7 @@ i32.const 1280 i32.const 1280 call $~lib/string/String#replaceAll - local.tee $114 + local.tee $79 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12354,7 +12357,7 @@ i32.const 1280 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $115 + local.tee $80 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -12370,7 +12373,7 @@ i32.const 3472 i32.const 1280 call $~lib/string/String#replaceAll - local.tee $116 + local.tee $81 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12386,7 +12389,7 @@ i32.const 1280 i32.const 1280 call $~lib/string/String#replaceAll - local.tee $117 + local.tee $82 i32.const 3472 call $~lib/string/String.__eq i32.eqz @@ -12402,7 +12405,7 @@ i32.const 1808 i32.const 3440 call $~lib/string/String#replaceAll - local.tee $118 + local.tee $83 i32.const 3440 call $~lib/string/String.__eq i32.eqz @@ -12418,7 +12421,7 @@ i32.const 2224 i32.const 3440 call $~lib/string/String#replaceAll - local.tee $119 + local.tee $84 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12434,7 +12437,7 @@ i32.const 1280 i32.const 3472 call $~lib/string/String#replaceAll - local.tee $120 + local.tee $85 i32.const 13280 call $~lib/string/String.__eq i32.eqz @@ -12450,7 +12453,7 @@ i32.const 1280 i32.const 1280 call $~lib/string/String#replaceAll - local.tee $121 + local.tee $86 i32.const 1808 call $~lib/string/String.__eq i32.eqz @@ -12470,7 +12473,7 @@ i32.const 0 i32.const 2147483647 call $~lib/string/String#slice - local.tee $122 + local.tee $87 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12486,7 +12489,7 @@ i32.const -1 i32.const 2147483647 call $~lib/string/String#slice - local.tee $123 + local.tee $88 i32.const 13360 call $~lib/string/String.__eq i32.eqz @@ -12502,7 +12505,7 @@ i32.const -5 i32.const 2147483647 call $~lib/string/String#slice - local.tee $124 + local.tee $89 i32.const 13392 call $~lib/string/String.__eq i32.eqz @@ -12518,7 +12521,7 @@ i32.const 2 i32.const 7 call $~lib/string/String#slice - local.tee $125 + local.tee $90 i32.const 13424 call $~lib/string/String.__eq i32.eqz @@ -12534,7 +12537,7 @@ i32.const -11 i32.const -6 call $~lib/string/String#slice - local.tee $126 + local.tee $91 i32.const 13456 call $~lib/string/String.__eq i32.eqz @@ -12550,7 +12553,7 @@ i32.const 4 i32.const 3 call $~lib/string/String#slice - local.tee $127 + local.tee $92 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12566,7 +12569,7 @@ i32.const 0 i32.const -1 call $~lib/string/String#slice - local.tee $128 + local.tee $93 i32.const 13488 call $~lib/string/String.__eq i32.eqz @@ -12582,7 +12585,7 @@ i32.const 0 i32.const 2147483647 call $~lib/string/String#substr - local.tee $129 + local.tee $94 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12598,7 +12601,7 @@ i32.const -1 i32.const 2147483647 call $~lib/string/String#substr - local.tee $130 + local.tee $95 i32.const 13360 call $~lib/string/String.__eq i32.eqz @@ -12614,7 +12617,7 @@ i32.const -5 i32.const 2147483647 call $~lib/string/String#substr - local.tee $131 + local.tee $96 i32.const 13392 call $~lib/string/String.__eq i32.eqz @@ -12630,7 +12633,7 @@ i32.const 2 i32.const 7 call $~lib/string/String#substr - local.tee $132 + local.tee $97 i32.const 13536 call $~lib/string/String.__eq i32.eqz @@ -12646,7 +12649,7 @@ i32.const -11 i32.const -6 call $~lib/string/String#substr - local.tee $133 + local.tee $98 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12662,7 +12665,7 @@ i32.const 4 i32.const 3 call $~lib/string/String#substr - local.tee $134 + local.tee $99 i32.const 13568 call $~lib/string/String.__eq i32.eqz @@ -12678,7 +12681,7 @@ i32.const 0 i32.const -1 call $~lib/string/String#substr - local.tee $135 + local.tee $100 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12694,7 +12697,7 @@ i32.const 0 i32.const 100 call $~lib/string/String#substr - local.tee $136 + local.tee $101 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12710,7 +12713,7 @@ i32.const 4 i32.const 4 call $~lib/string/String#substr - local.tee $137 + local.tee $102 i32.const 13600 call $~lib/string/String.__eq i32.eqz @@ -12726,7 +12729,7 @@ i32.const 4 i32.const -3 call $~lib/string/String#substr - local.tee $138 + local.tee $103 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12742,7 +12745,7 @@ i32.const 0 i32.const 2147483647 call $~lib/string/String#substring - local.tee $139 + local.tee $104 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12758,7 +12761,7 @@ i32.const -1 i32.const 2147483647 call $~lib/string/String#substring - local.tee $140 + local.tee $105 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12774,7 +12777,7 @@ i32.const -5 i32.const 2147483647 call $~lib/string/String#substring - local.tee $141 + local.tee $106 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12790,7 +12793,7 @@ i32.const 2 i32.const 7 call $~lib/string/String#substring - local.tee $142 + local.tee $107 i32.const 13424 call $~lib/string/String.__eq i32.eqz @@ -12806,7 +12809,7 @@ i32.const -11 i32.const -6 call $~lib/string/String#substring - local.tee $143 + local.tee $108 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12822,7 +12825,7 @@ i32.const 4 i32.const 3 call $~lib/string/String#substring - local.tee $144 + local.tee $109 i32.const 13632 call $~lib/string/String.__eq i32.eqz @@ -12838,7 +12841,7 @@ i32.const 0 i32.const -1 call $~lib/string/String#substring - local.tee $145 + local.tee $110 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12854,7 +12857,7 @@ i32.const 0 i32.const 100 call $~lib/string/String#substring - local.tee $146 + local.tee $111 i32.const 13312 call $~lib/string/String.__eq i32.eqz @@ -12870,7 +12873,7 @@ i32.const 4 i32.const 4 call $~lib/string/String#substring - local.tee $147 + local.tee $112 i32.const 1280 call $~lib/string/String.__eq i32.eqz @@ -12886,7 +12889,7 @@ i32.const 4 i32.const -3 call $~lib/string/String#substring - local.tee $148 + local.tee $113 i32.const 2256 call $~lib/string/String.__eq i32.eqz @@ -12902,22 +12905,25 @@ i32.const 0 i32.const 2147483647 call $~lib/string/String#split - local.tee $1 + local.tee $4 i32.load offset=12 i32.const 1 i32.eq if - local.get $1 + local.get $4 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 1280 call $~lib/string/String.__eq - local.set $10 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $10 + local.get $2 i32.eqz if i32.const 0 @@ -12931,10 +12937,10 @@ i32.const 1280 i32.const 2147483647 call $~lib/string/String#split - local.set $0 - local.get $1 + local.set $1 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $1 i32.load offset=12 if i32.const 0 @@ -12948,25 +12954,27 @@ i32.const 2064 i32.const 2147483647 call $~lib/string/String#split - local.set $10 - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.get $10 + local.tee $1 i32.load offset=12 i32.const 1 i32.eq if - local.get $10 + 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 $13 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $13 + local.get $2 i32.eqz if i32.const 0 @@ -12980,10 +12988,9 @@ i32.const 6272 i32.const 2147483647 call $~lib/string/String#split - local.set $1 - local.get $10 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.load offset=12 i32.const 1 i32.eq @@ -12994,11 +13001,14 @@ local.tee $0 i32.const 13888 call $~lib/string/String.__eq - local.set $6 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $6 + local.get $2 i32.eqz if i32.const 0 @@ -13012,49 +13022,57 @@ i32.const 2064 i32.const 2147483647 call $~lib/string/String#split - local.set $6 local.get $1 call $~lib/rt/pure/__release - local.get $6 + local.tee $1 i32.load offset=12 i32.const 3 i32.eq if - local.get $6 + 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 $14 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $14 + local.get $2 if - local.get $6 + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $15 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $15 + local.get $2 if - local.get $6 + local.get $1 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $16 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $16 + local.get $2 i32.eqz if i32.const 0 @@ -13068,10 +13086,9 @@ i32.const 13952 i32.const 2147483647 call $~lib/string/String#split - local.set $1 - local.get $6 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.load offset=12 i32.const 3 i32.eq @@ -13082,11 +13099,14 @@ local.tee $0 i32.const 1328 call $~lib/string/String.__eq - local.set $17 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $17 + local.get $2 if local.get $1 i32.const 1 @@ -13094,11 +13114,14 @@ local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $18 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $18 + local.get $2 if local.get $1 i32.const 2 @@ -13106,11 +13129,14 @@ local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $4 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $4 + local.get $2 i32.eqz if i32.const 0 @@ -13124,61 +13150,72 @@ 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 + local.tee $1 i32.load offset=12 i32.const 4 i32.eq if - local.get $4 + 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 $19 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $19 + local.get $2 if - local.get $4 + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $20 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $20 + local.get $2 if - local.get $4 + 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 $21 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $21 + local.get $2 if - local.get $4 + local.get $1 i32.const 3 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $22 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $22 + local.get $2 i32.eqz if i32.const 0 @@ -13192,10 +13229,9 @@ i32.const 2064 i32.const 2147483647 call $~lib/string/String#split - local.set $1 - local.get $4 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.load offset=12 i32.const 4 i32.eq @@ -13206,11 +13242,14 @@ local.tee $0 i32.const 1280 call $~lib/string/String.__eq - local.set $23 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $23 + local.get $2 if local.get $1 i32.const 1 @@ -13218,11 +13257,14 @@ local.tee $0 i32.const 1328 call $~lib/string/String.__eq - local.set $24 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $24 + local.get $2 if local.get $1 i32.const 2 @@ -13230,11 +13272,14 @@ local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $25 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $25 + local.get $2 if local.get $1 i32.const 3 @@ -13242,11 +13287,14 @@ local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $5 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $5 + local.get $2 i32.eqz if i32.const 0 @@ -13260,61 +13308,72 @@ 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 + local.tee $1 i32.load offset=12 i32.const 4 i32.eq if - local.get $5 + 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 $26 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $26 + local.get $2 if - local.get $5 + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $27 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $27 + local.get $2 if - local.get $5 + local.get $1 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $28 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $28 + local.get $2 if - local.get $5 + 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 $29 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $29 + local.get $2 i32.eqz if i32.const 0 @@ -13328,49 +13387,58 @@ i32.const 1280 i32.const 2147483647 call $~lib/string/String#split - local.set $1 - local.get $5 - call $~lib/rt/pure/__release + local.set $0 local.get $1 + call $~lib/rt/pure/__release + local.get $0 i32.load offset=12 i32.const 3 i32.eq if - local.get $1 + local.get $0 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 1328 call $~lib/string/String.__eq - local.set $30 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $30 + local.get $2 if - local.get $1 + local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 11920 call $~lib/string/String.__eq - local.set $31 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $31 + local.get $2 if - local.get $1 + local.get $0 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 12768 call $~lib/string/String.__eq - local.set $11 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $11 + local.get $2 i32.eqz if i32.const 0 @@ -13384,10 +13452,10 @@ i32.const 1280 i32.const 0 call $~lib/string/String#split - local.set $0 - local.get $1 - call $~lib/rt/pure/__release + local.set $1 local.get $0 + call $~lib/rt/pure/__release + local.get $1 i32.load offset=12 if i32.const 0 @@ -13401,25 +13469,27 @@ i32.const 1280 i32.const 1 call $~lib/string/String#split - local.set $11 - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.get $11 + local.tee $1 i32.load offset=12 i32.const 1 i32.eq if - local.get $11 + 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 $32 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $32 + local.get $2 i32.eqz if i32.const 0 @@ -13433,10 +13503,9 @@ i32.const 2064 i32.const 1 call $~lib/string/String#split - local.set $1 - local.get $11 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.load offset=12 i32.const 1 i32.eq @@ -13447,11 +13516,14 @@ local.tee $0 i32.const 1328 call $~lib/string/String.__eq - local.set $7 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $7 + local.get $2 i32.eqz if i32.const 0 @@ -13465,49 +13537,57 @@ i32.const 1280 i32.const 4 call $~lib/string/String#split - local.set $7 local.get $1 call $~lib/rt/pure/__release - local.get $7 + local.tee $1 i32.load offset=12 i32.const 3 i32.eq if - local.get $7 + 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 $33 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $33 + local.get $2 if - local.get $7 + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $34 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $34 + local.get $2 if - local.get $7 + local.get $1 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $8 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $8 + local.get $2 i32.eqz if i32.const 0 @@ -13521,49 +13601,57 @@ i32.const 1280 i32.const -1 call $~lib/string/String#split - local.set $8 - local.get $7 + local.get $1 call $~lib/rt/pure/__release - local.get $8 + local.tee $1 i32.load offset=12 i32.const 3 i32.eq if - local.get $8 + 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 $35 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $35 + local.get $2 if - local.get $8 + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 11920 call $~lib/string/String.__eq - local.set $36 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $36 + local.get $2 if - local.get $8 + local.get $1 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $0 i32.const 12768 call $~lib/string/String.__eq - local.set $37 + local.set $2 local.get $0 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $37 + local.get $2 i32.eqz if i32.const 0 @@ -13577,49 +13665,58 @@ i32.const 2064 i32.const -1 call $~lib/string/String#split - local.set $1 - local.get $8 - call $~lib/rt/pure/__release + local.set $0 local.get $1 + call $~lib/rt/pure/__release + local.get $0 i32.load offset=12 i32.const 3 i32.eq if - local.get $1 + local.get $0 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 1328 call $~lib/string/String.__eq - local.set $38 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $38 + local.get $2 if - local.get $1 + local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 11920 call $~lib/string/String.__eq - local.set $39 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $39 + local.get $2 if - local.get $1 + local.get $0 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 + local.tee $1 i32.const 12768 call $~lib/string/String.__eq - local.set $40 - local.get $0 + local.set $2 + local.get $1 call $~lib/rt/pure/__release + else + i32.const 0 + local.set $2 end - local.get $40 + local.get $2 i32.eqz if i32.const 0 @@ -13629,12 +13726,12 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/pure/__release i32.const 0 i32.const 10 call $~lib/util/number/itoa32 - local.tee $149 + local.tee $114 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -13649,7 +13746,7 @@ i32.const 1 i32.const 10 call $~lib/util/number/itoa32 - local.tee $150 + local.tee $115 i32.const 2496 call $~lib/string/String.__eq i32.eqz @@ -13664,7 +13761,7 @@ i32.const 8 i32.const 10 call $~lib/util/number/itoa32 - local.tee $151 + local.tee $116 i32.const 14368 call $~lib/string/String.__eq i32.eqz @@ -13679,7 +13776,7 @@ i32.const 12 i32.const 10 call $~lib/util/number/itoa32 - local.tee $152 + local.tee $117 i32.const 14400 call $~lib/string/String.__eq i32.eqz @@ -13694,7 +13791,7 @@ i32.const 123 i32.const 10 call $~lib/util/number/itoa32 - local.tee $153 + local.tee $118 i32.const 1872 call $~lib/string/String.__eq i32.eqz @@ -13709,7 +13806,7 @@ i32.const -1000 i32.const 10 call $~lib/util/number/itoa32 - local.tee $154 + local.tee $119 i32.const 14432 call $~lib/string/String.__eq i32.eqz @@ -13724,7 +13821,7 @@ i32.const 1234 i32.const 10 call $~lib/util/number/itoa32 - local.tee $155 + local.tee $120 i32.const 14464 call $~lib/string/String.__eq i32.eqz @@ -13739,7 +13836,7 @@ i32.const 12345 i32.const 10 call $~lib/util/number/itoa32 - local.tee $156 + local.tee $121 i32.const 14496 call $~lib/string/String.__eq i32.eqz @@ -13754,7 +13851,7 @@ i32.const 123456 i32.const 10 call $~lib/util/number/itoa32 - local.tee $157 + local.tee $122 i32.const 14528 call $~lib/string/String.__eq i32.eqz @@ -13769,7 +13866,7 @@ i32.const 1111111 i32.const 10 call $~lib/util/number/itoa32 - local.tee $158 + local.tee $123 i32.const 14560 call $~lib/string/String.__eq i32.eqz @@ -13784,7 +13881,7 @@ i32.const 1234567 i32.const 10 call $~lib/util/number/itoa32 - local.tee $159 + local.tee $124 i32.const 14592 call $~lib/string/String.__eq i32.eqz @@ -13799,7 +13896,7 @@ i32.const 12345678 i32.const 10 call $~lib/util/number/itoa32 - local.tee $160 + local.tee $125 i32.const 14624 call $~lib/string/String.__eq i32.eqz @@ -13814,7 +13911,7 @@ i32.const 123456789 i32.const 10 call $~lib/util/number/itoa32 - local.tee $161 + local.tee $126 i32.const 14656 call $~lib/string/String.__eq i32.eqz @@ -13829,7 +13926,7 @@ i32.const 2147483646 i32.const 10 call $~lib/util/number/itoa32 - local.tee $162 + local.tee $127 i32.const 14704 call $~lib/string/String.__eq i32.eqz @@ -13844,7 +13941,7 @@ i32.const 2147483647 i32.const 10 call $~lib/util/number/itoa32 - local.tee $163 + local.tee $128 i32.const 14752 call $~lib/string/String.__eq i32.eqz @@ -13859,7 +13956,7 @@ i32.const -2147483648 i32.const 10 call $~lib/util/number/itoa32 - local.tee $164 + local.tee $129 i32.const 14800 call $~lib/string/String.__eq i32.eqz @@ -13874,7 +13971,7 @@ i32.const -1 i32.const 10 call $~lib/util/number/itoa32 - local.tee $165 + local.tee $130 i32.const 14848 call $~lib/string/String.__eq i32.eqz @@ -13889,7 +13986,7 @@ i32.const 0 i32.const 10 call $~lib/util/number/utoa32 - local.tee $166 + local.tee $131 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -13904,7 +14001,7 @@ i32.const 1000 i32.const 10 call $~lib/util/number/utoa32 - local.tee $167 + local.tee $132 i32.const 14880 call $~lib/string/String.__eq i32.eqz @@ -13919,7 +14016,7 @@ i32.const 2147483647 i32.const 10 call $~lib/util/number/utoa32 - local.tee $168 + local.tee $133 i32.const 14752 call $~lib/string/String.__eq i32.eqz @@ -13934,7 +14031,7 @@ i32.const -2147483648 i32.const 10 call $~lib/util/number/utoa32 - local.tee $169 + local.tee $134 i32.const 14912 call $~lib/string/String.__eq i32.eqz @@ -13949,7 +14046,7 @@ i32.const -1 i32.const 10 call $~lib/util/number/utoa32 - local.tee $170 + local.tee $135 i32.const 14960 call $~lib/string/String.__eq i32.eqz @@ -13964,7 +14061,7 @@ i32.const 0 i32.const 16 call $~lib/util/number/utoa32 - local.tee $171 + local.tee $136 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -13979,7 +14076,7 @@ i32.const 1 i32.const 16 call $~lib/util/number/utoa32 - local.tee $172 + local.tee $137 i32.const 2496 call $~lib/string/String.__eq i32.eqz @@ -13994,7 +14091,7 @@ i32.const 8 i32.const 16 call $~lib/util/number/utoa32 - local.tee $173 + local.tee $138 i32.const 14368 call $~lib/string/String.__eq i32.eqz @@ -14009,7 +14106,7 @@ i32.const 12 i32.const 16 call $~lib/util/number/utoa32 - local.tee $174 + local.tee $139 i32.const 12768 call $~lib/string/String.__eq i32.eqz @@ -14024,7 +14121,7 @@ i32.const 123 i32.const 16 call $~lib/util/number/utoa32 - local.tee $175 + local.tee $140 i32.const 15008 call $~lib/string/String.__eq i32.eqz @@ -14039,7 +14136,7 @@ i32.const 1234 i32.const 16 call $~lib/util/number/utoa32 - local.tee $176 + local.tee $141 i32.const 15040 call $~lib/string/String.__eq i32.eqz @@ -14054,7 +14151,7 @@ i32.const 12345 i32.const 16 call $~lib/util/number/utoa32 - local.tee $177 + local.tee $142 i32.const 15072 call $~lib/string/String.__eq i32.eqz @@ -14069,7 +14166,7 @@ i32.const 123456 i32.const 16 call $~lib/util/number/utoa32 - local.tee $178 + local.tee $143 i32.const 15104 call $~lib/string/String.__eq i32.eqz @@ -14084,7 +14181,7 @@ i32.const 1111111 i32.const 16 call $~lib/util/number/utoa32 - local.tee $179 + local.tee $144 i32.const 15136 call $~lib/string/String.__eq i32.eqz @@ -14099,7 +14196,7 @@ i32.const 1234567 i32.const 16 call $~lib/util/number/utoa32 - local.tee $180 + local.tee $145 i32.const 15168 call $~lib/string/String.__eq i32.eqz @@ -14114,7 +14211,7 @@ i32.const 12345678 i32.const 16 call $~lib/util/number/utoa32 - local.tee $181 + local.tee $146 i32.const 15200 call $~lib/string/String.__eq i32.eqz @@ -14129,7 +14226,7 @@ i32.const 123456789 i32.const 16 call $~lib/util/number/utoa32 - local.tee $182 + local.tee $147 i32.const 15232 call $~lib/string/String.__eq i32.eqz @@ -14144,7 +14241,7 @@ i32.const 2147483646 i32.const 16 call $~lib/util/number/utoa32 - local.tee $183 + local.tee $148 i32.const 15264 call $~lib/string/String.__eq i32.eqz @@ -14159,7 +14256,7 @@ i32.const 2147483647 i32.const 16 call $~lib/util/number/utoa32 - local.tee $184 + local.tee $149 i32.const 15296 call $~lib/string/String.__eq i32.eqz @@ -14174,7 +14271,7 @@ i32.const -2147483648 i32.const 16 call $~lib/util/number/utoa32 - local.tee $185 + local.tee $150 i32.const 15328 call $~lib/string/String.__eq i32.eqz @@ -14189,7 +14286,7 @@ i32.const -1 i32.const 16 call $~lib/util/number/utoa32 - local.tee $186 + local.tee $151 i32.const 15360 call $~lib/string/String.__eq i32.eqz @@ -14204,7 +14301,7 @@ i32.const 0 i32.const 16 call $~lib/util/number/itoa32 - local.tee $187 + local.tee $152 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -14219,7 +14316,7 @@ i32.const -4096 i32.const 16 call $~lib/util/number/itoa32 - local.tee $188 + local.tee $153 i32.const 14432 call $~lib/string/String.__eq i32.eqz @@ -14234,7 +14331,7 @@ i32.const 2147483647 i32.const 16 call $~lib/util/number/itoa32 - local.tee $189 + local.tee $154 i32.const 15296 call $~lib/string/String.__eq i32.eqz @@ -14249,7 +14346,7 @@ i32.const -2147483647 i32.const 16 call $~lib/util/number/itoa32 - local.tee $190 + local.tee $155 i32.const 15392 call $~lib/string/String.__eq i32.eqz @@ -14264,7 +14361,7 @@ i32.const -268435455 i32.const 16 call $~lib/util/number/itoa32 - local.tee $191 + local.tee $156 i32.const 15440 call $~lib/string/String.__eq i32.eqz @@ -14279,7 +14376,7 @@ i32.const -2147483648 i32.const 16 call $~lib/util/number/itoa32 - local.tee $192 + local.tee $157 i32.const 15472 call $~lib/string/String.__eq i32.eqz @@ -14294,7 +14391,7 @@ i32.const -2147483648 i32.const 16 call $~lib/util/number/itoa32 - local.tee $193 + local.tee $158 i32.const 15472 call $~lib/string/String.__eq i32.eqz @@ -14309,7 +14406,7 @@ i32.const 0 i32.const 2 call $~lib/util/number/utoa32 - local.tee $194 + local.tee $159 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -14324,7 +14421,7 @@ i32.const 1 i32.const 2 call $~lib/util/number/utoa32 - local.tee $195 + local.tee $160 i32.const 2496 call $~lib/string/String.__eq i32.eqz @@ -14339,7 +14436,7 @@ i32.const 3 i32.const 2 call $~lib/util/number/utoa32 - local.tee $196 + local.tee $161 i32.const 15520 call $~lib/string/String.__eq i32.eqz @@ -14354,7 +14451,7 @@ i32.const 7 i32.const 2 call $~lib/util/number/utoa32 - local.tee $197 + local.tee $162 i32.const 15552 call $~lib/string/String.__eq i32.eqz @@ -14369,7 +14466,7 @@ i32.const 14 i32.const 2 call $~lib/util/number/utoa32 - local.tee $198 + local.tee $163 i32.const 15584 call $~lib/string/String.__eq i32.eqz @@ -14384,7 +14481,7 @@ i32.const 29 i32.const 2 call $~lib/util/number/utoa32 - local.tee $199 + local.tee $164 i32.const 15616 call $~lib/string/String.__eq i32.eqz @@ -14399,7 +14496,7 @@ i32.const 59 i32.const 2 call $~lib/util/number/utoa32 - local.tee $200 + local.tee $165 i32.const 15648 call $~lib/string/String.__eq i32.eqz @@ -14414,7 +14511,7 @@ i32.const 4095 i32.const 2 call $~lib/util/number/utoa32 - local.tee $201 + local.tee $166 i32.const 15680 call $~lib/string/String.__eq i32.eqz @@ -14429,7 +14526,7 @@ i32.const 33554431 i32.const 2 call $~lib/util/number/utoa32 - local.tee $202 + local.tee $167 i32.const 15728 call $~lib/string/String.__eq i32.eqz @@ -14444,7 +14541,7 @@ i32.const -12 i32.const 2 call $~lib/util/number/utoa32 - local.tee $203 + local.tee $168 i32.const 15808 call $~lib/string/String.__eq i32.eqz @@ -14459,7 +14556,7 @@ i32.const -4 i32.const 2 call $~lib/util/number/utoa32 - local.tee $204 + local.tee $169 i32.const 15888 call $~lib/string/String.__eq i32.eqz @@ -14474,7 +14571,7 @@ i32.const -2 i32.const 2 call $~lib/util/number/utoa32 - local.tee $205 + local.tee $170 i32.const 15968 call $~lib/string/String.__eq i32.eqz @@ -14489,7 +14586,7 @@ i32.const -1 i32.const 2 call $~lib/util/number/utoa32 - local.tee $206 + local.tee $171 i32.const 16048 call $~lib/string/String.__eq i32.eqz @@ -14504,7 +14601,7 @@ i32.const -2047 i32.const 2 call $~lib/util/number/itoa32 - local.tee $207 + local.tee $172 i32.const 16128 call $~lib/string/String.__eq i32.eqz @@ -14519,7 +14616,7 @@ i32.const -1 i32.const 3 call $~lib/util/number/utoa32 - local.tee $208 + local.tee $173 i32.const 16176 call $~lib/string/String.__eq i32.eqz @@ -14534,7 +14631,7 @@ i32.const -1 i32.const 4 call $~lib/util/number/utoa32 - local.tee $209 + local.tee $174 i32.const 16240 call $~lib/string/String.__eq i32.eqz @@ -14549,7 +14646,7 @@ i32.const -1 i32.const 5 call $~lib/util/number/utoa32 - local.tee $210 + local.tee $175 i32.const 16288 call $~lib/string/String.__eq i32.eqz @@ -14564,7 +14661,7 @@ i32.const -1 i32.const 8 call $~lib/util/number/utoa32 - local.tee $211 + local.tee $176 i32.const 16336 call $~lib/string/String.__eq i32.eqz @@ -14579,7 +14676,7 @@ i32.const -1 i32.const 11 call $~lib/util/number/utoa32 - local.tee $212 + local.tee $177 i32.const 16384 call $~lib/string/String.__eq i32.eqz @@ -14594,7 +14691,7 @@ i32.const -1 i32.const 15 call $~lib/util/number/utoa32 - local.tee $213 + local.tee $178 i32.const 16432 call $~lib/string/String.__eq i32.eqz @@ -14609,7 +14706,7 @@ i32.const -1 i32.const 17 call $~lib/util/number/utoa32 - local.tee $214 + local.tee $179 i32.const 16480 call $~lib/string/String.__eq i32.eqz @@ -14624,7 +14721,7 @@ i32.const -1 i32.const 21 call $~lib/util/number/utoa32 - local.tee $215 + local.tee $180 i32.const 16512 call $~lib/string/String.__eq i32.eqz @@ -14639,7 +14736,7 @@ i32.const -1 i32.const 27 call $~lib/util/number/utoa32 - local.tee $216 + local.tee $181 i32.const 16544 call $~lib/string/String.__eq i32.eqz @@ -14654,7 +14751,7 @@ i32.const -1 i32.const 32 call $~lib/util/number/utoa32 - local.tee $217 + local.tee $182 i32.const 16576 call $~lib/string/String.__eq i32.eqz @@ -14669,7 +14766,7 @@ i32.const -1 i32.const 36 call $~lib/util/number/utoa32 - local.tee $218 + local.tee $183 i32.const 16608 call $~lib/string/String.__eq i32.eqz @@ -14684,7 +14781,7 @@ i64.const 0 i32.const 10 call $~lib/util/number/utoa64 - local.tee $219 + local.tee $184 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -14699,7 +14796,7 @@ i64.const 12 i32.const 10 call $~lib/util/number/utoa64 - local.tee $220 + local.tee $185 i32.const 14400 call $~lib/string/String.__eq i32.eqz @@ -14714,7 +14811,7 @@ i64.const 123 i32.const 10 call $~lib/util/number/utoa64 - local.tee $221 + local.tee $186 i32.const 1872 call $~lib/string/String.__eq i32.eqz @@ -14729,7 +14826,7 @@ i64.const 1234 i32.const 10 call $~lib/util/number/utoa64 - local.tee $222 + local.tee $187 i32.const 14464 call $~lib/string/String.__eq i32.eqz @@ -14744,7 +14841,7 @@ i64.const 12345 i32.const 10 call $~lib/util/number/utoa64 - local.tee $223 + local.tee $188 i32.const 14496 call $~lib/string/String.__eq i32.eqz @@ -14759,7 +14856,7 @@ i64.const 123456 i32.const 10 call $~lib/util/number/utoa64 - local.tee $224 + local.tee $189 i32.const 14528 call $~lib/string/String.__eq i32.eqz @@ -14774,7 +14871,7 @@ i64.const 1234567 i32.const 10 call $~lib/util/number/utoa64 - local.tee $225 + local.tee $190 i32.const 14592 call $~lib/string/String.__eq i32.eqz @@ -14789,7 +14886,7 @@ i64.const 99999999 i32.const 10 call $~lib/util/number/utoa64 - local.tee $226 + local.tee $191 i32.const 16640 call $~lib/string/String.__eq i32.eqz @@ -14804,7 +14901,7 @@ i64.const 100000000 i32.const 10 call $~lib/util/number/utoa64 - local.tee $227 + local.tee $192 i32.const 16672 call $~lib/string/String.__eq i32.eqz @@ -14819,7 +14916,7 @@ i64.const 4294967295 i32.const 10 call $~lib/util/number/utoa64 - local.tee $228 + local.tee $193 i32.const 14960 call $~lib/string/String.__eq i32.eqz @@ -14834,7 +14931,7 @@ i64.const 4294967297 i32.const 10 call $~lib/util/number/utoa64 - local.tee $229 + local.tee $194 i32.const 16720 call $~lib/string/String.__eq i32.eqz @@ -14849,7 +14946,7 @@ i64.const 68719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $230 + local.tee $195 i32.const 16768 call $~lib/string/String.__eq i32.eqz @@ -14864,7 +14961,7 @@ i64.const 868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $231 + local.tee $196 i32.const 16816 call $~lib/string/String.__eq i32.eqz @@ -14879,7 +14976,7 @@ i64.const 8687194767350 i32.const 10 call $~lib/util/number/utoa64 - local.tee $232 + local.tee $197 i32.const 16864 call $~lib/string/String.__eq i32.eqz @@ -14894,7 +14991,7 @@ i64.const 86871947673501 i32.const 10 call $~lib/util/number/utoa64 - local.tee $233 + local.tee $198 i32.const 16912 call $~lib/string/String.__eq i32.eqz @@ -14909,7 +15006,7 @@ i64.const 999868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $234 + local.tee $199 i32.const 16960 call $~lib/string/String.__eq i32.eqz @@ -14924,7 +15021,7 @@ i64.const 9999868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $235 + local.tee $200 i32.const 17008 call $~lib/string/String.__eq i32.eqz @@ -14939,7 +15036,7 @@ i64.const 19999868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $236 + local.tee $201 i32.const 17056 call $~lib/string/String.__eq i32.eqz @@ -14954,7 +15051,7 @@ i64.const 129999868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $237 + local.tee $202 i32.const 17120 call $~lib/string/String.__eq i32.eqz @@ -14969,7 +15066,7 @@ i64.const 1239999868719476735 i32.const 10 call $~lib/util/number/utoa64 - local.tee $238 + local.tee $203 i32.const 17184 call $~lib/string/String.__eq i32.eqz @@ -14984,7 +15081,7 @@ i64.const -1 i32.const 10 call $~lib/util/number/utoa64 - local.tee $239 + local.tee $204 i32.const 17248 call $~lib/string/String.__eq i32.eqz @@ -14999,7 +15096,7 @@ i64.const 0 i32.const 10 call $~lib/util/number/itoa64 - local.tee $240 + local.tee $205 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -15014,7 +15111,7 @@ i64.const -1234 i32.const 10 call $~lib/util/number/itoa64 - local.tee $241 + local.tee $206 i32.const 17312 call $~lib/string/String.__eq i32.eqz @@ -15029,7 +15126,7 @@ i64.const 4294967295 i32.const 10 call $~lib/util/number/itoa64 - local.tee $242 + local.tee $207 i32.const 14960 call $~lib/string/String.__eq i32.eqz @@ -15044,7 +15141,7 @@ i64.const 4294967297 i32.const 10 call $~lib/util/number/itoa64 - local.tee $243 + local.tee $208 i32.const 16720 call $~lib/string/String.__eq i32.eqz @@ -15059,7 +15156,7 @@ i64.const -4294967295 i32.const 10 call $~lib/util/number/itoa64 - local.tee $244 + local.tee $209 i32.const 17344 call $~lib/string/String.__eq i32.eqz @@ -15074,7 +15171,7 @@ i64.const 68719476735 i32.const 10 call $~lib/util/number/itoa64 - local.tee $245 + local.tee $210 i32.const 16768 call $~lib/string/String.__eq i32.eqz @@ -15089,7 +15186,7 @@ i64.const -68719476735 i32.const 10 call $~lib/util/number/itoa64 - local.tee $246 + local.tee $211 i32.const 17392 call $~lib/string/String.__eq i32.eqz @@ -15104,7 +15201,7 @@ i64.const -868719476735 i32.const 10 call $~lib/util/number/itoa64 - local.tee $247 + local.tee $212 i32.const 17440 call $~lib/string/String.__eq i32.eqz @@ -15119,7 +15216,7 @@ i64.const -999868719476735 i32.const 10 call $~lib/util/number/itoa64 - local.tee $248 + local.tee $213 i32.const 17488 call $~lib/string/String.__eq i32.eqz @@ -15134,7 +15231,7 @@ i64.const -19999868719476735 i32.const 10 call $~lib/util/number/itoa64 - local.tee $249 + local.tee $214 i32.const 17536 call $~lib/string/String.__eq i32.eqz @@ -15149,7 +15246,7 @@ i64.const 9223372036854775807 i32.const 10 call $~lib/util/number/itoa64 - local.tee $250 + local.tee $215 i32.const 17600 call $~lib/string/String.__eq i32.eqz @@ -15164,7 +15261,7 @@ i64.const -9223372036854775808 i32.const 10 call $~lib/util/number/itoa64 - local.tee $251 + local.tee $216 i32.const 17664 call $~lib/string/String.__eq i32.eqz @@ -15179,7 +15276,7 @@ i64.const 0 i32.const 16 call $~lib/util/number/utoa64 - local.tee $252 + local.tee $217 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -15194,7 +15291,7 @@ i64.const 1 i32.const 16 call $~lib/util/number/utoa64 - local.tee $253 + local.tee $218 i32.const 2496 call $~lib/string/String.__eq i32.eqz @@ -15209,7 +15306,7 @@ i64.const 12 i32.const 16 call $~lib/util/number/utoa64 - local.tee $254 + local.tee $219 i32.const 12768 call $~lib/string/String.__eq i32.eqz @@ -15224,7 +15321,7 @@ i64.const 1234 i32.const 16 call $~lib/util/number/utoa64 - local.tee $255 + local.tee $220 i32.const 15040 call $~lib/string/String.__eq i32.eqz @@ -15239,7 +15336,7 @@ i64.const 1111111 i32.const 16 call $~lib/util/number/utoa64 - local.tee $256 + local.tee $221 i32.const 15136 call $~lib/string/String.__eq i32.eqz @@ -15254,7 +15351,7 @@ i64.const 8589934591 i32.const 16 call $~lib/util/number/utoa64 - local.tee $257 + local.tee $222 i32.const 17728 call $~lib/string/String.__eq i32.eqz @@ -15269,7 +15366,7 @@ i64.const 5942249508321 i32.const 16 call $~lib/util/number/utoa64 - local.tee $258 + local.tee $223 i32.const 17776 call $~lib/string/String.__eq i32.eqz @@ -15284,7 +15381,7 @@ i64.const 76310993685985 i32.const 16 call $~lib/util/number/utoa64 - local.tee $259 + local.tee $224 i32.const 17824 call $~lib/string/String.__eq i32.eqz @@ -15299,7 +15396,7 @@ i64.const 920735923817967 i32.const 16 call $~lib/util/number/utoa64 - local.tee $260 + local.tee $225 i32.const 17872 call $~lib/string/String.__eq i32.eqz @@ -15314,7 +15411,7 @@ i64.const 9927935178558959 i32.const 16 call $~lib/util/number/utoa64 - local.tee $261 + local.tee $226 i32.const 17920 call $~lib/string/String.__eq i32.eqz @@ -15329,7 +15426,7 @@ i64.const 81985529216486895 i32.const 16 call $~lib/util/number/utoa64 - local.tee $262 + local.tee $227 i32.const 17968 call $~lib/string/String.__eq i32.eqz @@ -15344,7 +15441,7 @@ i64.const 1311768467463790320 i32.const 16 call $~lib/util/number/utoa64 - local.tee $263 + local.tee $228 i32.const 18016 call $~lib/string/String.__eq i32.eqz @@ -15359,7 +15456,7 @@ i64.const 9223372036854775807 i32.const 16 call $~lib/util/number/utoa64 - local.tee $264 + local.tee $229 i32.const 18064 call $~lib/string/String.__eq i32.eqz @@ -15374,7 +15471,7 @@ i64.const -1 i32.const 16 call $~lib/util/number/utoa64 - local.tee $265 + local.tee $230 i32.const 18112 call $~lib/string/String.__eq i32.eqz @@ -15389,7 +15486,7 @@ i64.const -9223372036854775807 i32.const 16 call $~lib/util/number/itoa64 - local.tee $266 + local.tee $231 i32.const 18160 call $~lib/string/String.__eq i32.eqz @@ -15404,7 +15501,7 @@ i64.const -9223372036854775808 i32.const 16 call $~lib/util/number/itoa64 - local.tee $267 + local.tee $232 i32.const 18224 call $~lib/string/String.__eq i32.eqz @@ -15419,7 +15516,7 @@ i64.const -9223372036854775808 i32.const 16 call $~lib/util/number/itoa64 - local.tee $268 + local.tee $233 i32.const 18224 call $~lib/string/String.__eq i32.eqz @@ -15434,7 +15531,7 @@ i64.const 0 i32.const 2 call $~lib/util/number/utoa64 - local.tee $269 + local.tee $234 i32.const 2432 call $~lib/string/String.__eq i32.eqz @@ -15449,7 +15546,7 @@ i64.const 1 i32.const 2 call $~lib/util/number/utoa64 - local.tee $270 + local.tee $235 i32.const 2496 call $~lib/string/String.__eq i32.eqz @@ -15464,7 +15561,7 @@ i64.const 7 i32.const 2 call $~lib/util/number/utoa64 - local.tee $271 + local.tee $236 i32.const 15552 call $~lib/string/String.__eq i32.eqz @@ -15479,7 +15576,7 @@ i64.const 14 i32.const 2 call $~lib/util/number/utoa64 - local.tee $272 + local.tee $237 i32.const 15584 call $~lib/string/String.__eq i32.eqz @@ -15494,7 +15591,7 @@ i64.const 59 i32.const 2 call $~lib/util/number/utoa64 - local.tee $273 + local.tee $238 i32.const 15648 call $~lib/string/String.__eq i32.eqz @@ -15509,7 +15606,7 @@ i64.const 4095 i32.const 2 call $~lib/util/number/utoa64 - local.tee $274 + local.tee $239 i32.const 15680 call $~lib/string/String.__eq i32.eqz @@ -15524,7 +15621,7 @@ i64.const 4294967295 i32.const 2 call $~lib/util/number/utoa64 - local.tee $275 + local.tee $240 i32.const 16048 call $~lib/string/String.__eq i32.eqz @@ -15539,7 +15636,7 @@ i64.const 562949953421311 i32.const 2 call $~lib/util/number/utoa64 - local.tee $276 + local.tee $241 i32.const 18288 call $~lib/string/String.__eq i32.eqz @@ -15554,7 +15651,7 @@ i64.const -1 i32.const 2 call $~lib/util/number/utoa64 - local.tee $277 + local.tee $242 i32.const 18416 call $~lib/string/String.__eq i32.eqz @@ -15569,7 +15666,7 @@ i64.const -8589934591 i32.const 2 call $~lib/util/number/itoa64 - local.tee $278 + local.tee $243 i32.const 18560 call $~lib/string/String.__eq i32.eqz @@ -15584,7 +15681,7 @@ i64.const -1 i32.const 3 call $~lib/util/number/utoa64 - local.tee $279 + local.tee $244 i32.const 18656 call $~lib/string/String.__eq i32.eqz @@ -15599,7 +15696,7 @@ i64.const -1 i32.const 4 call $~lib/util/number/utoa64 - local.tee $280 + local.tee $245 i32.const 18768 call $~lib/string/String.__eq i32.eqz @@ -15614,7 +15711,7 @@ i64.const -1 i32.const 5 call $~lib/util/number/utoa64 - local.tee $281 + local.tee $246 i32.const 18848 call $~lib/string/String.__eq i32.eqz @@ -15629,7 +15726,7 @@ i64.const -1 i32.const 8 call $~lib/util/number/utoa64 - local.tee $282 + local.tee $247 i32.const 18928 call $~lib/string/String.__eq i32.eqz @@ -15644,7 +15741,7 @@ i64.const -1 i32.const 11 call $~lib/util/number/utoa64 - local.tee $283 + local.tee $248 i32.const 18992 call $~lib/string/String.__eq i32.eqz @@ -15659,7 +15756,7 @@ i64.const -1 i32.const 15 call $~lib/util/number/utoa64 - local.tee $284 + local.tee $249 i32.const 19056 call $~lib/string/String.__eq i32.eqz @@ -15674,7 +15771,7 @@ i64.const -1 i32.const 17 call $~lib/util/number/utoa64 - local.tee $285 + local.tee $250 i32.const 19120 call $~lib/string/String.__eq i32.eqz @@ -15689,7 +15786,7 @@ i64.const -1 i32.const 21 call $~lib/util/number/utoa64 - local.tee $286 + local.tee $251 i32.const 19168 call $~lib/string/String.__eq i32.eqz @@ -15704,7 +15801,7 @@ i64.const -1 i32.const 27 call $~lib/util/number/utoa64 - local.tee $287 + local.tee $252 i32.const 19216 call $~lib/string/String.__eq i32.eqz @@ -15719,7 +15816,7 @@ i64.const -1 i32.const 32 call $~lib/util/number/utoa64 - local.tee $288 + local.tee $253 i32.const 19264 call $~lib/string/String.__eq i32.eqz @@ -15734,7 +15831,7 @@ i64.const -1 i32.const 36 call $~lib/util/number/utoa64 - local.tee $289 + local.tee $254 i32.const 19312 call $~lib/string/String.__eq i32.eqz @@ -15748,7 +15845,7 @@ end f64.const 0 call $~lib/util/number/dtoa - local.tee $290 + local.tee $255 i32.const 19360 call $~lib/string/String.__eq i32.eqz @@ -15762,7 +15859,7 @@ end f64.const -0 call $~lib/util/number/dtoa - local.tee $291 + local.tee $256 i32.const 19360 call $~lib/string/String.__eq i32.eqz @@ -15776,7 +15873,7 @@ end f64.const nan:0x8000000000000 call $~lib/util/number/dtoa - local.tee $292 + local.tee $257 i32.const 6336 call $~lib/string/String.__eq i32.eqz @@ -15790,7 +15887,7 @@ end f64.const inf call $~lib/util/number/dtoa - local.tee $293 + local.tee $258 i32.const 19392 call $~lib/string/String.__eq i32.eqz @@ -15804,7 +15901,7 @@ end f64.const -inf call $~lib/util/number/dtoa - local.tee $294 + local.tee $259 i32.const 7552 call $~lib/string/String.__eq i32.eqz @@ -15818,7 +15915,7 @@ end f64.const 2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $295 + local.tee $260 i32.const 6848 call $~lib/string/String.__eq i32.eqz @@ -15832,7 +15929,7 @@ end f64.const -2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $296 + local.tee $261 i32.const 20336 call $~lib/string/String.__eq i32.eqz @@ -15846,7 +15943,7 @@ end f64.const 1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $297 + local.tee $262 i32.const 6912 call $~lib/string/String.__eq i32.eqz @@ -15860,7 +15957,7 @@ end f64.const -1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $298 + local.tee $263 i32.const 20400 call $~lib/string/String.__eq i32.eqz @@ -15874,7 +15971,7 @@ end f64.const 4185580496821356722454785e274 call $~lib/util/number/dtoa - local.tee $299 + local.tee $264 i32.const 20464 call $~lib/string/String.__eq i32.eqz @@ -15888,7 +15985,7 @@ end f64.const 2.2250738585072014e-308 call $~lib/util/number/dtoa - local.tee $12 + local.tee $265 i32.const 20528 call $~lib/string/String.__eq i32.eqz @@ -15902,7 +15999,7 @@ end f64.const 4.940656e-318 call $~lib/util/number/dtoa - local.tee $3 + local.tee $266 i32.const 20592 call $~lib/string/String.__eq i32.eqz @@ -15916,7 +16013,7 @@ end f64.const 9060801153433600 call $~lib/util/number/dtoa - local.tee $9 + local.tee $267 i32.const 20640 call $~lib/string/String.__eq i32.eqz @@ -15930,7 +16027,7 @@ end f64.const 4708356024711512064 call $~lib/util/number/dtoa - local.tee $10 + local.tee $268 i32.const 20704 call $~lib/string/String.__eq i32.eqz @@ -15944,7 +16041,7 @@ end f64.const 9409340012568248320 call $~lib/util/number/dtoa - local.tee $13 + local.tee $269 i32.const 20768 call $~lib/string/String.__eq i32.eqz @@ -15958,7 +16055,7 @@ end f64.const 5e-324 call $~lib/util/number/dtoa - local.tee $6 + local.tee $270 i32.const 6976 call $~lib/string/String.__eq i32.eqz @@ -15972,7 +16069,7 @@ end f64.const 1 call $~lib/util/number/dtoa - local.tee $14 + local.tee $271 i32.const 20832 call $~lib/string/String.__eq i32.eqz @@ -15986,7 +16083,7 @@ end f64.const 0.1 call $~lib/util/number/dtoa - local.tee $15 + local.tee $272 i32.const 4112 call $~lib/string/String.__eq i32.eqz @@ -16000,7 +16097,7 @@ end f64.const -1 call $~lib/util/number/dtoa - local.tee $16 + local.tee $273 i32.const 20864 call $~lib/string/String.__eq i32.eqz @@ -16014,7 +16111,7 @@ end f64.const -0.1 call $~lib/util/number/dtoa - local.tee $17 + local.tee $274 i32.const 20896 call $~lib/string/String.__eq i32.eqz @@ -16028,7 +16125,7 @@ end f64.const 1e6 call $~lib/util/number/dtoa - local.tee $18 + local.tee $275 i32.const 20928 call $~lib/string/String.__eq i32.eqz @@ -16042,7 +16139,7 @@ end f64.const 1e-06 call $~lib/util/number/dtoa - local.tee $4 + local.tee $276 i32.const 20976 call $~lib/string/String.__eq i32.eqz @@ -16056,7 +16153,7 @@ end f64.const -1e6 call $~lib/util/number/dtoa - local.tee $19 + local.tee $277 i32.const 21008 call $~lib/string/String.__eq i32.eqz @@ -16070,7 +16167,7 @@ end f64.const -1e-06 call $~lib/util/number/dtoa - local.tee $20 + local.tee $278 i32.const 21056 call $~lib/string/String.__eq i32.eqz @@ -16084,7 +16181,7 @@ end f64.const 1e7 call $~lib/util/number/dtoa - local.tee $21 + local.tee $279 i32.const 21104 call $~lib/string/String.__eq i32.eqz @@ -16098,7 +16195,7 @@ end f64.const 1e-07 call $~lib/util/number/dtoa - local.tee $22 + local.tee $280 i32.const 21152 call $~lib/string/String.__eq i32.eqz @@ -16112,7 +16209,7 @@ end f64.const 1.e+308 call $~lib/util/number/dtoa - local.tee $23 + local.tee $281 i32.const 4336 call $~lib/string/String.__eq i32.eqz @@ -16126,7 +16223,7 @@ end f64.const -1.e+308 call $~lib/util/number/dtoa - local.tee $24 + local.tee $282 i32.const 21184 call $~lib/string/String.__eq i32.eqz @@ -16140,7 +16237,7 @@ end f64.const inf call $~lib/util/number/dtoa - local.tee $25 + local.tee $283 i32.const 19392 call $~lib/string/String.__eq i32.eqz @@ -16154,7 +16251,7 @@ end f64.const -inf call $~lib/util/number/dtoa - local.tee $5 + local.tee $284 i32.const 7552 call $~lib/string/String.__eq i32.eqz @@ -16168,7 +16265,7 @@ end f64.const 1e-308 call $~lib/util/number/dtoa - local.tee $26 + local.tee $285 i32.const 21216 call $~lib/string/String.__eq i32.eqz @@ -16182,7 +16279,7 @@ end f64.const -1e-308 call $~lib/util/number/dtoa - local.tee $27 + local.tee $286 i32.const 21248 call $~lib/string/String.__eq i32.eqz @@ -16196,7 +16293,7 @@ end f64.const 1e-323 call $~lib/util/number/dtoa - local.tee $28 + local.tee $287 i32.const 21280 call $~lib/string/String.__eq i32.eqz @@ -16210,7 +16307,7 @@ end f64.const -1e-323 call $~lib/util/number/dtoa - local.tee $29 + local.tee $288 i32.const 21312 call $~lib/string/String.__eq i32.eqz @@ -16224,7 +16321,7 @@ end f64.const 0 call $~lib/util/number/dtoa - local.tee $30 + local.tee $289 i32.const 19360 call $~lib/string/String.__eq i32.eqz @@ -16238,7 +16335,7 @@ end f64.const 4294967272 call $~lib/util/number/dtoa - local.tee $31 + local.tee $290 i32.const 21344 call $~lib/string/String.__eq i32.eqz @@ -16252,7 +16349,7 @@ end f64.const 1.2312145673456234e-08 call $~lib/util/number/dtoa - local.tee $11 + local.tee $291 i32.const 21392 call $~lib/string/String.__eq i32.eqz @@ -16266,7 +16363,7 @@ end f64.const 555555555.5555556 call $~lib/util/number/dtoa - local.tee $32 + local.tee $292 i32.const 21456 call $~lib/string/String.__eq i32.eqz @@ -16280,7 +16377,7 @@ end f64.const 0.9999999999999999 call $~lib/util/number/dtoa - local.tee $7 + local.tee $293 i32.const 21520 call $~lib/string/String.__eq i32.eqz @@ -16294,7 +16391,7 @@ end f64.const 1 call $~lib/util/number/dtoa - local.tee $33 + local.tee $294 i32.const 20832 call $~lib/string/String.__eq i32.eqz @@ -16308,7 +16405,7 @@ end f64.const 12.34 call $~lib/util/number/dtoa - local.tee $34 + local.tee $295 i32.const 21584 call $~lib/string/String.__eq i32.eqz @@ -16322,7 +16419,7 @@ end f64.const 0.3333333333333333 call $~lib/util/number/dtoa - local.tee $8 + local.tee $296 i32.const 21616 call $~lib/string/String.__eq i32.eqz @@ -16336,7 +16433,7 @@ end f64.const 1234e17 call $~lib/util/number/dtoa - local.tee $35 + local.tee $297 i32.const 21680 call $~lib/string/String.__eq i32.eqz @@ -16350,7 +16447,7 @@ end f64.const 1234e18 call $~lib/util/number/dtoa - local.tee $36 + local.tee $298 i32.const 21744 call $~lib/string/String.__eq i32.eqz @@ -16364,7 +16461,7 @@ end f64.const 2.71828 call $~lib/util/number/dtoa - local.tee $37 + local.tee $299 i32.const 21792 call $~lib/string/String.__eq i32.eqz @@ -16378,7 +16475,7 @@ end f64.const 0.0271828 call $~lib/util/number/dtoa - local.tee $38 + local.tee $5 i32.const 21824 call $~lib/string/String.__eq i32.eqz @@ -16392,7 +16489,7 @@ end f64.const 271.828 call $~lib/util/number/dtoa - local.tee $39 + local.tee $2 i32.const 21872 call $~lib/string/String.__eq i32.eqz @@ -16406,7 +16503,7 @@ end f64.const 1.1e+128 call $~lib/util/number/dtoa - local.tee $40 + local.tee $4 i32.const 21904 call $~lib/string/String.__eq i32.eqz @@ -16448,19 +16545,87 @@ end global.get $std/string/str call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release + local.get $11 + call $~lib/rt/pure/__release + local.get $12 + call $~lib/rt/pure/__release + local.get $13 + 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 $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 $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 $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 + local.get $37 + call $~lib/rt/pure/__release + local.get $38 + 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 + local.get $47 call $~lib/rt/pure/__release - local.get $45 + local.get $48 call $~lib/rt/pure/__release local.get $46 call $~lib/rt/pure/__release - local.get $47 + local.get $45 call $~lib/rt/pure/__release - local.get $48 + local.get $44 call $~lib/rt/pure/__release local.get $49 call $~lib/rt/pure/__release @@ -16512,6 +16677,8 @@ 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 @@ -16520,15 +16687,15 @@ call $~lib/rt/pure/__release local.get $78 call $~lib/rt/pure/__release - local.get $82 + local.get $79 call $~lib/rt/pure/__release - local.get $83 + local.get $80 call $~lib/rt/pure/__release local.get $81 call $~lib/rt/pure/__release - local.get $80 + local.get $82 call $~lib/rt/pure/__release - local.get $79 + local.get $83 call $~lib/rt/pure/__release local.get $84 call $~lib/rt/pure/__release @@ -16592,10 +16759,10 @@ 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 $115 + call $~lib/rt/pure/__release local.get $117 call $~lib/rt/pure/__release local.get $118 @@ -16662,10 +16829,10 @@ call $~lib/rt/pure/__release local.get $149 call $~lib/rt/pure/__release - local.get $151 - call $~lib/rt/pure/__release local.get $150 call $~lib/rt/pure/__release + local.get $151 + call $~lib/rt/pure/__release local.get $152 call $~lib/rt/pure/__release local.get $153 @@ -16962,81 +17129,11 @@ call $~lib/rt/pure/__release local.get $299 call $~lib/rt/pure/__release - local.get $12 - call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release - local.get $10 - call $~lib/rt/pure/__release - local.get $13 - call $~lib/rt/pure/__release - local.get $6 - 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 $4 - 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 $5 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 $11 - call $~lib/rt/pure/__release - local.get $32 - call $~lib/rt/pure/__release - local.get $7 - call $~lib/rt/pure/__release - local.get $33 - call $~lib/rt/pure/__release - local.get $34 - call $~lib/rt/pure/__release - local.get $8 - 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 + local.get $2 call $~lib/rt/pure/__release - local.get $40 + local.get $4 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 8b92f0d440..ca6e5e8be3 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -395,23 +395,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 @@ -426,25 +426,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -456,24 +456,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -482,7 +482,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -492,7 +492,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -902,16 +902,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -923,18 +923,18 @@ unreachable end i32.const 12528 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 14096 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 12528 @@ -948,7 +948,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -966,10 +966,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -982,7 +982,7 @@ i32.const 12528 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -7851,23 +7851,22 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - i32.load offset=4 - local.set $4 - local.get $0 - i32.load offset=8 - local.set $5 - block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 loop $for-loop|0 local.get $2 local.get $5 @@ -7890,7 +7889,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $2 @@ -7904,10 +7902,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7921,23 +7919,22 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - i32.load offset=4 - local.set $4 - local.get $0 - i32.load offset=8 - local.set $5 - block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 loop $for-loop|0 local.get $2 local.get $5 @@ -7960,7 +7957,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $2 @@ -7974,10 +7970,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -7992,25 +7988,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -8035,7 +8030,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $2 @@ -8049,10 +8043,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8066,25 +8060,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -8109,7 +8102,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $2 @@ -8123,10 +8115,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8139,25 +8131,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 - block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 local.get $2 local.get $5 @@ -8182,7 +8173,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $2 @@ -8196,10 +8186,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8216,25 +8206,24 @@ (local $4 i32) (local $5 i32) (local $6 i64) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -8259,7 +8248,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $2 @@ -8273,10 +8261,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8293,25 +8281,24 @@ (local $4 i32) (local $5 i32) (local $6 f32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 - block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 local.get $2 local.get $5 @@ -8336,7 +8323,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $2 @@ -8350,10 +8336,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -8371,25 +8357,24 @@ (local $4 i32) (local $5 i32) (local $6 f64) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 + block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -8414,7 +8399,6 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $2 @@ -8428,10 +8412,10 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -9021,23 +9005,22 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - i32.load offset=4 - local.set $4 - local.get $0 - i32.load offset=8 - local.set $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9060,6 +9043,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $2 @@ -9074,11 +9058,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -9092,23 +9074,22 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - i32.load offset=4 - local.set $4 - local.get $0 - i32.load offset=8 - local.set $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9131,6 +9112,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $2 @@ -9145,11 +9127,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -9172,25 +9152,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9215,6 +9194,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $2 @@ -9229,11 +9209,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $~lib/typedarray/Uint16Array#every (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9241,25 +9219,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9284,6 +9261,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $2 @@ -9298,11 +9276,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -9321,25 +9297,24 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 - block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 local.get $2 local.get $5 @@ -9364,6 +9339,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $2 @@ -9378,11 +9354,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $2 @@ -9401,25 +9375,24 @@ (local $4 i32) (local $5 i32) (local $6 i64) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9444,6 +9417,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $2 @@ -9458,11 +9432,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) local.get $0 @@ -9631,25 +9603,24 @@ (local $4 i32) (local $5 i32) (local $6 f32) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 - block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 local.get $2 local.get $5 @@ -9674,6 +9645,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $2 @@ -9688,11 +9660,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $~lib/math/NativeMath.mod (param $0 f64) (result f64) (local $1 i64) @@ -9862,25 +9832,24 @@ (local $4 i32) (local $5 i32) (local $6 f64) - (local $7 i32) local.get $1 call $~lib/rt/pure/__retain local.set $3 - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $3 - call $~lib/rt/pure/__retain - local.set $1 - 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 $5 - block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 + block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $3 + call $~lib/rt/pure/__retain + local.set $1 + 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 $5 loop $for-loop|0 local.get $2 local.get $5 @@ -9905,6 +9874,7 @@ call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $2 @@ -9919,11 +9889,9 @@ local.get $0 call $~lib/rt/pure/__release i32.const 1 - local.set $7 end local.get $3 call $~lib/rt/pure/__release - local.get $7 ) (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 @@ -35131,19 +35099,17 @@ end i32.const 0 local.set $0 - i32.const 0 - local.set $3 - block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 + block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $2 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=8 i32.const 3 i32.shr_u - local.tee $4 + local.tee $3 if (result i32) i32.const 0 - local.get $4 + local.get $3 i32.ge_s else i32.const 1 @@ -35151,17 +35117,18 @@ if local.get $1 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $1 i32.load offset=4 - local.set $6 + local.set $5 loop $while-continue|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if - local.get $6 + local.get $5 local.get $0 i32.const 3 i32.shl @@ -35181,7 +35148,6 @@ local.get $1 call $~lib/rt/pure/__release i32.const 1 - local.set $3 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $0 @@ -35193,8 +35159,8 @@ end local.get $1 call $~lib/rt/pure/__release + i32.const 0 end - local.get $3 i32.const 0 i32.ne i32.const 1 @@ -35229,19 +35195,17 @@ end i32.const 0 local.set $0 - i32.const 0 - local.set $4 - block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 + block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $3 call $~lib/rt/pure/__retain local.tee $1 i32.load offset=8 i32.const 2 i32.shr_u - local.tee $5 + local.tee $4 if (result i32) i32.const 0 - local.get $5 + local.get $4 i32.ge_s else i32.const 1 @@ -35249,17 +35213,18 @@ if local.get $1 call $~lib/rt/pure/__release + i32.const 0 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $1 i32.load offset=4 - local.set $7 + local.set $6 loop $while-continue|014 local.get $0 - local.get $5 + local.get $4 i32.lt_s if - local.get $7 + local.get $6 local.get $0 i32.const 2 i32.shl @@ -35279,7 +35244,6 @@ local.get $1 call $~lib/rt/pure/__release i32.const 1 - local.set $4 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $0 @@ -35291,8 +35255,8 @@ end local.get $1 call $~lib/rt/pure/__release + i32.const 0 end - local.get $4 i32.const 0 i32.ne i32.const 1 diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index f7960187bc..56323337fc 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -165,23 +165,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 @@ -196,25 +196,25 @@ 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 $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add @@ -226,24 +226,24 @@ if local.get $0 local.get $2 - local.get $4 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 + local.get $4 i32.store offset=96 - local.get $3 + local.get $4 i32.eqz if local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -252,7 +252,7 @@ i32.xor i32.and local.set $1 - local.get $3 + local.get $4 local.get $1 i32.store offset=4 local.get $1 @@ -262,7 +262,7 @@ local.get $0 i32.load i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -672,16 +672,16 @@ (local $1 i32) (local $2 i32) global.get $~lib/rt/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if i32.const 1 memory.size - local.tee $0 + local.tee $1 i32.gt_s if (result i32) i32.const 1 - local.get $0 + local.get $1 i32.sub memory.grow i32.const 0 @@ -693,18 +693,18 @@ unreachable end i32.const 1216 - local.tee $0 + local.tee $1 i32.const 0 i32.store i32.const 2784 i32.const 0 i32.store loop $for-loop|0 - local.get $1 + local.get $0 i32.const 23 i32.lt_u if - local.get $1 + local.get $0 i32.const 2 i32.shl i32.const 1216 @@ -718,7 +718,7 @@ i32.const 16 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shl local.get $2 @@ -736,10 +736,10 @@ br $for-loop|1 end end - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -752,7 +752,7 @@ i32.const 1216 global.set $~lib/rt/tlsf/ROOT end - local.get $0 + local.get $1 ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) (local $1 i32) @@ -1359,9 +1359,9 @@ loop $while-continue|06 block $while-break|0 call $while/Ref#constructor - local.tee $3 + local.tee $1 call $~lib/rt/pure/__release - local.get $3 + local.get $1 if local.get $2 i32.const 1 From 0be3cf6a27e6657fe78dcf9ef98250955434b974 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 03:25:58 +0300 Subject: [PATCH 05/13] simplify-locals-nostructure -> simplify-locals-notee-nostructure --- src/module.ts | 2 +- tests/compiler/binary.optimized.wat | 93 +- tests/compiler/do.optimized.wat | 8 +- .../extends-baseaggregate.optimized.wat | 58 +- tests/compiler/for.optimized.wat | 8 +- .../implicit-getter-setter.optimized.wat | 8 +- tests/compiler/issues/1095.optimized.wat | 8 +- tests/compiler/issues/1225.optimized.wat | 8 +- tests/compiler/logical.optimized.wat | 8 +- tests/compiler/managed-cast.optimized.wat | 8 +- tests/compiler/memcpy.optimized.wat | 63 +- tests/compiler/number.optimized.wat | 218 +- tests/compiler/object-literal.optimized.wat | 8 +- tests/compiler/rc/local-init.optimized.wat | 8 +- .../rc/logical-and-mismatch.optimized.wat | 8 +- .../rc/logical-or-mismatch.optimized.wat | 8 +- tests/compiler/rc/optimize.optimized.wat | 22 +- tests/compiler/rc/rereturn.optimized.wat | 8 +- .../rc/ternary-mismatch.optimized.wat | 8 +- tests/compiler/resolve-binary.optimized.wat | 220 +- .../resolve-elementaccess.optimized.wat | 419 +-- tests/compiler/resolve-ternary.optimized.wat | 226 +- .../retain-release-sanity.optimized.wat | 274 +- tests/compiler/retain-return.optimized.wat | 8 +- tests/compiler/rt/finalize.optimized.wat | 38 +- tests/compiler/runtime-full.optimized.wat | 8 +- .../compiler/std/array-literal.optimized.wat | 8 +- tests/compiler/std/array.optimized.wat | 1145 ++++---- tests/compiler/std/arraybuffer.optimized.wat | 8 +- tests/compiler/std/dataview.optimized.wat | 8 +- tests/compiler/std/map.optimized.wat | 1300 ++++----- tests/compiler/std/math.optimized.wat | 2362 +++++++++-------- tests/compiler/std/mod.optimized.wat | 82 +- tests/compiler/std/set.optimized.wat | 52 +- tests/compiler/std/staticarray.optimized.wat | 8 +- .../std/string-casemapping.optimized.wat | 352 +-- .../std/string-encoding.optimized.wat | 8 +- tests/compiler/std/string.optimized.wat | 955 +++---- tests/compiler/std/symbol.optimized.wat | 9 +- tests/compiler/std/typedarray.optimized.wat | 580 ++-- tests/compiler/wasi/trace.optimized.wat | 419 +-- tests/compiler/while.optimized.wat | 8 +- 42 files changed, 4555 insertions(+), 4502 deletions(-) diff --git a/src/module.ts b/src/module.ts index 96b0ebf6d2..85281af212 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1549,7 +1549,7 @@ export class Module { if (optimizeLevel >= 3 && shrinkLevel <= 1) { passes.push("licm"); } - passes.push("simplify-locals-nostructure"); + passes.push("simplify-locals-notee-nostructure"); passes.push("vacuum"); passes.push("reorder-locals"); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 12db290bd5..17cee2e52b 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -132,6 +132,7 @@ br $while-continue|0 end end + local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -150,31 +151,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 + local.tee $3 + i32.const 8388608 + i32.sub local.get $2 + local.get $1 + i32.sub + local.tee $1 + i32.const 23 + i32.shl + i32.or local.get $3 + i32.const 1 + local.get $1 i32.sub - local.tee $2 + i32.shr_u + local.get $1 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 + select i32.or f32.reinterpret_i32 return @@ -195,7 +192,12 @@ i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.set $2 + local.get $1 + i64.const 63 + i64.shr_u + local.set $3 + local.get $2 i64.const 2047 i64.eq if @@ -204,19 +206,15 @@ 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 + local.tee $4 i64.const 9214364837600034816 i64.le_u if - local.get $3 + local.get $4 i64.const 9214364837600034816 i64.eq br_if $folding-inner0 @@ -276,6 +274,9 @@ br $while-continue|0 end end + local.get $3 + i64.const 63 + i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -294,35 +295,29 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 + local.tee $3 + i64.const 4503599627370496 + i64.sub local.get $2 + local.get $1 + i64.sub + local.tee $1 + i64.const 52 + i64.shl + i64.or local.get $3 + i64.const 0 + local.get $1 i64.sub - local.tee $2 + i64.const 1 + i64.add + i64.shr_u + local.get $1 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 + select i64.or f64.reinterpret_i64 return diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 13ee0d6c52..9c70e4f6ef 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -238,7 +238,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -246,11 +246,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 304b4904b7..1a0d0a698e 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -163,7 +163,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -171,11 +171,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1820,26 +1820,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR + local.tee $2 local.set $0 + global.get $~lib/rt/pure/CUR + local.set $3 loop $for-loop|0 - local.get $4 local.get $0 + local.get $3 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.load offset=4 - local.tee $2 + local.tee $5 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.const 0 @@ -1848,51 +1848,51 @@ i32.const 0 end if - local.get $5 + local.get $4 call $~lib/rt/pure/markGray - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 else i32.const 0 - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $5 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $5 + local.get $4 call $~lib/rt/tlsf/freeBlock else + local.get $4 local.get $5 - local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end - local.get $3 + local.get $2 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 @@ -1909,18 +1909,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 i32.load - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 579428fa82..1a9f116bdb 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -235,7 +235,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -243,11 +243,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 779ea253f5..99b974af68 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 2c23f79404..e1f87a0342 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 37e44e8191..4f2ed5eeae 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index e59eaa06b5..3fc5c348af 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 41383bad90..ebc8463025 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 8952f746c9..48c7ddd585 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -160,22 +160,13 @@ block $break|2 block $case2|2 block $case1|2 - local.get $0 - i32.const 3 - i32.and - local.tee $3 - i32.const 1 - i32.ne - if - local.get $3 - i32.const 2 - i32.eq - br_if $case1|2 - local.get $3 + block $case0|2 + local.get $0 i32.const 3 - i32.eq - br_if $case2|2 - br $break|2 + i32.and + i32.const 1 + i32.sub + br_table $case0|2 $case1|2 $case2|2 $break|2 end local.get $1 i32.load @@ -229,25 +220,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 24 - i32.shr_u local.get $1 i32.load offset=5 - local.tee $3 + local.tee $4 i32.const 8 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 24 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=9 local.tee $3 i32.const 8 i32.shl + local.get $4 + i32.const 24 + i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -320,25 +311,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 16 - i32.shr_u local.get $1 i32.load offset=6 - local.tee $3 + local.tee $4 i32.const 16 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 16 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=10 local.tee $3 i32.const 16 i32.shl + local.get $4 + i32.const 16 + i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -407,25 +398,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 8 - i32.shr_u local.get $1 i32.load offset=7 - local.tee $3 + local.tee $4 i32.const 24 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 8 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=11 local.tee $3 i32.const 24 i32.shl + local.get $4 + i32.const 8 + i32.shr_u i32.or i32.store offset=8 local.get $0 diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 3fd153cc6e..5ff5fba74d 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -355,11 +355,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -367,18 +362,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -397,116 +399,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -514,7 +513,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -529,8 +528,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -566,18 +565,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -588,7 +587,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -621,13 +620,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -639,7 +638,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -656,9 +655,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -667,9 +666,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -696,7 +695,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -710,7 +709,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -724,7 +723,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -1079,7 +1078,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1087,7 +1086,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1157,7 +1156,8 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 f64) + (local $4 i64) + (local $5 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 1920 @@ -1166,77 +1166,79 @@ i32.const 2352 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 + local.tee $4 + i64.const 4294967295 + i64.and + local.set $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $3 + local.tee $4 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - i64.const 0 + local.get $4 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $1 + local.get $0 + local.get $0 + local.get $4 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 2 + i32.add + local.get $1 local.get $0 i32.const 2 i32.add local.get $1 - local.get $3 + local.get $4 i64.const 2147483647 i64.mul local.get $2 @@ -1252,7 +1254,7 @@ i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $4 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 9fb5ce8199..f118ebf12f 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -162,7 +162,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -170,11 +170,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index d25ba45aa4..31a2fe22a1 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index bcfd706103..12bfe96868 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 0ee135fd09..eeefb100c7 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index a655fd3623..3927895849 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1091,22 +1091,22 @@ (local $2 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 local.tee $1 + local.tee $0 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $2 call $~lib/rt/pure/__release end - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release ) (func $rc/optimize/OptimizeARC.keeps.partialRetains (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 04e6d6ae71..e05108df03 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 5c66d5b631..ac681cb4ed 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 78726945aa..7cfb5a6905 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -370,11 +370,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -382,18 +377,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -412,116 +414,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -529,7 +528,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -544,8 +543,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -581,18 +580,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -603,7 +602,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -636,13 +635,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -654,7 +653,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -671,9 +670,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -682,9 +681,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -711,7 +710,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -725,7 +724,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -739,7 +738,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -1094,7 +1093,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1102,7 +1101,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1172,6 +1171,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) + (local $4 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2064 @@ -1180,77 +1180,79 @@ i32.const 2496 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 + local.tee $1 + i64.const 4294967295 + i64.and + local.set $2 + local.get $1 i64.const 32 i64.shr_u - local.tee $3 + local.tee $1 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $4 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $4 i64.const 4294967295 i64.and - i64.const 0 + local.get $1 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $3 + local.get $0 + local.get $0 + local.get $1 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $4 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $4 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 3 + i32.add + local.get $3 local.get $0 i32.const 3 i32.add - local.get $1 local.get $3 + local.get $1 i64.const 2147483647 i64.mul local.get $2 @@ -1262,14 +1264,14 @@ i64.const 32 i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294966784 i64.mul - local.get $1 + local.get $3 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index b6e217bab8..43839dd3cf 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -437,35 +437,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -484,117 +485,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -602,7 +599,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -617,10 +614,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -638,7 +635,7 @@ i32.const 2280 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -654,19 +651,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -677,7 +674,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -702,21 +699,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -728,7 +725,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -744,10 +741,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -755,9 +752,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -784,13 +781,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -799,7 +796,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -813,7 +810,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -1196,7 +1193,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1204,7 +1201,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1272,18 +1269,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -1294,67 +1294,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1368,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -1377,71 +1378,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 1408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + 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/_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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1450,47 +1471,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -1499,48 +1523,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -1552,13 +1561,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index 08c31d502b..fbce41ccb9 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -182,7 +182,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -190,11 +190,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1347,11 +1347,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -1359,18 +1354,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -1389,116 +1391,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -1506,7 +1505,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -1521,8 +1520,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -1558,18 +1557,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -1580,7 +1579,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -1613,13 +1612,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -1631,7 +1630,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -1648,9 +1647,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -1659,9 +1658,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -1688,7 +1687,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -1702,7 +1701,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -1716,7 +1715,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -2071,7 +2070,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -2079,7 +2078,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -2149,7 +2148,8 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 f64) + (local $4 i64) + (local $5 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 2096 @@ -2158,77 +2158,79 @@ i32.const 2528 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 + local.tee $4 + i64.const 4294967295 + i64.and + local.set $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $3 + local.tee $4 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - i64.const 0 + local.get $4 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $1 + local.get $0 + local.get $0 + local.get $4 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 1 + i32.add + local.get $1 local.get $0 i32.const 1 i32.add local.get $1 - local.get $3 + local.get $4 i64.const 2147483647 i64.mul local.get $2 @@ -2244,7 +2246,7 @@ i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $4 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 4c99175311..cc6bcb11c2 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -180,7 +180,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -188,11 +188,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1781,56 +1781,57 @@ i32.const 3 call $~lib/rt/tlsf/__alloc 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 i32.const 12 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 i32.const 12 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $2 + local.set $1 + local.get $2 + local.get $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $0 - i32.store - local.get $3 local.get $1 + i32.store + local.get $0 + local.get $2 i32.store offset=4 - local.get $3 + local.get $0 i32.const 12 i32.store offset=8 - local.get $3 + local.get $0 i32.const 3 i32.store offset=12 - local.get $3 + local.get $0 call $~lib/array/Array#push - local.get $3 + local.get $0 call $~lib/array/Array#push - local.get $3 + local.get $0 i32.load offset=12 - local.tee $1 + local.tee $2 i32.const 1 i32.lt_s if @@ -1841,72 +1842,73 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $0 i32.load offset=4 - local.get $1 + local.get $2 i32.const 1 i32.sub - local.tee $1 + local.tee $2 i32.const 2 i32.shl i32.add i32.load drop - local.get $3 - local.get $1 + local.get $0 + local.get $2 i32.store offset=12 - local.get $3 + local.get $0 call $~lib/rt/pure/__release i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc 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 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 i32.const 0 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $2 + local.set $1 + local.get $2 + local.get $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $0 - i32.store - local.get $3 local.get $1 + i32.store + local.get $0 + local.get $2 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 $3 + local.get $0 loop $for-loop|0 - local.get $2 + local.get $4 i32.const 10 i32.lt_s if @@ -1914,47 +1916,48 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $0 i32.const 0 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $0 + local.set $1 + local.get $0 + local.get $2 i32.load local.tee $5 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 + local.set $1 local.get $5 call $~lib/rt/pure/__release end - local.get $3 - local.get $0 - i32.store - local.get $3 + local.get $2 local.get $1 + i32.store + local.get $2 + local.get $0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 @@ -1964,15 +1967,15 @@ i32.const 10 i32.lt_s if - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=12 local.tee $1 i32.const 1 i32.add local.tee $5 call $~lib/array/ensureSize - local.get $3 + local.get $2 i32.load offset=4 local.get $1 i32.const 2 @@ -1981,7 +1984,7 @@ i32.const 1344 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $2 local.get $5 i32.store offset=12 i32.const 1344 @@ -1993,12 +1996,12 @@ br $for-loop|1 end end - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $4 i32.const 1 i32.add - local.set $2 + local.set $4 br $for-loop|0 end end @@ -2006,14 +2009,14 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $2 + local.tee $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 1456 call $~lib/string/String.__concat - local.get $2 + local.get $0 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 @@ -2027,13 +2030,13 @@ i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 local.tee $0 local.get $1 - local.tee $2 + local.tee $3 i32.load local.tee $4 i32.ne @@ -2044,94 +2047,95 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.get $0 i32.store local.get $2 - local.set $0 + local.set $4 + local.get $2 local.get $3 - local.tee $2 - local.get $0 + local.tee $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 local.get $4 + call $~lib/rt/pure/__retain + local.set $4 + local.get $3 call $~lib/rt/pure/__release end local.get $0 - local.get $2 + local.get $4 i32.store - local.get $0 - local.tee $2 - local.get $3 - local.tee $0 + local.get $1 + local.get $2 + local.tee $3 i32.load local.tee $4 i32.ne if - local.get $2 + local.get $0 call $~lib/rt/pure/__retain - local.set $2 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $2 i32.store local.get $1 - local.tee $2 - local.get $0 + local.tee $0 + local.get $3 i32.load local.tee $4 i32.ne if - local.get $2 + local.get $0 call $~lib/rt/pure/__retain - local.set $2 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $2 i32.store + local.get $1 + local.set $4 local.get $3 + local.tee $0 local.get $1 - local.tee $2 i32.load - local.tee $4 + local.tee $3 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $2 + local.get $4 local.get $0 i32.store local.get $1 - local.get $3 + local.get $2 i32.load local.tee $0 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 + local.set $4 local.get $0 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) @@ -2418,26 +2422,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR + local.tee $2 local.set $0 + global.get $~lib/rt/pure/CUR + local.set $3 loop $for-loop|0 - local.get $4 local.get $0 + local.get $3 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.load offset=4 - local.tee $2 + local.tee $5 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.const 0 @@ -2446,51 +2450,51 @@ i32.const 0 end if - local.get $5 + local.get $4 call $~lib/rt/pure/markGray - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 else i32.const 0 - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $5 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $5 + local.get $4 call $~lib/rt/tlsf/freeBlock else + local.get $4 local.get $5 - local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end - local.get $3 + local.get $2 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 @@ -2507,18 +2511,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 i32.load - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 72b4c576f6..9371044043 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 671366654c..cf0fab021d 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -2066,25 +2066,25 @@ global.get $~lib/rt/pure/ROOTS local.tee $1 local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR local.set $0 + global.get $~lib/rt/pure/CUR + local.set $5 loop $for-loop|0 - local.get $4 local.get $0 + local.get $5 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 - i32.load offset=4 local.tee $2 + i32.load offset=4 + local.tee $4 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $4 i32.const 268435455 i32.and i32.const 0 @@ -2093,10 +2093,10 @@ i32.const 0 end if - local.get $5 + local.get $2 call $~lib/rt/pure/markGray local.get $3 - local.get $5 + local.get $2 i32.store local.get $3 i32.const 4 @@ -2104,29 +2104,29 @@ local.set $3 else i32.const 0 - local.get $2 + local.get $4 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $4 i32.const 1879048192 i32.and select if - local.get $5 + local.get $2 call $~lib/rt/pure/finalize else - local.get $5 local.get $2 + local.get $4 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 0a6d9adf60..ae4f3be6eb 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index dcb6c1ef2d..a8bcc64779 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 9691d0bf30..8e28118c1d 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -539,7 +539,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -547,11 +547,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1553,11 +1553,11 @@ i32.and i32.const 24 i32.add - local.tee $3 + local.tee $5 i32.add local.set $1 local.get $2 - local.get $3 + local.get $5 i32.sub local.set $2 local.get $0 @@ -1919,12 +1919,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $5 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $5 + local.set $2 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -1933,23 +1933,23 @@ if local.get $4 local.get $3 - local.get $5 + local.get $2 call $~lib/memory/memory.copy end local.get $4 - local.tee $3 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $5 local.get $2 - local.get $3 i32.store offset=4 - local.get $2 + local.get $5 local.get $1 i32.store offset=8 - local.get $2 + local.get $5 local.get $0 i32.store offset=12 - local.get $2 + local.get $5 ) (func $~lib/array/Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -2603,7 +2603,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 @@ -2611,7 +2611,7 @@ select local.tee $4 i32.add - local.tee $2 + local.tee $3 i32.const 268435452 i32.gt_u if @@ -2622,23 +2622,23 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 2 i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $3 + local.get $2 i32.const 2 i32.shl - local.tee $0 + local.tee $2 call $~lib/memory/memory.copy - local.get $0 + local.get $2 local.get $5 i32.add local.get $1 @@ -2649,7 +2649,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 ) (func $~lib/array/Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -3809,10 +3809,10 @@ (local $7 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $1 + local.set $4 local.get $0 i32.load offset=12 - local.tee $4 + local.tee $1 i32.const 2 i32.const 3 i32.const 0 @@ -3823,11 +3823,11 @@ local.set $6 loop $for-loop|0 local.get $2 - local.get $4 + local.get $1 local.get $0 i32.load offset=12 local.tee $3 - local.get $4 + local.get $1 local.get $3 i32.lt_s select @@ -3850,7 +3850,7 @@ local.get $7 local.get $2 local.get $0 - local.get $1 + local.get $4 i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store @@ -3861,7 +3861,7 @@ br $for-loop|0 end end - local.get $1 + local.get $4 call $~lib/rt/pure/__release local.get $5 ) @@ -6004,7 +6004,7 @@ (local $3 i32) local.get $2 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 local.get $0 i32.load offset=12 @@ -6025,16 +6025,16 @@ local.get $1 i32.const 1 i32.add - local.tee $3 + local.tee $2 i32.const 2 call $~lib/array/ensureSize local.get $0 - local.get $3 + local.get $2 i32.store offset=12 end - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 local.get $0 i32.load offset=4 local.get $1 @@ -6047,16 +6047,16 @@ i32.ne if local.get $0 - local.get $3 + local.get $2 call $~lib/rt/pure/__retain i32.store local.get $1 call $~lib/rt/pure/__release end - local.get $3 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release ) (func $std/array/createReverseOrderedNestedArray (result i32) (local $0 i32) @@ -6264,7 +6264,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 i32.const 1 i32.le_s if @@ -6276,22 +6276,22 @@ end local.get $0 i32.load offset=4 - local.set $2 - local.get $3 + local.set $3 + local.get $2 i32.const 2 i32.eq if - local.get $2 + local.get $3 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.load call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~argumentsLength - local.get $3 + local.get $2 local.get $4 local.get $1 i32.load @@ -6299,16 +6299,16 @@ i32.const 0 i32.lt_s if - local.get $2 + local.get $3 local.get $4 i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store end local.get $0 call $~lib/rt/pure/__retain - local.get $3 + local.get $2 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -6316,13 +6316,13 @@ call $~lib/rt/pure/__release return end - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $4 call $~lib/util/sort/insertionSort<~lib/array/Array> - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -7366,9 +7366,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $0 + local.tee $2 call $~lib/util/number/utoa_dec_simple - local.get $0 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7687,35 +7687,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -7734,117 +7735,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -7852,7 +7849,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -7867,10 +7864,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -7888,7 +7885,7 @@ i32.const 9896 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -7904,19 +7901,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -7927,7 +7924,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -7952,21 +7949,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -7978,7 +7975,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -7994,10 +7991,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -8005,9 +8002,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -8034,13 +8031,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -8049,7 +8046,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -8063,7 +8060,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -8246,7 +8243,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -8254,7 +8251,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -8322,18 +8319,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -8344,67 +8344,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8417,8 +8418,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -8427,71 +8428,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 9024 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 9720 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -8500,47 +8521,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -8549,48 +8573,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -8602,13 +8611,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) @@ -8964,22 +8973,23 @@ local.get $8 if local.get $1 - local.tee $2 + local.get $1 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $2 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $2 + local.set $1 end local.get $3 i32.const 1 @@ -9059,132 +9069,133 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $8 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $7 i32.const 0 i32.lt_s if - local.get $5 + local.get $8 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $7 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $3 + local.get $2 select return end i32.const 7840 local.set $1 - local.get $5 + local.get $8 call $~lib/string/String#get:length - local.set $8 + local.set $5 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $7 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $7 - local.tee $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $5 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $8 call $~lib/string/String.__concat - local.tee $7 - local.tee $1 - local.get $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -9192,21 +9203,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -9266,21 +9277,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9422,14 +9433,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10092,168 +10103,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10280,14 +10292,14 @@ local.get $1 i32.const 255 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -10436,168 +10448,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10619,168 +10632,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10806,70 +10820,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 @@ -10878,67 +10892,68 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -10947,24 +10962,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end 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 $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -11121,21 +11136,21 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $0 + local.set $4 i32.const 16 i32.const 27 call $~lib/rt/tlsf/__alloc - local.tee $4 + local.tee $0 local.get $3 i32.store offset=12 - local.get $4 + local.get $0 local.get $2 i32.store offset=8 - local.get $4 local.get $0 - i32.store offset=4 local.get $4 + i32.store offset=4 local.get $0 + local.get $4 call $~lib/rt/pure/__retain i32.store i32.const 0 @@ -11153,8 +11168,8 @@ i32.load local.tee $5 if - local.get $0 local.get $1 + local.get $4 i32.add local.get $5 i32.load offset=4 @@ -11181,7 +11196,7 @@ local.get $3 i32.lt_s if - local.get $0 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -11196,7 +11211,7 @@ br $for-loop|2 end end - local.get $4 + local.get $0 call $~lib/rt/pure/__retain ) (func $start:std/array @@ -17457,7 +17472,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 @@ -17465,7 +17480,7 @@ select local.tee $4 i32.add - local.tee $2 + local.tee $3 i32.const 268435452 i32.gt_u if @@ -17476,23 +17491,23 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 2 i32.const 7 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $3 + local.get $2 i32.const 2 i32.shl - local.tee $0 + local.tee $2 call $~lib/memory/memory.copy - local.get $0 + local.get $2 local.get $5 i32.add local.get $1 @@ -17503,7 +17518,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19193,14 +19208,14 @@ (local $3 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $1 + local.set $2 local.get $0 local.get $0 i32.load offset=12 local.tee $3 i32.const 1 i32.add - local.tee $2 + local.tee $1 i32.const 2 call $~lib/array/ensureSize local.get $0 @@ -19209,15 +19224,15 @@ i32.const 2 i32.shl i32.add - local.get $1 + local.get $2 call $~lib/rt/pure/__retain i32.store local.get $0 - local.get $2 - i32.store offset=12 local.get $1 - call $~lib/rt/pure/__release + i32.store offset=12 local.get $2 + call $~lib/rt/pure/__release + local.get $1 ) (func $~lib/array/Array<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19236,9 +19251,9 @@ i32.const 0 local.get $1 select - local.tee $5 + local.tee $4 i32.add - local.tee $3 + local.tee $5 i32.const 268435452 i32.gt_u if @@ -19249,15 +19264,15 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 2 i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $5 i32.load offset=4 - local.set $3 + local.set $6 local.get $2 i32.const 2 i32.shl @@ -19266,49 +19281,49 @@ i32.load offset=4 local.set $0 loop $for-loop|0 - local.get $4 + local.get $3 local.get $2 i32.lt_u if local.get $3 - local.get $4 + local.get $6 i32.add local.get $0 - local.get $4 + local.get $3 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $3 i32.const 4 i32.add - local.set $4 + local.set $3 br $for-loop|0 end end local.get $2 - local.get $3 + local.get $6 i32.add - local.set $4 + local.set $3 local.get $1 i32.load offset=4 - local.set $3 - local.get $5 + local.set $2 + local.get $4 i32.const 2 i32.shl - local.set $2 + local.set $4 i32.const 0 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $4 i32.lt_u if local.get $0 - local.get $4 + local.get $3 i32.add local.get $0 - local.get $3 + local.get $2 i32.add i32.load call $~lib/rt/pure/__retain @@ -19322,7 +19337,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $6 + local.get $5 ) (func $~lib/array/Array<~lib/string/String>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -20640,12 +20655,12 @@ local.get $0 local.get $1 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $1 local.get $2 call $~lib/array/Array<~lib/string/String>#indexOf i32.const 0 i32.ge_s - local.get $0 + local.get $1 call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#indexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index b0dafe80b1..1684b2599c 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 1fc37200c5..7fdfbd1f09 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index e1e10c778f..a90c0b89c9 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -177,7 +177,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -185,11 +185,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1379,55 +1379,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -1435,73 +1435,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -2406,55 +2406,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load8_s offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -2462,73 +2462,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -2751,55 +2751,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load i32.store - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load call $~lib/util/hash/hash32 local.get $1 @@ -2807,74 +2807,74 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - ) + local.get $4 + call $~lib/rt/pure/__release + ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -3611,55 +3611,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -3667,73 +3667,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -3977,55 +3977,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load8_u offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -4033,73 +4033,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -4881,55 +4881,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -4937,73 +4937,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -5305,55 +5305,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load16_s offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -5361,73 +5361,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6178,55 +6178,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6234,73 +6234,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6548,55 +6548,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load16_u offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6604,73 +6604,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -8631,55 +8631,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i64.load i64.store - local.get $3 local.get $2 + local.get $3 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -8687,73 +8687,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=12 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) @@ -9120,55 +9120,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i64.load i64.store - local.get $3 local.get $2 + local.get $3 i64.load offset=8 i64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -9176,73 +9176,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=16 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32) (local $3 i32) @@ -10593,55 +10593,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f32.load f32.store - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -10650,73 +10650,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) @@ -10996,55 +10996,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f32.load f32.store - local.get $3 local.get $2 + local.get $3 f32.load offset=4 f32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -11053,73 +11053,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32) (local $3 i32) @@ -11829,55 +11829,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f64.load f64.store - local.get $3 local.get $2 + local.get $3 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -11886,73 +11886,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=12 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) @@ -12232,55 +12232,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f64.load f64.store - local.get $3 local.get $2 + local.get $3 f64.load offset=8 f64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -12289,73 +12289,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=16 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32) (local $3 i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index e9c68a62b6..466babd55c 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -1045,7 +1045,9 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i32) + (local $5 f64) + (local $6 f64) + (local $7 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -1087,7 +1089,7 @@ return end i32.const -54 - local.set $5 + local.set $7 local.get $0 f64.const 18014398509481984 f64.mul @@ -1120,6 +1122,7 @@ end end end + f64.const 0.5 local.get $2 i64.const 4294967295 i64.and @@ -1139,27 +1142,27 @@ f64.const 1 f64.sub local.tee $3 + f64.mul + local.get $3 + f64.mul + local.set $4 + local.get $3 f64.const 2 local.get $3 f64.add f64.div - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 + f64.mul + local.tee $6 + local.get $6 f64.mul local.set $0 + local.get $5 local.get $4 - f64.const 0.5 - local.get $3 - f64.mul - local.get $3 - f64.mul - local.tee $4 - local.get $0 + local.get $6 f64.const 0.6666666666666735 local.get $0 - local.get $0 - f64.mul - local.tee $0 f64.const 0.2857142874366239 local.get $0 f64.const 0.1818357216161805 @@ -1186,7 +1189,7 @@ f64.add f64.add f64.mul - local.get $5 + local.get $7 local.get $1 i32.const 20 i32.shr_s @@ -1400,30 +1403,30 @@ local.get $1 f32.add f32.div - local.tee $4 - local.get $4 + local.tee $0 + local.get $0 f32.mul local.tee $6 local.get $6 f32.mul - local.set $0 - local.get $4 + local.set $4 + local.get $0 f32.const 0.5 local.get $1 f32.mul local.get $1 f32.mul - local.tee $4 + local.tee $0 local.get $6 f32.const 0.6666666269302368 - local.get $0 + local.get $4 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $4 f32.const 0.40000972151756287 - local.get $0 + local.get $4 f32.const 0.24279078841209412 f32.mul f32.add @@ -1433,17 +1436,17 @@ f32.mul local.get $3 f32.convert_i32_s - local.tee $0 + local.tee $4 f32.const 9.05800061445916e-06 f32.mul local.get $5 f32.add f32.add - local.get $4 + local.get $0 f32.sub local.get $1 f32.add - local.get $0 + local.get $4 f32.const 0.6931381225585938 f32.mul f32.add @@ -1452,7 +1455,8 @@ (local $1 i32) (local $2 f32) (local $3 f32) - (local $4 i32) + (local $4 f32) + (local $5 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -1490,7 +1494,7 @@ return end i32.const -25 - local.set $4 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -1532,6 +1536,9 @@ local.tee $3 local.get $3 f32.mul + local.tee $4 + local.get $4 + f32.mul local.set $2 local.get $3 f32.const 0.5 @@ -1540,12 +1547,9 @@ local.get $0 f32.mul local.tee $3 - local.get $2 + local.get $4 f32.const 0.6666666269302368 local.get $2 - local.get $2 - f32.mul - local.tee $2 f32.const 0.2849878668785095 f32.mul f32.add @@ -1560,7 +1564,7 @@ f32.add f32.add f32.mul - local.get $4 + local.get $5 local.get $1 i32.const 23 i32.shr_s @@ -2831,10 +2835,10 @@ end local.get $0 i32.reinterpret_f32 - local.set $3 + local.set $4 local.get $1 i32.reinterpret_f32 - local.tee $4 + local.tee $3 i32.const 1065353216 i32.eq if @@ -2842,24 +2846,24 @@ call $~lib/math/NativeMathf.atan return end - local.get $4 + local.get $3 i32.const 30 i32.shr_u i32.const 2 i32.and - local.get $3 + local.get $4 i32.const 31 i32.shr_u i32.or local.set $2 - local.get $4 + local.get $3 i32.const 2147483647 i32.and - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.const 2147483647 i32.and - local.tee $3 + local.tee $4 i32.eqz if block $break|0 @@ -2894,10 +2898,10 @@ end end block $folding-inner0 - local.get $4 + local.get $3 i32.eqz br_if $folding-inner0 - local.get $4 + local.get $3 i32.const 2139095040 i32.eq if @@ -2913,7 +2917,7 @@ i32.const 2 i32.and select - local.get $3 + local.get $4 i32.const 2139095040 i32.eq select @@ -2928,20 +2932,20 @@ return end i32.const 1 - local.get $3 + local.get $4 i32.const 2139095040 i32.eq - local.get $4 + local.get $3 i32.const 218103808 i32.add - local.get $3 + local.get $4 i32.lt_u select br_if $folding-inner0 - local.get $3 + local.get $4 i32.const 218103808 i32.add - local.get $4 + local.get $3 i32.lt_u i32.const 0 local.get $2 @@ -3110,20 +3114,20 @@ i64.const -1073741824 i64.and f64.reinterpret_i64 - local.tee $0 - local.get $0 + local.tee $1 + local.get $1 f64.mul f64.div - local.set $1 - local.get $0 - local.get $0 + local.set $0 + local.get $1 local.get $1 local.get $0 + local.get $1 f64.sub f64.const 2 - local.get $0 - f64.mul local.get $1 + f64.mul + local.get $0 f64.add f64.div f64.mul @@ -3281,8 +3285,8 @@ (local $4 i64) (local $5 i64) (local $6 i64) - (local $7 i32) - (local $8 i64) + (local $7 i64) + (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i64) @@ -3294,7 +3298,7 @@ i64.shr_s i64.const 1045 i64.sub - local.tee $2 + local.tee $4 i64.const 6 i64.shr_s i32.wrap_i64 @@ -3302,45 +3306,45 @@ i32.shl i32.const 1064 i32.add - local.tee $7 + local.tee $8 i64.load - local.set $6 - local.get $7 + local.set $5 + local.get $8 i64.load offset=8 - local.set $4 - local.get $7 + local.set $2 + local.get $8 i64.load offset=16 local.set $1 - local.get $2 + local.get $4 i64.const 63 i64.and - local.tee $2 + local.tee $4 i64.const 0 i64.ne if - local.get $6 - local.get $2 - i64.shl + local.get $5 local.get $4 - i64.const 64 + i64.shl local.get $2 + i64.const 64 + local.get $4 i64.sub local.tee $3 i64.shr_u i64.or - local.set $6 - local.get $4 + local.set $5 local.get $2 + local.get $4 i64.shl local.get $1 local.get $3 i64.shr_u i64.or - local.set $4 + local.set $2 local.get $1 - local.get $2 + local.get $4 i64.shl - local.get $7 + local.get $8 i64.load offset=24 local.get $3 i64.shr_u @@ -3352,41 +3356,41 @@ i64.and i64.const 4503599627370496 i64.or - local.tee $2 + local.tee $4 i64.const 4294967295 i64.and local.tee $3 - local.get $4 + local.get $2 i64.const 32 i64.shr_u - local.tee $8 + local.tee $7 i64.mul - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $5 + local.tee $6 local.get $3 i64.mul local.tee $9 i64.const 32 i64.shr_u i64.add - local.set $4 - local.get $5 - local.get $2 + local.set $2 + local.get $6 + local.get $4 i64.const 32 i64.shr_u - local.tee $5 + local.tee $6 i64.mul - local.get $4 + local.get $2 i64.const 4294967295 i64.and i64.add local.set $3 - local.get $5 - local.get $8 + local.get $6 + local.get $7 i64.mul - local.get $4 + local.get $2 i64.const 32 i64.shr_u i64.add @@ -3395,19 +3399,14 @@ i64.shr_u i64.add global.set $~lib/math/res128_hi - global.get $~lib/math/res128_hi - local.get $2 - local.get $6 - i64.mul - i64.add local.get $1 i64.const 32 i64.shr_u - local.get $2 + local.get $4 i64.const 32 i64.shr_s i64.mul - local.tee $4 + local.tee $2 local.get $9 i64.const 4294967295 i64.and @@ -3416,60 +3415,66 @@ i64.shl i64.add i64.add - local.tee $2 - local.get $4 + local.tee $3 + local.get $2 i64.lt_u i64.extend_i32_u + global.get $~lib/math/res128_hi + local.get $4 + local.get $5 + i64.mul i64.add - local.tee $8 + i64.add + local.tee $9 i64.const 2 i64.shl - local.get $2 + local.get $3 i64.const 62 i64.shr_u i64.or - local.tee $6 + local.tee $4 i64.const 63 i64.shr_s local.tee $1 i64.const 1 i64.shr_s - local.get $6 + local.get $4 i64.xor - local.tee $3 + local.tee $5 i64.clz - local.set $4 - local.get $3 - local.get $4 + local.set $2 + local.get $5 + local.get $2 i64.shl local.get $1 - local.get $2 + local.get $3 i64.const 2 i64.shl i64.xor - local.tee $5 + local.tee $10 i64.const 64 - local.get $4 + local.get $2 i64.sub i64.shr_u i64.or - local.tee $2 - i64.const 4294967295 - i64.and - local.set $3 - local.get $2 + local.tee $5 i64.const 32 i64.shr_u - local.tee $9 + local.set $3 + local.get $5 + i64.const 4294967295 + i64.and + local.tee $6 i64.const 560513588 i64.mul - local.get $3 - i64.const 3373259426 - i64.mul + local.set $7 local.get $3 i64.const 560513588 i64.mul - local.tee $10 + local.get $6 + i64.const 3373259426 + i64.mul + local.get $7 i64.const 32 i64.shr_u i64.add @@ -3477,52 +3482,52 @@ i64.const 4294967295 i64.and i64.add - local.set $3 - local.get $9 + local.set $6 + local.get $3 i64.const 3373259426 i64.mul local.get $11 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $6 i64.const 32 i64.shr_u i64.add global.set $~lib/math/res128_hi - local.get $10 + local.get $7 i64.const 4294967295 i64.and - local.get $3 + local.get $6 i64.const 32 i64.shl i64.add local.tee $3 f64.const 3.753184150245214e-04 - local.get $2 + local.get $5 f64.convert_i64_u f64.mul f64.const 3.834951969714103e-04 - local.get $5 - local.get $4 - i64.shl + local.get $10 + local.get $2 + i64.shl f64.convert_i64_u f64.mul f64.add i64.trunc_f64_u - local.tee $2 + local.tee $5 i64.lt_u i64.extend_i32_u global.get $~lib/math/res128_hi - local.tee $5 + local.tee $7 i64.const 11 i64.shr_u i64.add f64.convert_i64_u global.set $~lib/math/rempio2_y0 f64.const 5.421010862427522e-20 - local.get $2 local.get $5 + local.get $7 i64.const 53 i64.shl local.get $3 @@ -3535,12 +3540,12 @@ global.set $~lib/math/rempio2_y1 global.get $~lib/math/rempio2_y0 i64.const 4372995238176751616 - local.get $4 + 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 @@ -3553,7 +3558,7 @@ local.get $12 f64.mul global.set $~lib/math/rempio2_y1 - local.get $8 + local.get $9 i64.const 62 i64.shr_s local.get $1 @@ -3565,70 +3570,72 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i32) + (local $5 f64) (local $6 i32) (local $7 f64) + (local $8 i32) local.get $0 i64.reinterpret_f64 local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $5 + local.tee $6 i32.const 31 i32.shr_u - local.set $6 - local.get $5 + local.set $8 + local.get $6 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1072243195 i32.le_u if - local.get $5 + local.get $6 i32.const 1044816030 i32.lt_u if f64.const 1 return end - f64.const 1 - f64.const 0.5 local.get $0 local.get $0 f64.mul - local.tee $3 - f64.mul local.tee $4 + local.get $4 + f64.mul + local.set $5 + f64.const 1 + f64.const 0.5 + local.get $4 + f64.mul + local.tee $3 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.sub + local.get $4 + local.get $4 f64.const 0.0416666666666666 - local.get $3 + local.get $4 f64.const -0.001388888888887411 - local.get $3 + local.get $4 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $3 - local.get $3 - f64.mul - local.tee $4 - local.get $4 + local.get $5 + local.get $5 f64.mul f64.const -2.7557314351390663e-07 - local.get $3 + local.get $4 f64.const 2.087572321298175e-09 - local.get $3 + local.get $4 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3645,7 +3652,7 @@ f64.add return end - local.get $5 + local.get $6 i32.const 2146435072 i32.ge_u if @@ -3661,28 +3668,28 @@ i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1094263291 i32.lt_u if - local.get $5 + local.get $6 i32.const 20 i32.shr_u - local.tee $6 + local.tee $8 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $3 + local.tee $5 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $3 + local.get $5 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3697,25 +3704,25 @@ i32.const 16 i32.gt_u if - local.get $3 + local.get $5 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $5 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $3 f64.sub f64.sub - local.set $4 - local.get $6 + local.set $3 + local.get $8 local.get $0 - local.get $4 + local.get $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3730,24 +3737,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $3 + local.get $5 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $5 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $3 f64.sub f64.sub - local.set $4 + local.set $3 local.get $0 - local.get $4 + local.get $3 f64.sub else local.get $1 @@ -3759,69 +3766,70 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $3 f64.sub global.set $~lib/math/rempio2_y1 - local.get $3 + local.get $5 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 + local.tee $6 i32.sub - local.get $5 local.get $6 + local.get $8 select end - local.set $6 + local.set $8 global.get $~lib/math/rempio2_y0 - local.set $3 - global.get $~lib/math/rempio2_y1 local.set $4 - local.get $6 + global.get $~lib/math/rempio2_y1 + local.set $5 + local.get $8 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 - local.get $0 - f64.const 0.5 + f64.const 0.00833333333332249 + local.get $4 local.get $4 f64.mul - local.get $1 - f64.const 0.00833333333332249 - local.get $0 + local.tee $3 f64.const -1.984126982985795e-04 - local.get $0 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $0 + local.get $4 + local.get $3 + f64.const 0.5 + local.get $5 + f64.mul + local.get $3 + local.get $4 + f64.mul + local.tee $1 + local.get $0 f64.mul f64.sub f64.mul - local.get $4 + local.get $5 f64.sub local.get $1 f64.const -0.16666666666666632 @@ -3829,43 +3837,44 @@ f64.sub f64.sub else + local.get $4 + local.get $4 + f64.mul + local.tee $7 + local.get $7 + f64.mul + local.set $3 f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $7 f64.mul local.tee $1 f64.sub - local.tee $7 + local.tee $0 f64.const 1 - local.get $7 + local.get $0 f64.sub local.get $1 f64.sub - local.get $0 - local.get $0 + local.get $7 + local.get $7 f64.const 0.0416666666666666 - local.get $0 + local.get $7 f64.const -0.001388888888887411 - local.get $0 + local.get $7 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 + local.get $3 + local.get $3 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $7 f64.const 2.087572321298175e-09 - local.get $0 + local.get $7 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3874,8 +3883,8 @@ f64.mul f64.add f64.mul - local.get $3 local.get $4 + local.get $5 f64.mul f64.sub f64.add @@ -3885,7 +3894,7 @@ local.get $0 f64.neg local.get $0 - local.get $6 + local.get $8 i32.const 1 i32.add i32.const 2 @@ -3915,17 +3924,14 @@ (local $4 f64) (local $5 i64) (local $6 i64) - (local $7 i64) + (local $7 i32) (local $8 i64) - (local $9 i32) - (local $10 i32) - (local $11 i64) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 31 i32.shr_u - local.set $10 + local.set $7 local.get $1 i32.const 2147483647 i32.and @@ -3945,24 +3951,24 @@ local.tee $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4011,32 +4017,51 @@ i32.const 152 i32.sub local.tee $1 + i32.const 63 + i32.and + i64.extend_i32_s + local.set $5 + 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $9 + local.tee $1 i64.load - local.set $6 - local.get $9 - i64.load offset=8 - local.set $7 + local.get $5 + i64.shl local.get $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.tee $5 + i64.load offset=8 + local.tee $6 + i64.const 64 + local.get $5 + i64.sub + i64.shr_u + i64.or + i64.mul + local.get $5 i64.const 32 i64.gt_u if (result i64) - local.get $7 + local.get $6 local.get $5 i64.const 32 i64.sub i64.shl - local.get $9 + local.get $1 i64.load offset=16 i64.const 96 local.get $5 @@ -4044,52 +4069,29 @@ i64.shr_u i64.or else - local.get $7 + local.get $6 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 + local.tee $5 i64.const 2 i64.shl - local.tee $8 + local.tee $6 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $6 + local.get $5 i64.const 62 i64.shr_u - local.get $8 + local.get $6 i64.const 63 i64.shr_u i64.add @@ -4097,7 +4099,7 @@ local.tee $1 i32.sub local.get $1 - local.get $10 + local.get $7 select end local.set $1 @@ -4139,24 +4141,24 @@ local.get $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4184,27 +4186,28 @@ ) (func $~lib/math/NativeMath.expm1 (param $0 f64) (result f64) (local $1 f64) - (local $2 i32) - (local $3 f64) + (local $2 f64) + (local $3 i32) (local $4 f64) - (local $5 f64) - (local $6 i32) + (local $5 i32) + (local $6 f64) (local $7 i32) (local $8 i64) local.get $0 i64.reinterpret_f64 local.tee $8 - i64.const 63 - i64.shr_u - i32.wrap_i64 - local.set $7 - local.get $8 i64.const 32 i64.shr_u i64.const 2147483647 i64.and i32.wrap_i64 - local.tee $6 + local.set $5 + local.get $8 + i64.const 63 + i64.shr_u + i32.wrap_i64 + local.set $7 + local.get $5 i32.const 1078159482 i32.ge_u if @@ -4230,7 +4233,7 @@ return end end - local.get $6 + local.get $5 i32.const 1071001154 i32.gt_u if @@ -4248,18 +4251,18 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $6 + local.get $5 i32.const 1072734898 i32.lt_u select - local.tee $2 + local.tee $3 f64.convert_i32_s local.tee $1 f64.const 0.6931471803691238 f64.mul f64.sub - local.tee $0 - local.get $0 + local.tee $4 + local.get $4 local.get $1 f64.const 1.9082149292705877e-10 f64.mul @@ -4269,9 +4272,9 @@ f64.sub local.get $1 f64.sub - local.set $3 + local.set $4 else - local.get $6 + local.get $5 i32.const 1016070144 i32.lt_u if @@ -4283,27 +4286,27 @@ f64.const 0.5 local.get $0 f64.mul - local.tee $4 + local.tee $2 f64.mul - local.tee $5 - local.get $5 + local.tee $1 + local.get $1 f64.mul - local.set $1 + local.set $6 f64.const 3 f64.const 1 - local.get $5 + local.get $1 f64.const -0.03333333333333313 f64.mul f64.add - local.get $1 + local.get $6 f64.const 1.5873015872548146e-03 - local.get $5 + local.get $1 f64.const -7.93650757867488e-05 f64.mul f64.add - local.get $1 + local.get $6 f64.const 4.008217827329362e-06 - local.get $5 + local.get $1 f64.const -2.0109921818362437e-07 f64.mul f64.add @@ -4311,59 +4314,59 @@ f64.add f64.mul f64.add - local.tee $1 - local.get $4 + local.tee $6 + local.get $2 f64.mul f64.sub - local.set $4 - local.get $5 + local.set $2 local.get $1 - local.get $4 + local.get $6 + local.get $2 f64.sub f64.const 6 local.get $0 - local.get $4 + local.get $2 f64.mul f64.sub f64.div f64.mul - local.set $1 - local.get $2 + local.set $2 + local.get $3 i32.eqz if local.get $0 local.get $0 - local.get $1 + local.get $2 f64.mul - local.get $5 + local.get $1 f64.sub f64.sub return end local.get $0 - local.get $1 - local.get $3 + local.get $2 + local.get $4 f64.sub f64.mul - local.get $3 + local.get $4 f64.sub - local.get $5 + local.get $1 f64.sub - local.set $3 - local.get $2 + local.set $1 + local.get $3 i32.const -1 i32.eq if f64.const 0.5 local.get $0 - local.get $3 + local.get $1 f64.sub f64.mul f64.const 0.5 f64.sub return end - local.get $2 + local.get $3 i32.const 1 i32.eq if @@ -4372,7 +4375,7 @@ f64.lt if f64.const -2 - local.get $3 + local.get $1 local.get $0 f64.const 0.5 f64.add @@ -4383,13 +4386,13 @@ f64.const 1 f64.const 2 local.get $0 - local.get $3 + local.get $1 f64.sub f64.mul f64.add return end - local.get $2 + local.get $3 i64.extend_i32_s i64.const 1023 i64.add @@ -4398,16 +4401,16 @@ f64.reinterpret_i64 local.set $4 i32.const 1 - local.get $2 + local.get $3 i32.const 56 i32.gt_s - local.get $2 + local.get $3 i32.const 0 i32.lt_s select if local.get $0 - local.get $3 + local.get $1 f64.sub f64.const 1 f64.add @@ -4419,7 +4422,7 @@ local.get $0 local.get $4 f64.mul - local.get $2 + local.get $3 i32.const 1024 i32.eq select @@ -4430,22 +4433,22 @@ local.get $0 f64.const 1 i64.const 1023 - local.get $2 + local.get $3 i64.extend_i32_s i64.sub i64.const 52 i64.shl f64.reinterpret_i64 - local.tee $1 + local.tee $2 f64.sub - local.get $3 + local.get $1 f64.sub f64.const 1 - local.get $3 local.get $1 + local.get $2 f64.add f64.sub - local.get $2 + local.get $3 i32.const 20 i32.lt_s select @@ -4455,8 +4458,8 @@ ) (func $~lib/math/NativeMath.exp (param $0 f64) (result f64) (local $1 f64) - (local $2 i32) - (local $3 f64) + (local $2 f64) + (local $3 i32) (local $4 i32) (local $5 f64) (local $6 i32) @@ -4466,14 +4469,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $2 + local.tee $3 i32.const 31 i32.shr_u local.set $6 - local.get $2 + local.get $3 i32.const 2147483647 i32.and - local.tee $2 + local.tee $3 i32.const 1082532651 i32.ge_u if @@ -4501,12 +4504,12 @@ return end end - local.get $2 + local.get $3 i32.const 1071001154 i32.gt_u if local.get $0 - local.get $2 + local.get $3 i32.const 1072734898 i32.ge_u if (result i32) @@ -4539,7 +4542,7 @@ f64.sub local.set $0 else - local.get $2 + local.get $3 i32.const 1043333120 i32.gt_u if (result f64) @@ -4555,25 +4558,25 @@ local.get $0 local.get $0 f64.mul - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul local.set $5 f64.const 1 local.get $0 local.get $0 - local.get $3 + local.get $2 f64.const 0.16666666666666602 f64.mul local.get $5 f64.const -2.7777777777015593e-03 - local.get $3 + local.get $2 f64.const 6.613756321437934e-05 f64.mul f64.add local.get $5 f64.const -1.6533902205465252e-06 - local.get $3 + local.get $2 f64.const 4.1381367970572385e-08 f64.mul f64.add @@ -4582,10 +4585,10 @@ f64.mul f64.add f64.sub - local.tee $0 + local.tee $2 f64.mul f64.const 2 - local.get $0 + local.get $2 f64.sub f64.div local.get $7 @@ -4685,24 +4688,25 @@ (local $1 f32) (local $2 f32) (local $3 i32) - (local $4 i32) - (local $5 f32) + (local $4 f32) + (local $5 i32) (local $6 i32) (local $7 f32) local.get $0 i32.reinterpret_f32 - local.tee $4 + local.tee $6 + i32.const 2147483647 + i32.and + local.set $5 + local.get $6 i32.const 31 i32.shr_u local.set $6 - local.get $4 - i32.const 2147483647 - i32.and - local.tee $4 + local.get $5 i32.const 1100331076 i32.ge_u if - local.get $4 + local.get $5 i32.const 2139095040 i32.gt_u if @@ -4724,7 +4728,7 @@ return end end - local.get $4 + local.get $5 i32.const 1051816472 i32.gt_u if @@ -4742,19 +4746,19 @@ f32.copysign f32.add i32.trunc_f32_s - local.get $4 + local.get $5 i32.const 1065686418 i32.lt_u select local.tee $3 f32.convert_i32_s - local.tee $0 + local.tee $1 f32.const 0.6931381225585938 f32.mul f32.sub - local.tee $1 + local.tee $4 + local.get $4 local.get $1 - local.get $0 f32.const 9.05800061445916e-06 f32.mul local.tee $1 @@ -4763,9 +4767,9 @@ f32.sub local.get $1 f32.sub - local.set $5 + local.set $4 else - local.get $4 + local.get $5 i32.const 855638016 i32.lt_u if @@ -4820,10 +4824,10 @@ end local.get $0 local.get $2 - local.get $5 + local.get $4 f32.sub f32.mul - local.get $5 + local.get $4 f32.sub local.get $1 f32.sub @@ -4873,7 +4877,7 @@ i32.const 23 i32.shl f32.reinterpret_i32 - local.set $5 + local.set $4 i32.const 1 local.get $3 i32.const 56 @@ -4894,7 +4898,7 @@ f32.const 1701411834604692317316873e14 f32.mul local.get $0 - local.get $5 + local.get $4 f32.mul local.get $3 i32.const 128 @@ -4926,7 +4930,7 @@ i32.lt_s select f32.add - local.get $5 + local.get $4 f32.mul ) (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32) @@ -5392,27 +5396,27 @@ ) (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32) (local $1 f64) - (local $2 i32) + (local $2 i64) (local $3 i32) - (local $4 f64) - (local $5 i64) + (local $4 i32) + (local $5 f64) block $~lib/util/math/exp2f_lut|inlined.0 (result f32) local.get $0 f64.promote_f32 local.set $1 local.get $0 i32.reinterpret_f32 - local.tee $2 + local.tee $3 i32.const 20 i32.shr_u i32.const 2047 i32.and - local.tee $3 + local.tee $4 i32.const 1072 i32.ge_u if f32.const 0 - local.get $2 + local.get $3 i32.const -8388608 i32.eq br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5420,7 +5424,7 @@ local.get $0 local.get $0 f32.add - local.get $3 + local.get $4 i32.const 2040 i32.ge_u br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5440,12 +5444,15 @@ br_if $~lib/util/math/exp2f_lut|inlined.0 drop end - f64.const 0.6931471806916203 - local.get $1 local.get $1 f64.const 211106232532992 f64.add - local.tee $4 + local.tee $5 + i64.reinterpret_f64 + local.set $2 + f64.const 0.6931471806916203 + local.get $1 + local.get $5 f64.const 211106232532992 f64.sub f64.sub @@ -5463,9 +5470,7 @@ f64.mul f64.mul f64.add - local.get $4 - i64.reinterpret_f64 - local.tee $5 + local.get $2 i32.wrap_i64 i32.const 31 i32.and @@ -5474,7 +5479,7 @@ i32.const 3336 i32.add i64.load - local.get $5 + local.get $2 i64.const 47 i64.shl i64.add @@ -5518,12 +5523,13 @@ (local $3 i64) (local $4 i64) (local $5 f64) - (local $6 i32) - (local $7 f64) + (local $6 f64) + (local $7 i32) (local $8 f64) (local $9 f64) - (local $10 i32) - (local $11 f64) + (local $10 f64) + (local $11 i32) + (local $12 f64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -5548,7 +5554,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 2047 i32.eq if @@ -5565,7 +5571,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $10 + local.tee $11 i32.const 2047 i32.eq select @@ -5573,8 +5579,8 @@ local.get $0 return end - local.get $10 - local.get $6 + local.get $11 + local.get $7 i32.sub i32.const 64 i32.gt_s @@ -5585,13 +5591,13 @@ return end f64.const 1 - local.set $9 - local.get $10 + local.set $10 + local.get $11 i32.const 1533 i32.gt_s if (result f64) f64.const 5260135901548373507240989e186 - local.set $9 + local.set $10 local.get $1 f64.const 1.90109156629516e-211 f64.mul @@ -5600,12 +5606,12 @@ f64.const 1.90109156629516e-211 f64.mul else - local.get $6 + local.get $7 i32.const 573 i32.lt_s if (result f64) f64.const 1.90109156629516e-211 - local.set $9 + local.set $10 local.get $1 f64.const 5260135901548373507240989e186 f64.mul @@ -5617,69 +5623,69 @@ local.get $0 end end - local.set $0 - local.get $1 - local.get $1 - local.get $1 + local.tee $0 + local.get $0 + local.get $0 f64.const 134217729 f64.mul - local.tee $11 + local.tee $12 f64.sub - local.get $11 + local.get $12 f64.add - local.tee $8 + local.tee $9 f64.sub - local.set $5 - local.get $0 + local.set $6 local.get $0 local.get $0 + f64.mul + local.set $5 + local.get $1 + local.get $1 + local.get $1 f64.const 134217729 f64.mul - local.tee $11 + local.tee $0 f64.sub - local.get $11 + local.get $0 f64.add - local.tee $7 + local.tee $8 f64.sub - local.set $11 - local.get $9 + local.set $12 + local.get $10 local.get $8 local.get $8 f64.mul local.get $1 local.get $1 f64.mul - local.tee $1 + local.tee $0 f64.sub f64.const 2 local.get $8 f64.mul - local.get $5 + local.get $12 f64.add - local.get $5 + local.get $12 f64.mul f64.add - local.get $7 - local.get $7 - f64.mul - local.get $0 - local.get $0 + local.get $9 + local.get $9 f64.mul - local.tee $0 + local.get $5 f64.sub f64.const 2 - local.get $7 + local.get $9 f64.mul - local.get $11 + local.get $6 f64.add - local.get $11 + local.get $6 f64.mul f64.add f64.add - local.get $1 - f64.add local.get $0 f64.add + local.get $5 + f64.add f64.sqrt f64.mul ) @@ -5829,19 +5835,16 @@ ) (func $~lib/math/NativeMath.log10 (param $0 f64) (result f64) (local $1 i32) - (local $2 i64) + (local $2 f64) (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i64) (local $6 f64) (local $7 f64) (local $8 i32) - (local $9 f64) - (local $10 f64) - (local $11 f64) local.get $0 i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5856,7 +5859,7 @@ i32.shr_u end if - local.get $2 + local.get $5 i64.const 1 i64.shl i64.eqz @@ -5885,7 +5888,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5898,7 +5901,7 @@ local.get $0 return else - local.get $2 + local.get $5 i64.const 32 i64.shl i64.eqz @@ -5913,7 +5916,8 @@ end end end - local.get $2 + f64.const 0.5 + local.get $5 i64.const 4294967295 i64.and local.get $1 @@ -5932,64 +5936,43 @@ f64.const 1 f64.sub local.tee $0 + f64.mul + local.get $0 + f64.mul + local.set $3 + local.get $0 f64.const 2 local.get $0 f64.add f64.div + local.tee $6 + local.get $6 + f64.mul local.tee $4 local.get $4 f64.mul - local.set $3 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $9 - f64.const 0.30102999566361177 - f64.mul - local.tee $10 - local.get $0 - f64.const 0.5 + local.set $2 local.get $0 - f64.mul local.get $0 - f64.mul - local.tee $5 + local.get $3 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 - f64.const 0.4342944818781689 - f64.mul - local.tee $11 - f64.add - local.set $7 - local.get $9 - f64.const 3.694239077158931e-13 - f64.mul - local.get $0 - local.get $6 + local.tee $7 f64.sub - local.get $5 + local.get $3 f64.sub - local.get $4 - local.get $5 + local.get $6 local.get $3 + local.get $4 f64.const 0.6666666666666735 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $2 f64.const 0.2857142874366239 - local.get $0 + local.get $2 f64.const 0.1818357216161805 - local.get $0 + local.get $2 f64.const 0.14798198605116586 f64.mul f64.add @@ -5998,11 +5981,11 @@ f64.mul f64.add f64.mul - local.get $0 + local.get $2 f64.const 0.3999999999940942 - local.get $0 + local.get $2 f64.const 0.22222198432149784 - local.get $0 + local.get $2 f64.const 0.15313837699209373 f64.mul f64.add @@ -6013,8 +5996,30 @@ f64.add f64.mul f64.add - local.tee $0 - local.get $6 + local.set $0 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $3 + f64.const 0.30102999566361177 + f64.mul + local.tee $6 + local.get $7 + f64.const 0.4342944818781689 + f64.mul + local.tee $2 + f64.add + local.set $4 + local.get $3 + f64.const 3.694239077158931e-13 + f64.mul + local.get $0 + local.get $7 f64.add f64.const 2.5082946711645275e-11 f64.mul @@ -6023,13 +6028,13 @@ f64.const 0.4342944818781689 f64.mul f64.add - local.get $10 - local.get $7 + local.get $6 + local.get $4 f64.sub - local.get $11 + local.get $2 f64.add f64.add - local.get $7 + local.get $4 f64.add ) (func $std/math/test_log10 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6053,8 +6058,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 i32) - (local $6 f32) + (local $5 f32) + (local $6 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6092,7 +6097,7 @@ return end i32.const -25 - local.set $5 + local.set $6 local.get $0 f32.const 33554432 f32.mul @@ -6131,21 +6136,13 @@ local.get $0 f32.add f32.div - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f32.mul - local.set $2 - local.get $5 - local.get $1 - i32.const 23 - i32.shr_u - i32.const 127 - i32.sub - i32.add - f32.convert_i32_s - local.tee $6 - f32.const 7.903415166765626e-07 + local.tee $4 + local.get $4 f32.mul + local.set $3 local.get $0 local.get $0 f32.const 0.5 @@ -6159,25 +6156,22 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $4 + local.tee $5 f32.sub local.get $0 f32.sub - local.get $3 - local.get $0 local.get $2 + local.get $0 + local.get $4 f32.const 0.6666666269302368 - local.get $2 - local.get $2 - f32.mul - local.tee $0 + local.get $3 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $3 f32.const 0.40000972151756287 - local.get $0 + local.get $3 f32.const 0.24279078841209412 f32.mul f32.add @@ -6186,8 +6180,20 @@ f32.add f32.mul f32.add - local.tee $0 - local.get $4 + local.set $0 + local.get $6 + local.get $1 + i32.const 23 + i32.shr_u + i32.const 127 + i32.sub + i32.add + f32.convert_i32_s + local.tee $2 + f32.const 7.903415166765626e-07 + f32.mul + local.get $0 + local.get $5 f32.add f32.const -3.168997136526741e-05 f32.mul @@ -6196,11 +6202,11 @@ f32.const 0.434326171875 f32.mul f32.add - local.get $4 + local.get $5 f32.const 0.434326171875 f32.mul f32.add - local.get $6 + local.get $2 f32.const 0.3010292053222656 f32.mul f32.add @@ -6237,18 +6243,16 @@ ) (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64) (local $1 i32) - (local $2 i64) + (local $2 f64) (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i64) (local $6 f64) (local $7 f64) (local $8 i32) - (local $9 f64) - (local $10 f64) local.get $0 i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6263,7 +6267,7 @@ i32.shr_u end if - local.get $2 + local.get $5 i64.const 1 i64.shl i64.eqz @@ -6292,7 +6296,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6305,7 +6309,7 @@ local.get $0 return else - local.get $2 + local.get $5 i64.const 32 i64.shl i64.eqz @@ -6320,7 +6324,8 @@ end end end - local.get $2 + f64.const 0.5 + local.get $5 i64.const 4294967295 i64.and local.get $1 @@ -6339,6 +6344,11 @@ f64.const 1 f64.sub local.tee $0 + f64.mul + local.get $0 + f64.mul + local.set $3 + local.get $0 f64.const 2 local.get $0 f64.add @@ -6346,51 +6356,31 @@ local.tee $4 local.get $4 f64.mul - local.set $3 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $9 - local.get $0 - f64.const 0.5 - local.get $0 + local.tee $6 + local.get $6 f64.mul + local.set $2 local.get $0 - f64.mul - local.tee $5 + local.get $0 + local.get $3 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 - f64.const 1.4426950407214463 - f64.mul - local.tee $10 - f64.add - local.set $7 - local.get $0 - local.get $6 + local.tee $7 f64.sub - local.get $5 + local.get $3 f64.sub local.get $4 - local.get $5 local.get $3 + local.get $6 f64.const 0.6666666666666735 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $2 f64.const 0.2857142874366239 - local.get $0 + local.get $2 f64.const 0.1818357216161805 - local.get $0 + local.get $2 f64.const 0.14798198605116586 f64.mul f64.add @@ -6399,11 +6389,11 @@ f64.mul f64.add f64.mul - local.get $0 + local.get $2 f64.const 0.3999999999940942 - local.get $0 + local.get $2 f64.const 0.22222198432149784 - local.get $0 + local.get $2 f64.const 0.15313837699209373 f64.mul f64.add @@ -6414,8 +6404,24 @@ f64.add f64.mul f64.add - local.tee $0 - local.get $6 + local.set $0 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $3 + local.get $7 + f64.const 1.4426950407214463 + f64.mul + local.tee $2 + f64.add + local.set $4 + local.get $0 + local.get $7 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -6423,13 +6429,13 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $9 - local.get $7 + local.get $3 + local.get $4 f64.sub - local.get $10 + local.get $2 f64.add f64.add - local.get $7 + local.get $4 f64.add ) (func $std/math/test_log2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6453,7 +6459,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 i32) + (local $5 f32) + (local $6 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6491,7 +6498,7 @@ return end i32.const -25 - local.set $5 + local.set $6 local.get $0 f32.const 33554432 f32.mul @@ -6533,6 +6540,9 @@ local.tee $3 local.get $3 f32.mul + local.tee $4 + local.get $4 + f32.mul local.set $2 local.get $0 local.get $0 @@ -6547,25 +6557,22 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $4 + local.tee $5 f32.sub local.get $0 f32.sub local.get $3 local.get $0 - local.get $2 + local.get $4 f32.const 0.6666666269302368 local.get $2 - local.get $2 - f32.mul - local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $2 f32.const 0.40000972151756287 - local.get $0 + local.get $2 f32.const 0.24279078841209412 f32.mul f32.add @@ -6575,7 +6582,7 @@ f32.mul f32.add local.tee $0 - local.get $4 + local.get $5 f32.add f32.const -1.7605285393074155e-04 f32.mul @@ -6583,11 +6590,11 @@ f32.const 1.44287109375 f32.mul f32.add - local.get $4 + local.get $5 f32.const 1.44287109375 f32.mul f32.add - local.get $5 + local.get $6 local.get $1 i32.const 23 i32.shr_u @@ -6804,6 +6811,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i64.ge_u @@ -6818,39 +6826,36 @@ local.set $2 end local.get $2 - local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 + i64.sub + local.set $4 + local.get $7 + i64.const 63 i64.shl - local.set $2 - local.get $4 + local.get $2 local.get $3 + i64.shl + local.tee $2 + i64.const 4503599627370496 i64.sub - local.tee $4 + local.get $4 + i64.const 52 + i64.shl + i64.or + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + local.get $4 i64.const 0 i64.gt_s - if (result i64) - local.get $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - else - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shr_u - end - local.get $7 - i64.const 63 - i64.shl + select i64.or f64.reinterpret_i64 return @@ -7018,6 +7023,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i32.ge_u @@ -7032,34 +7038,31 @@ local.set $2 end local.get $2 - local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 + i32.sub + local.set $4 + local.get $2 + local.get $3 i32.shl - local.set $2 + local.tee $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + local.get $2 + i32.const 1 local.get $4 - local.get $3 i32.sub - local.tee $4 + i32.shr_u + local.get $4 i32.const 0 i32.gt_s - if (result i32) - local.get $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 - i32.shl - i32.or - else - local.get $2 - i32.const 1 - local.get $4 - i32.sub - i32.shr_u - end + select local.get $7 i32.or f32.reinterpret_i32 @@ -7079,23 +7082,22 @@ ) (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64) (local $2 f64) - (local $3 f64) + (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 f64) + (local $6 f64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 f64) - (local $11 i32) + (local $11 f64) (local $12 i32) (local $13 f64) - (local $14 i64) - (local $15 f64) + (local $14 f64) + (local $15 i64) (local $16 i32) (local $17 f64) (local $18 i32) - (local $19 f64) local.get $1 f64.abs f64.const 2 @@ -7150,30 +7152,31 @@ end local.get $0 i64.reinterpret_f64 - local.tee $14 - i32.wrap_i64 - local.set $18 - local.get $14 + local.tee $15 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $16 + local.set $16 + local.get $15 + i32.wrap_i64 + local.set $5 + local.get $16 i32.const 2147483647 i32.and local.set $4 local.get $1 i64.reinterpret_f64 - local.tee $14 + local.tee $15 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $8 + local.tee $7 i32.const 2147483647 i32.and - local.tee $9 - local.get $14 + local.tee $8 + local.get $15 i32.wrap_i64 - local.tee $6 + local.tee $18 i32.or i32.eqz if @@ -7181,18 +7184,18 @@ return end i32.const 1 - local.get $6 + local.get $18 i32.const 0 - local.get $9 + local.get $8 i32.const 2146435072 i32.eq select i32.const 1 - local.get $9 + local.get $8 i32.const 2146435072 i32.gt_s i32.const 1 - local.get $18 + local.get $5 i32.const 0 local.get $4 i32.const 2146435072 @@ -7214,47 +7217,47 @@ i32.const 0 i32.lt_s if (result i32) - local.get $9 + local.get $8 i32.const 1128267776 i32.ge_s if (result i32) i32.const 2 else - local.get $9 + local.get $8 i32.const 1072693248 i32.ge_s if (result i32) i32.const 52 i32.const 20 - local.get $9 + local.get $8 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $11 + local.tee $12 i32.const 20 i32.gt_s - local.tee $5 + local.tee $3 select - local.get $11 + local.get $12 i32.sub - local.set $12 + local.set $9 i32.const 2 - local.get $6 - local.get $9 - local.get $5 + local.get $18 + local.get $8 + local.get $3 select - local.tee $5 - local.get $12 + local.tee $12 + local.get $9 i32.shr_u - local.tee $11 + local.tee $3 i32.const 1 i32.and i32.sub i32.const 0 - local.get $5 - local.get $11 local.get $12 + local.get $3 + local.get $9 i32.shl i32.eq select @@ -7265,15 +7268,15 @@ else i32.const 0 end - local.set $5 - local.get $6 + local.set $3 + local.get $18 i32.eqz if - local.get $9 + local.get $8 i32.const 2146435072 i32.eq if - local.get $18 + local.get $5 local.get $4 i32.const 1072693248 i32.sub @@ -7285,7 +7288,7 @@ if f64.const 0 local.get $1 - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7294,7 +7297,7 @@ f64.const 0 local.get $1 f64.neg - local.get $8 + local.get $7 i32.const 0 i32.ge_s select @@ -7307,11 +7310,11 @@ end unreachable end - local.get $9 + local.get $8 i32.const 1072693248 i32.eq if - local.get $8 + local.get $7 i32.const 0 i32.ge_s if @@ -7323,7 +7326,7 @@ f64.div return end - local.get $8 + local.get $7 i32.const 1073741824 i32.eq if @@ -7332,7 +7335,7 @@ f64.mul return end - local.get $8 + local.get $7 i32.const 1071644672 i32.eq if @@ -7348,8 +7351,8 @@ end local.get $0 f64.abs - local.set $3 - local.get $18 + local.set $2 + local.get $5 i32.eqz if i32.const 1 @@ -7365,41 +7368,41 @@ select if f64.const 1 - local.get $3 + local.get $2 f64.div - local.get $3 - local.get $8 + local.get $2 + local.get $7 i32.const 0 i32.lt_s select - local.set $3 + local.set $2 local.get $16 i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $3 local.get $4 i32.const 1072693248 i32.sub i32.or if (result f64) - local.get $3 + local.get $2 f64.neg + local.get $2 local.get $3 - local.get $5 i32.const 1 i32.eq select else - local.get $3 - local.get $3 + local.get $2 + local.get $2 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $3 + local.get $2 end return end @@ -7408,7 +7411,7 @@ i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $3 i32.eqz if local.get $0 @@ -7421,7 +7424,7 @@ end f64.const -1 f64.const 1 - local.get $5 + local.get $3 i32.const 1 i32.eq select @@ -7429,11 +7432,11 @@ f64.const 1 end local.set $10 - local.get $9 + local.get $8 i32.const 1105199104 i32.gt_s if (result f64) - local.get $9 + local.get $8 i32.const 1139802112 i32.gt_s if @@ -7443,7 +7446,7 @@ if f64.const inf f64.const 0 - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7455,7 +7458,7 @@ if f64.const inf f64.const 0 - local.get $8 + local.get $7 i32.const 0 i32.gt_s select @@ -7476,7 +7479,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7496,19 +7499,19 @@ f64.mul f64.const 1e-300 f64.mul - local.get $8 + local.get $7 i32.const 0 i32.gt_s select return end f64.const 1.4426950216293335 - local.get $3 + local.get $2 f64.const 1 f64.sub local.tee $0 f64.mul - local.tee $3 + local.tee $2 local.get $0 f64.const 1.9259629911266175e-08 f64.mul @@ -7534,10 +7537,10 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $7 + local.set $11 local.get $0 - local.get $7 - local.get $3 + local.get $11 + local.get $2 f64.sub f64.sub else @@ -7545,10 +7548,10 @@ i32.const 1048576 i32.lt_s if (result i32) - local.get $3 + local.get $2 f64.const 9007199254740992 f64.mul - local.tee $3 + local.tee $2 i64.reinterpret_f64 i64.const 32 i64.shr_u @@ -7564,30 +7567,30 @@ i32.const 1023 i32.sub i32.add - local.set $6 + local.set $5 local.get $4 i32.const 1048575 i32.and - local.tee $5 + local.tee $3 i32.const 1072693248 i32.or local.set $4 - local.get $5 + local.get $3 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $5 + local.get $3 i32.const 767610 i32.lt_s if (result i32) i32.const 1 else - local.get $6 + local.get $5 i32.const 1 i32.add - local.set $6 + local.set $5 local.get $4 i32.const -1048576 i32.add @@ -7595,9 +7598,8 @@ i32.const 0 end end - local.set $5 - f64.const 0.9617967009544373 - local.get $3 + local.set $3 + local.get $2 i64.reinterpret_f64 i64.const 4294967295 i64.and @@ -7607,64 +7609,30 @@ i64.shl i64.or f64.reinterpret_i64 - local.tee $7 + local.tee $11 f64.const 1.5 f64.const 1 - local.get $5 + local.get $3 select - local.tee $2 + local.tee $13 f64.sub - local.tee $3 + local.tee $6 f64.const 1 - local.get $7 - local.get $2 + local.get $11 + local.get $13 f64.add f64.div - local.tee $0 + local.tee $2 f64.mul local.tee $17 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $15 - f64.const 3 - local.get $15 - local.get $15 - f64.mul - local.tee $19 - f64.add - local.get $17 - local.get $17 - f64.mul - local.tee $13 - local.get $13 - f64.mul - f64.const 0.5999999999999946 - local.get $13 - f64.const 0.4285714285785502 - local.get $13 - f64.const 0.33333332981837743 - local.get $13 - f64.const 0.272728123808534 - local.get $13 - f64.const 0.23066074577556175 - local.get $13 - f64.const 0.20697501780033842 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $0 - local.get $3 - local.get $15 + local.set $14 + local.get $2 + local.get $6 + local.get $14 local.get $4 i32.const 1 i32.shr_s @@ -7672,7 +7640,7 @@ i32.or i32.const 524288 i32.add - local.get $5 + local.get $3 i32.const 18 i32.shl i32.add @@ -7683,38 +7651,76 @@ local.tee $0 f64.mul f64.sub - local.get $15 - local.get $7 + local.get $14 + local.get $11 local.get $0 - local.get $2 + local.get $13 f64.sub f64.sub f64.mul f64.sub f64.mul - local.tee $2 - local.get $15 + local.set $13 + local.get $17 + local.get $17 + f64.mul + local.tee $0 + local.get $0 + f64.mul + f64.const 0.5999999999999946 + local.get $0 + f64.const 0.4285714285785502 + local.get $0 + f64.const 0.33333332981837743 + local.get $0 + f64.const 0.272728123808534 + local.get $0 + f64.const 0.23066074577556175 + local.get $0 + f64.const 0.20697501780033842 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $13 + local.get $14 local.get $17 f64.add f64.mul f64.add + local.set $6 + f64.const 0.9617967009544373 + local.get $14 + f64.const 3 + local.get $14 + local.get $14 + f64.mul local.tee $0 f64.add + local.get $6 + f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $11 f64.mul - local.tee $3 - local.get $2 - local.get $7 + local.tee $2 + local.get $13 + local.get $11 f64.mul - local.get $0 - local.get $7 + local.get $6 + local.get $11 f64.const 3 f64.sub - local.get $19 + local.get $0 f64.sub f64.sub local.get $17 @@ -7726,15 +7732,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $2 + local.tee $6 f64.mul - local.tee $19 + local.set $13 f64.const -7.028461650952758e-09 - local.get $2 + local.get $6 f64.mul local.get $0 + local.get $6 local.get $2 - local.get $3 f64.sub f64.sub f64.const 0.9617966939259756 @@ -7742,37 +7748,37 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $5 + local.get $3 select f64.add - local.tee $2 + local.tee $6 + local.get $13 + local.get $6 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $5 + local.get $3 select - local.tee $3 + local.tee $0 f64.add - local.get $6 + local.get $5 f64.convert_i32_s - local.tee $0 + local.tee $2 f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $7 + local.tee $11 local.get $2 - local.get $7 - local.get $0 f64.sub - local.get $3 + local.get $0 f64.sub - local.get $19 + local.get $13 f64.sub f64.sub end - local.set $3 + local.set $2 local.get $1 local.get $1 i64.reinterpret_f64 @@ -7781,134 +7787,133 @@ f64.reinterpret_i64 local.tee $0 f64.sub - local.get $7 + local.get $11 f64.mul local.get $1 - local.get $3 + local.get $2 f64.mul f64.add - local.tee $1 + local.tee $2 local.get $0 - local.get $7 + local.get $11 f64.mul - local.tee $2 + local.tee $6 f64.add local.tee $0 i64.reinterpret_f64 - local.tee $14 + local.tee $15 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.set $9 + local.get $15 i32.wrap_i64 - local.set $5 + local.set $3 block $folding-inner1 block $folding-inner0 - local.get $14 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $12 + local.get $9 i32.const 1083179008 i32.ge_s if - local.get $5 - local.get $12 + local.get $3 + local.get $9 i32.const 1083179008 i32.sub i32.or - local.get $1 + local.get $2 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $2 + local.get $6 f64.sub f64.gt i32.or br_if $folding-inner0 else - local.get $12 + local.get $9 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $5 - local.get $12 + local.get $3 + local.get $9 i32.const -1064252416 i32.sub i32.or - local.get $1 - local.get $0 local.get $2 + local.get $0 + local.get $6 f64.sub f64.le i32.or select br_if $folding-inner1 end - local.get $12 + local.get $9 i32.const 2147483647 i32.and - local.tee $11 + local.tee $12 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.set $5 - i32.const 0 - local.set $6 - local.get $1 - local.get $11 + local.set $3 + local.get $12 i32.const 1071644672 i32.gt_s - if + if (result i32) + local.get $6 i32.const 1048575 - local.get $12 + local.get $9 i32.const 1048576 - local.get $5 + local.get $3 i32.const 1 i32.add i32.shr_s i32.add - local.tee $11 + local.tee $12 i32.const 2147483647 i32.and i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $5 + local.tee $3 i32.shr_s i32.const -1 i32.xor - local.get $11 + local.get $12 i32.and i64.extend_i32_s i64.const 32 i64.shl f64.reinterpret_i64 - local.set $0 + f64.sub + local.set $6 i32.const 0 - local.get $11 + local.get $12 i32.const 1048575 i32.and i32.const 1048576 i32.or i32.const 20 - local.get $5 + local.get $3 i32.sub i32.shr_s - local.tee $6 + local.tee $5 i32.sub - local.get $6 - local.get $12 + local.get $5 + local.get $9 i32.const 0 i32.lt_s select - local.set $6 - local.get $2 - local.get $0 - f64.sub - local.set $2 + else + i32.const 0 end + local.set $5 local.get $2 + local.get $6 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -7917,10 +7922,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $3 - local.get $1 - local.get $0 + local.tee $1 local.get $2 + local.get $0 + local.get $6 f64.sub f64.sub f64.const 0.6931471805599453 @@ -7929,17 +7934,23 @@ f64.const -1.904654299957768e-09 f64.mul f64.add - local.tee $1 + local.tee $0 f64.add - local.tee $2 + local.set $2 + local.get $0 local.get $2 - f64.mul - local.set $0 + local.get $1 + f64.sub + f64.sub + local.set $1 local.get $10 f64.const 1 local.get $2 local.get $2 - local.get $0 + local.get $2 + local.get $2 + f64.mul + local.tee $0 f64.const 0.16666666666666602 local.get $0 f64.const -2.7777777777015593e-03 @@ -7967,12 +7978,7 @@ f64.div local.get $1 local.get $2 - local.get $3 - f64.sub - f64.sub - local.tee $0 - local.get $2 - local.get $0 + local.get $1 f64.mul f64.add f64.sub @@ -7984,25 +7990,25 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.get $6 + local.get $5 i32.const 20 i32.shl i32.add - local.tee $5 + local.tee $3 i32.const 20 i32.shr_s i32.const 0 i32.le_s if (result f64) local.get $0 - local.get $6 + local.get $5 call $~lib/math/NativeMath.scalbn else local.get $0 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $5 + local.get $3 i64.extend_i32_s i64.const 32 i64.shl @@ -8127,24 +8133,23 @@ local.get $0 i32.reinterpret_f32 local.tee $4 - i32.const 2147483647 - i32.and - local.set $6 - local.get $4 i32.const 31 i32.shr_u - local.tee $4 - if (result i32) - local.get $1 - f32.nearest - local.get $1 - f32.eq - else - i32.const 0 - end + local.set $5 + local.get $4 + i32.const 2147483647 + i32.and + local.set $4 + local.get $1 + f32.nearest + local.get $1 + f32.eq + i32.const 0 + local.get $5 + select if i32.const 0 - local.set $4 + local.set $5 local.get $1 f32.const 0.5 f32.mul @@ -8161,15 +8166,15 @@ end local.get $1 i32.reinterpret_f32 - local.set $5 - local.get $6 + local.set $6 + local.get $4 i32.const 1065353216 i32.eq if (result i32) i32.const 2143289344 i32.const 1065353216 - local.get $4 local.get $5 + local.get $6 i32.const 2147483647 i32.and i32.const 2139095040 @@ -8177,20 +8182,20 @@ i32.or select else - local.get $6 + local.get $4 if (result i32) - local.get $6 + local.get $4 i32.const 2139095040 i32.eq if (result i32) i32.const 0 i32.const 2139095040 - local.get $5 + local.get $6 i32.const 31 i32.shr_u select else - local.get $4 + local.get $5 if (result i32) i32.const 2143289344 else @@ -8313,7 +8318,7 @@ else i32.const 2139095040 i32.const 0 - local.get $5 + local.get $6 i32.const 31 i32.shr_u select @@ -9000,8 +9005,9 @@ (local $3 f64) (local $4 f64) (local $5 i32) - (local $6 i32) + (local $6 f64) (local $7 f64) + (local $8 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -9011,7 +9017,7 @@ local.tee $5 i32.const 31 i32.shr_u - local.set $6 + local.set $8 local.get $5 i32.const 2147483647 i32.and @@ -9026,36 +9032,38 @@ local.get $0 return end + f64.const 0.00833333333332249 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 + local.tee $4 f64.const -1.984126982985795e-04 - local.get $3 + local.get $4 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $3 - local.get $3 + local.get $4 + local.get $4 + local.get $4 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $4 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $3 + local.get $0 + local.get $4 + local.get $0 + f64.mul + f64.const -0.16666666666666632 + local.get $4 + local.get $3 f64.mul f64.add f64.mul @@ -9085,21 +9093,21 @@ local.get $5 i32.const 20 i32.shr_u - local.tee $6 + local.tee $8 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $3 + local.tee $4 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $3 + local.get $4 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9114,25 +9122,25 @@ i32.const 16 i32.gt_u if - local.get $3 + local.get $4 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $4 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $3 f64.sub f64.sub - local.set $4 - local.get $6 + local.set $3 + local.get $8 local.get $0 - local.get $4 + local.get $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9147,24 +9155,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $3 + local.get $4 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $4 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $3 f64.sub f64.sub - local.set $4 + local.set $3 local.get $0 - local.get $4 + local.get $3 f64.sub else local.get $1 @@ -9176,10 +9184,10 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $3 f64.sub global.set $~lib/math/rempio2_y1 - local.get $3 + local.get $4 i32.trunc_f64_s br $~lib/math/rempio2|inlined.1 end @@ -9189,55 +9197,56 @@ local.tee $5 i32.sub local.get $5 - local.get $6 + local.get $8 select end - local.set $6 + local.set $8 global.get $~lib/math/rempio2_y0 - local.set $3 + local.set $7 global.get $~lib/math/rempio2_y1 local.set $4 - local.get $6 + local.get $8 i32.const 1 i32.and if (result f64) + local.get $7 + local.get $7 + f64.mul + local.tee $6 + local.get $6 + f64.mul + local.set $3 f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $6 f64.mul local.tee $1 f64.sub - local.tee $7 + local.tee $0 f64.const 1 - local.get $7 + local.get $0 f64.sub local.get $1 f64.sub - local.get $0 - local.get $0 + local.get $6 + local.get $6 f64.const 0.0416666666666666 - local.get $0 + local.get $6 f64.const -0.001388888888887411 - local.get $0 + local.get $6 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 + local.get $3 + local.get $3 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $6 f64.const 2.087572321298175e-09 - local.get $0 + local.get $6 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -9246,47 +9255,48 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $7 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 + local.get $7 + local.get $7 + f64.mul + local.tee $3 f64.const -1.984126982985795e-04 - local.get $0 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $0 + local.get $7 + local.get $3 + f64.const 0.5 + local.get $4 + f64.mul + local.get $3 + local.get $7 + f64.mul + local.tee $1 + local.get $0 f64.mul f64.sub f64.mul @@ -9302,7 +9312,7 @@ local.get $0 f64.neg local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.and select @@ -9331,17 +9341,14 @@ (local $5 i64) (local $6 f64) (local $7 i64) - (local $8 i64) + (local $8 i32) (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.set $8 local.get $1 i32.const 2147483647 i32.and @@ -9361,26 +9368,26 @@ local.tee $4 local.get $4 f64.mul - local.tee $6 + local.tee $3 local.get $4 f64.mul - local.set $3 + local.set $6 local.get $4 - local.get $3 - f64.const -0.16666666641626524 local.get $6 + f64.const -0.16666666641626524 + local.get $3 f64.const 0.008333329385889463 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $6 local.get $6 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -1.9839334836096632e-04 - local.get $6 + local.get $3 f64.const 2.718311493989822e-06 f64.mul f64.add @@ -9429,32 +9436,51 @@ i32.const 152 i32.sub local.tee $1 + i32.const 63 + i32.and + i64.extend_i32_s + local.set $5 + 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $10 + local.tee $1 i64.load - local.set $7 - local.get $10 - i64.load offset=8 - local.set $8 + local.get $5 + i64.shl local.get $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.tee $5 + i64.load offset=8 + local.tee $7 + i64.const 64 + local.get $5 + i64.sub + i64.shr_u + i64.or + i64.mul + local.get $5 i64.const 32 i64.gt_u if (result i64) - local.get $8 + local.get $7 local.get $5 i64.const 32 i64.sub i64.shl - local.get $10 + local.get $1 i64.load offset=16 i64.const 96 local.get $5 @@ -9462,52 +9488,29 @@ i64.shr_u i64.or else - local.get $8 + local.get $7 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 + local.tee $5 i64.const 2 i64.shl - local.tee $9 + local.tee $7 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $7 + local.get $5 i64.const 62 i64.shr_u - local.get $9 + local.get $7 i64.const 63 i64.shr_u i64.add @@ -9515,7 +9518,7 @@ local.tee $1 i32.sub local.get $1 - local.get $11 + local.get $8 select end local.set $1 @@ -9528,24 +9531,24 @@ local.get $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -9560,7 +9563,7 @@ local.tee $4 local.get $3 f64.mul - local.tee $3 + local.tee $6 f64.const -0.16666666641626524 local.get $4 f64.const 0.008333329385889463 @@ -9568,7 +9571,7 @@ f64.add f64.mul f64.add - local.get $3 + local.get $6 local.get $4 local.get $4 f64.mul @@ -9837,18 +9840,18 @@ local.get $0 f64.mul local.tee $4 - local.get $0 + local.get $4 f64.mul - local.set $5 + local.set $3 local.get $0 local.get $1 local.get $4 - local.get $5 - f64.const 0.13333333333320124 - local.get $4 local.get $4 + local.get $0 f64.mul - local.tee $3 + local.tee $5 + f64.const 0.13333333333320124 + local.get $3 f64.const 0.021869488294859542 local.get $3 f64.const 3.5920791075913124e-03 @@ -9941,29 +9944,30 @@ local.get $1 return end - f64.const -1 local.get $1 - f64.div - local.tee $5 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $4 - local.get $5 - f64.const 1 - local.get $4 + local.set $4 + f64.const -1 local.get $1 + f64.div + local.tee $5 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 local.tee $1 + local.get $5 + f64.const 1 + local.get $1 + local.get $4 f64.mul f64.add - local.get $4 - local.get $3 local.get $1 + local.get $3 + local.get $4 local.get $0 f64.sub f64.sub @@ -10172,20 +10176,17 @@ (local $2 i32) (local $3 i32) (local $4 f64) - (local $5 f64) - (local $6 i64) + (local $5 i64) + (local $6 f64) (local $7 i64) - (local $8 i64) + (local $8 i32) (local $9 i64) - (local $10 i32) - (local $11 i32) - (local $12 i64) local.get $0 i32.reinterpret_f32 local.tee $2 i32.const 31 i32.shr_u - local.set $11 + local.set $8 local.get $2 i32.const 2147483647 i32.and @@ -10202,36 +10203,36 @@ end local.get $0 f64.promote_f32 - local.tee $5 - local.get $5 - f64.mul local.tee $4 - local.get $5 + local.get $4 f64.mul - local.set $1 - local.get $5 + local.tee $1 local.get $1 - f64.const 0.3333313950307914 + f64.mul + local.set $6 local.get $4 + local.get $1 + local.get $4 + f64.mul + local.tee $4 + f64.const 0.3333313950307914 + local.get $1 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add - local.get $1 - local.get $4 local.get $4 - f64.mul - local.tee $1 + local.get $6 f64.mul f64.const 0.05338123784456704 - local.get $4 + local.get $1 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $6 f64.const 0.002974357433599673 - local.get $4 + local.get $1 f64.const 0.009465647849436732 f64.mul f64.add @@ -10281,47 +10282,11 @@ i32.shr_s i32.const 152 i32.sub - local.tee $2 - 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 $2 - 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 + local.tee $2 + i32.const 63 + i32.and + i64.extend_i32_s + local.set $5 f64.const 8.515303950216386e-20 local.get $0 f64.promote_f32 @@ -10333,34 +10298,66 @@ i32.or i64.extend_i32_s local.tee $9 - local.get $7 - local.get $6 + local.get $2 + i32.const 6 + i32.shr_s + i32.const 3 + i32.shl + i32.const 1256 + i32.add + local.tee $2 + i64.load + local.get $5 i64.shl - local.get $8 + local.get $2 + i64.load offset=8 + local.tee $7 i64.const 64 - local.get $6 + local.get $5 i64.sub i64.shr_u i64.or i64.mul + local.get $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 $2 + 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.get $9 - local.get $12 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $7 + local.tee $5 i64.const 2 i64.shl - local.tee $9 + local.tee $7 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $7 + local.get $5 i64.const 62 i64.shr_u - local.get $9 + local.get $7 i64.const 63 i64.shr_u i64.add @@ -10368,41 +10365,41 @@ local.tee $2 i32.sub local.get $2 - local.get $11 + local.get $8 select end local.set $2 global.get $~lib/math/rempio2f_y - local.tee $5 - local.get $5 - f64.mul local.tee $4 - local.get $5 + local.get $4 f64.mul - local.set $1 - local.get $5 + local.tee $1 + local.get $1 + f64.mul + local.set $6 + local.get $4 local.get $1 - f64.const 0.3333313950307914 local.get $4 + f64.mul + local.tee $4 + f64.const 0.3333313950307914 + local.get $1 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add - local.get $1 local.get $4 - local.get $4 - f64.mul - local.tee $1 + local.get $6 f64.mul f64.const 0.05338123784456704 - local.get $4 + local.get $1 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $6 f64.const 0.002974357433599673 - local.get $4 + local.get $1 f64.const 0.009465647849436732 f64.mul f64.add @@ -10622,8 +10619,8 @@ (func $~lib/math/NativeMath.sincos (param $0 f64) (local $1 f64) (local $2 f64) - (local $3 i64) - (local $4 f64) + (local $3 f64) + (local $4 i64) (local $5 i32) (local $6 i32) (local $7 f64) @@ -10631,7 +10628,7 @@ (local $9 f64) local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $4 i64.const 32 i64.shr_u i32.wrap_i64 @@ -10656,62 +10653,68 @@ global.set $~lib/math/NativeMath.sincos_cos return end + f64.const 0.00833333333332249 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 + local.tee $3 f64.const -1.984126982985795e-04 - local.get $2 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $2 - local.get $2 - local.get $2 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $2 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $2 + local.get $0 + local.get $3 + local.get $0 + f64.mul + f64.const -0.16666666666666632 + local.get $3 + local.get $2 f64.mul f64.add f64.mul f64.add 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 + local.tee $3 + local.get $3 + f64.mul + local.set $2 + f64.const 1 + f64.const 0.5 + local.get $3 f64.mul - local.tee $4 - f64.sub local.tee $1 + f64.sub + local.tee $7 f64.const 1 - local.get $1 + local.get $7 f64.sub - local.get $4 + local.get $1 f64.sub - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.const 0.0416666666666666 - local.get $2 + local.get $3 f64.const -0.001388888888887411 - local.get $2 + local.get $3 f64.const 2.480158728947673e-05 f64.mul f64.add @@ -10721,13 +10724,10 @@ local.get $2 local.get $2 f64.mul - local.tee $4 - local.get $4 - f64.mul f64.const -2.7557314351390663e-07 - local.get $2 + local.get $3 f64.const 2.087572321298175e-09 - local.get $2 + local.get $3 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10759,7 +10759,7 @@ return end block $~lib/math/rempio2|inlined.3 (result i32) - local.get $3 + local.get $4 i64.const 32 i64.shr_u i32.wrap_i64 @@ -10786,7 +10786,7 @@ local.get $2 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10809,17 +10809,17 @@ local.get $2 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $1 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $1 f64.sub f64.sub - local.set $4 + local.set $3 local.get $6 local.get $0 - local.get $4 + local.get $3 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10842,16 +10842,16 @@ local.get $2 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $1 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $1 f64.sub f64.sub - local.set $4 + local.set $3 local.get $0 - local.get $4 + local.get $3 f64.sub else local.get $1 @@ -10863,7 +10863,7 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $3 f64.sub global.set $~lib/math/rempio2_y1 local.get $2 @@ -10871,7 +10871,7 @@ br $~lib/math/rempio2|inlined.3 end i32.const 0 - local.get $3 + local.get $4 call $~lib/math/pio2_large_quot local.tee $5 i32.sub @@ -10880,23 +10880,12 @@ select end local.set $6 + f64.const 0.00833333333332249 global.get $~lib/math/rempio2_y0 - local.tee $4 - local.get $4 + local.tee $2 + local.get $2 f64.mul local.tee $0 - local.get $4 - f64.mul - local.set $2 - local.get $4 - local.get $0 - f64.const 0.5 - global.get $~lib/math/rempio2_y1 - 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 @@ -10916,55 +10905,66 @@ f64.add f64.mul f64.add + local.set $7 + local.get $2 + local.get $0 + f64.const 0.5 + global.get $~lib/math/rempio2_y1 + local.tee $1 + f64.mul + local.get $0 + local.get $2 + f64.mul + local.tee $3 + local.get $7 f64.mul f64.sub f64.mul local.get $1 f64.sub - local.get $2 + local.get $3 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub - local.tee $8 - local.set $0 + local.get $2 + local.get $2 + f64.mul + local.tee $0 + local.get $0 + f64.mul + local.set $7 f64.const 1 f64.const 0.5 - local.get $4 - local.get $4 - f64.mul - local.tee $2 + local.get $0 f64.mul - local.tee $7 + local.tee $8 f64.sub local.tee $9 f64.const 1 local.get $9 f64.sub - local.get $7 + local.get $8 f64.sub - local.get $2 - local.get $2 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $2 + local.get $0 f64.const -0.001388888888887411 - local.get $2 + local.get $0 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 local.get $7 f64.mul f64.const -2.7557314351390663e-07 - local.get $2 + local.get $0 f64.const 2.087572321298175e-09 - local.get $2 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10973,21 +10973,23 @@ f64.mul f64.add f64.mul - local.get $4 + local.get $2 local.get $1 f64.mul f64.sub f64.add f64.add - local.tee $2 - local.set $4 + local.set $2 + local.set $0 + local.get $2 + local.set $1 local.get $6 i32.const 1 i32.and if - local.get $8 + local.get $0 f64.neg - local.set $4 + local.set $1 local.get $2 local.set $0 end @@ -10995,16 +10997,16 @@ i32.const 2 i32.and if (result f64) - local.get $4 + local.get $1 f64.neg - local.set $4 + local.set $1 local.get $0 f64.neg else local.get $0 end global.set $~lib/math/NativeMath.sincos_sin - local.get $4 + local.get $1 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) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 1ab531e51f..a6227fce6e 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -161,6 +161,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i64.ge_u @@ -175,39 +176,36 @@ local.set $2 end local.get $2 - local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 + i64.sub + local.set $4 + local.get $7 + i64.const 63 i64.shl - local.set $2 - local.get $4 + local.get $2 local.get $3 + i64.shl + local.tee $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + local.get $2 + i64.const 0 + local.get $4 i64.sub - local.tee $4 + i64.const 1 + i64.add + i64.shr_u + local.get $4 i64.const 0 i64.gt_s - if (result i64) - local.get $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - else - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shr_u - end - local.get $7 - i64.const 63 - i64.shl + select i64.or f64.reinterpret_i64 return @@ -400,6 +398,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i32.ge_u @@ -414,34 +413,31 @@ local.set $2 end local.get $2 - local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 + i32.sub + local.set $4 + local.get $2 + local.get $3 i32.shl - local.set $2 + local.tee $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + local.get $2 + i32.const 1 local.get $4 - local.get $3 i32.sub - local.tee $4 + i32.shr_u + local.get $4 i32.const 0 i32.gt_s - if (result i32) - local.get $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 - i32.shl - i32.or - else - local.get $2 - i32.const 1 - local.get $4 - i32.sub - i32.shr_u - end + select local.get $7 i32.or f32.reinterpret_i32 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 27157c4e65..65900ff42f 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -174,7 +174,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -182,11 +182,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1574,11 +1574,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -2810,11 +2810,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -3629,11 +3629,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -4452,11 +4452,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -5283,11 +5283,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -6597,7 +6597,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 @@ -6635,11 +6635,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 4 i32.shl i32.add @@ -6655,7 +6655,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and @@ -7922,7 +7922,7 @@ local.get $1 i32.reinterpret_f32 call $~lib/util/hash/hash32 - local.tee $4 + local.tee $3 call $~lib/set/Set#find i32.eqz if @@ -7960,11 +7960,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 3 i32.shl i32.add @@ -7980,7 +7980,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and @@ -8752,7 +8752,7 @@ local.get $1 i64.reinterpret_f64 call $~lib/util/hash/hash64 - local.tee $4 + local.tee $3 call $~lib/set/Set#find i32.eqz if @@ -8790,11 +8790,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 4 i32.shl i32.add @@ -8810,7 +8810,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 1566c00a87..1d182f30cf 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 84d97b0c7c..1b1fe8ad1b 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -500,7 +500,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -508,11 +508,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1435,107 +1435,119 @@ i32.add i32.load local.tee $2 + i32.const 255 + i32.and + local.set $4 + local.get $2 i32.const 8 i32.shr_s local.set $3 - block $folding-inner0 - local.get $2 - i32.const 255 - i32.and - local.tee $2 - i32.const 2 - i32.lt_u - br_if $folding-inner0 + local.get $4 + i32.const 2 + i32.lt_u + if + local.get $0 local.get $3 - i32.const 255 + i32.const 0 + local.get $1 + local.get $4 + i32.xor + i32.sub i32.and - local.set $2 - local.get $3 - i32.const 8 - i32.shr_u - local.set $4 - loop $while-continue|0 + i32.add + return + end + local.get $3 + i32.const 255 + i32.and + local.set $2 + local.get $3 + i32.const 8 + i32.shr_u + local.set $4 + loop $while-continue|0 + local.get $2 + if + local.get $5 local.get $2 - if - local.get $5 - local.get $2 - i32.const 1 - i32.shr_u - local.tee $3 + i32.const 1 + i32.shr_u + local.tee $3 + local.get $4 + i32.add + i32.const 1 + i32.shl + i32.const 6184 + i32.add + i32.load8_u + local.tee $6 + i32.eq + if (result i32) + local.get $3 local.get $4 i32.add i32.const 1 i32.shl i32.const 6184 i32.add - i32.load8_u - local.tee $6 - i32.eq + i32.load8_u offset=1 + i32.const 2 + i32.shl + i32.const 4712 + i32.add + i32.load + local.tee $2 + i32.const 255 + i32.and + local.set $3 + local.get $2 + i32.const 8 + i32.shr_s + local.set $2 + local.get $3 + i32.const 2 + i32.lt_u + if + local.get $0 + local.get $2 + i32.const 0 + local.get $1 + local.get $3 + i32.xor + i32.sub + i32.and + i32.add + return + end + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.const 1 + i32.shl + i32.sub + return + else + local.get $6 + local.get $5 + i32.gt_u if (result i32) local.get $3 + else + local.get $3 local.get $4 i32.add - i32.const 1 - i32.shl - i32.const 6184 - i32.add - i32.load8_u offset=1 - i32.const 2 - i32.shl - i32.const 4712 - i32.add - i32.load - local.tee $2 - i32.const 8 - i32.shr_s - local.set $3 + local.set $4 local.get $2 - i32.const 255 - i32.and - local.tee $2 - i32.const 2 - i32.lt_u - br_if $folding-inner0 - local.get $0 - i32.const 1 - i32.add - local.get $1 - i32.const 1 - i32.shl + local.get $3 i32.sub - return - else - local.get $6 - local.get $5 - i32.gt_u - if (result i32) - local.get $3 - else - local.get $3 - local.get $4 - i32.add - local.set $4 - local.get $2 - local.get $3 - i32.sub - end end - local.set $2 - br $while-continue|0 end + local.set $2 + br $while-continue|0 end - local.get $0 - return end local.get $0 - local.get $3 - i32.const 0 - local.get $1 - local.get $2 - i32.xor - i32.sub - i32.and - i32.add ) (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -2366,23 +2378,24 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/string/String#get:length - local.tee $8 + local.tee $12 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $8 + local.get $12 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc - local.set $10 + local.set $9 loop $for-loop|0 local.get $4 - local.get $8 + local.get $12 i32.lt_u if local.get $0 @@ -2391,20 +2404,20 @@ i32.shl i32.add i32.load16_u - local.tee $2 - local.set $1 - local.get $2 + local.tee $7 + local.set $5 + local.get $7 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $8 + local.get $12 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $2 + local.get $7 i32.const 55295 i32.sub i32.const 1025 @@ -2417,7 +2430,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $5 + local.tee $3 i32.const 56319 i32.sub i32.const 1025 @@ -2427,11 +2440,11 @@ i32.const 1 i32.add local.set $4 - local.get $5 + local.get $3 i32.const 1023 i32.and - local.get $2 - local.tee $1 + local.get $7 + local.tee $5 i32.const 1023 i32.and i32.const 10 @@ -2439,55 +2452,55 @@ i32.or i32.const 65536 i32.add - local.tee $2 + local.tee $7 i32.const 131072 i32.ge_u if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $1 local.get $5 + local.get $3 i32.const 16 i32.shl i32.or i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 br $for-continue|0 end end end - local.get $2 + local.get $7 i32.const 304 i32.eq if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 else - local.get $2 + local.get $7 i32.const 931 i32.eq if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.const 1 i32.gt_u if (result i32) @@ -2496,46 +2509,45 @@ local.set $5 local.get $4 i32.const 0 - local.set $3 + local.set $1 i32.const 0 local.get $4 - local.tee $2 + local.tee $3 i32.const 30 i32.sub - local.tee $1 + local.tee $7 i32.const 0 - local.get $1 + local.get $7 i32.gt_s select local.set $11 loop $while-continue|1 - local.get $2 + local.get $3 local.get $11 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 + local.get $3 + local.tee $2 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 drop local.get $5 - local.get $1 + local.get $2 i32.const 1 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $7 + local.tee $10 i32.const 64512 i32.and i32.const 56320 i32.eq - local.get $1 + local.get $2 i32.const 2 i32.sub i32.const 0 @@ -2543,23 +2555,23 @@ i32.and if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $1 + local.tee $7 i32.const 64512 i32.and i32.const 55296 i32.eq if - local.get $7 + local.get $10 i32.const 1023 i32.and - local.get $1 + local.get $7 i32.const 1023 i32.and i32.const 10 @@ -2571,22 +2583,22 @@ end end i32.const 65533 - local.get $7 - local.get $7 + local.get $10 + local.get $10 i32.const 63488 i32.and i32.const 55296 i32.eq select end - local.tee $1 - local.set $7 - local.get $1 + local.tee $7 + local.set $2 + local.get $7 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $7 + local.get $2 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2594,12 +2606,12 @@ i32.eqz if i32.const 0 - local.get $1 + local.get $7 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $1 + local.get $7 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2608,61 +2620,61 @@ br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 - local.set $3 + local.set $1 end - local.get $2 - local.get $1 + local.get $3 + local.get $7 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $2 + local.set $3 br $while-continue|1 end end i32.const 0 - local.get $3 + local.get $1 i32.eqz br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 i32.add - local.tee $2 + local.tee $3 i32.const 30 i32.add - local.tee $1 - local.get $8 - local.get $1 - local.get $8 + local.tee $7 + local.get $12 + local.get $7 + local.get $12 i32.lt_s select local.set $6 loop $while-continue|2 - local.get $2 + local.get $3 local.get $6 i32.lt_s if local.get $5 - local.get $2 + local.get $3 i32.const 1 i32.shl i32.add i32.load16_u - local.tee $1 + local.tee $2 i32.const 64512 i32.and i32.const 55296 i32.eq - local.get $8 - local.get $2 + local.get $12 + local.get $3 i32.const 1 i32.add i32.ne i32.and if (result i32) local.get $5 - local.get $2 + local.get $3 i32.const 1 i32.shl i32.add @@ -2673,7 +2685,7 @@ i32.const 56320 i32.eq if (result i32) - local.get $1 + local.get $2 i32.const 10 i32.shl local.get $7 @@ -2681,10 +2693,10 @@ i32.const -56613888 i32.add else - local.get $1 + local.get $2 end else - local.get $1 + local.get $2 end local.tee $7 i32.const 918000 @@ -2711,14 +2723,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $2 + local.get $3 local.get $7 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $2 + local.set $3 br $while-continue|2 end end @@ -2734,53 +2746,53 @@ end i32.store16 else - local.get $2 + local.get $7 i32.const 9398 i32.sub i32.const 25 i32.le_u if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 26 i32.add i32.store16 else - local.get $2 + local.get $7 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $2 + local.tee $7 i32.const 65536 i32.lt_s if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.store16 else - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65536 i32.sub - local.tee $2 + local.tee $7 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $2 + local.get $7 i32.const 1023 i32.and i32.const 56320 @@ -2789,23 +2801,23 @@ i32.shl i32.or i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 end end end end end else - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $1 - local.get $1 + local.get $5 + local.get $5 i32.const 65 i32.sub i32.const 26 @@ -2821,15 +2833,15 @@ i32.const 1 i32.add local.set $4 - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 br $for-loop|0 end end - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index dc5826a290..e1fa6d3f5e 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -241,7 +241,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -249,11 +249,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 35a7728eb5..66fba426a6 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -828,7 +828,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -836,11 +836,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -2080,6 +2080,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2088,23 +2089,21 @@ i32.const 1 i32.shl local.set $5 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl local.set $3 - local.get $1 + i32.const 1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl - local.tee $4 + local.tee $1 + i32.eqz + local.get $3 local.get $5 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $3 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2112,51 +2111,53 @@ call $~lib/rt/pure/__release return end - local.get $4 - i32.const 1 - call $~lib/rt/tlsf/__alloc - local.set $1 - local.get $4 + local.get $3 local.get $5 i32.sub - local.tee $4 + local.set $4 local.get $3 + i32.const 1 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $4 + local.get $1 i32.gt_u if local.get $1 - local.get $2 - local.get $3 local.get $4 i32.const 2 i32.sub - local.get $3 + local.get $1 i32.div_u - local.tee $6 - call $~lib/memory/memory.repeat + local.tee $7 + i32.mul + local.set $6 + local.get $3 + local.get $2 local.get $1 + local.get $7 + call $~lib/memory/memory.repeat local.get $3 local.get $6 - i32.mul - local.tee $3 i32.add local.get $2 local.get $4 - local.get $3 + local.get $6 i32.sub call $~lib/memory/memory.copy else - local.get $1 + local.get $3 local.get $2 local.get $4 call $~lib/memory/memory.copy end - local.get $1 + local.get $3 local.get $4 i32.add local.get $0 local.get $5 call $~lib/memory/memory.copy - local.get $1 + local.get $3 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2165,6 +2166,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2173,23 +2175,21 @@ i32.const 1 i32.shl local.set $3 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl local.set $4 - local.get $1 + i32.const 1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl - local.tee $5 + local.tee $1 + i32.eqz + local.get $4 local.get $3 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $4 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2197,53 +2197,55 @@ call $~lib/rt/pure/__release return end - local.get $5 + local.get $4 + local.get $3 + i32.sub + local.set $5 + local.get $4 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $4 local.get $0 local.get $3 call $~lib/memory/memory.copy local.get $5 - local.get $3 - i32.sub - local.tee $0 - local.get $4 + local.get $1 i32.gt_u if local.get $1 + local.get $5 + i32.const 2 + i32.sub + local.get $1 + i32.div_u + local.tee $0 + i32.mul + local.set $6 local.get $3 + local.get $4 i32.add local.tee $3 local.get $2 - local.get $4 + local.get $1 local.get $0 - i32.const 2 - i32.sub - local.get $4 - i32.div_u - local.tee $5 call $~lib/memory/memory.repeat - local.get $4 - local.get $5 - i32.mul - local.tee $4 local.get $3 + local.get $6 i32.add local.get $2 - local.get $0 - local.get $4 + local.get $5 + local.get $6 i32.sub call $~lib/memory/memory.copy else - local.get $1 local.get $3 + local.get $4 i32.add local.get $2 - local.get $0 + local.get $5 call $~lib/memory/memory.copy end - local.get $1 + local.get $4 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2638,34 +2640,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $4 call $~lib/string/String#get:length - local.tee $0 + local.tee $3 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $4 + local.get $4 + local.tee $0 i32.load16_u local.set $2 loop $while-continue|0 local.get $2 call $~lib/util/string/isSpace if - local.get $4 + local.get $0 i32.const 2 i32.add - local.tee $4 + local.tee $0 i32.load16_u local.set $2 - local.get $0 + local.get $3 i32.const 1 i32.sub - local.set $0 + local.set $3 br $while-continue|0 end end f64.const 1 - local.set $5 + local.set $6 i32.const 1 local.get $2 i32.const 43 @@ -2675,10 +2677,10 @@ i32.eq select if - local.get $0 + local.get $3 i32.const 1 i32.sub - local.tee $0 + local.tee $3 i32.eqz br_if $folding-inner0 f64.const -1 @@ -2687,11 +2689,11 @@ i32.const 45 i32.eq select - local.set $5 - local.get $4 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $4 + local.tee $0 i32.load16_u local.set $2 end @@ -2714,12 +2716,12 @@ i32.const 48 i32.eq i32.const 0 - local.get $0 + local.get $3 i32.const 2 i32.gt_s select if (result i32) - local.get $4 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -2729,18 +2731,18 @@ i32.const 0 end if - local.get $4 - i32.const 4 - i32.add - local.set $4 - local.get $0 + local.get $3 i32.const 2 i32.sub + local.set $3 + local.get $0 + i32.const 4 + i32.add local.set $0 end end else - local.get $0 + local.get $3 i32.const 2 i32.gt_s i32.const 0 @@ -2752,7 +2754,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $4 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -2770,38 +2772,38 @@ br_if $case2|1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 2 local.set $1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 8 local.set $1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 16 local.set $1 end @@ -2814,14 +2816,14 @@ end loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $3 local.tee $2 i32.const 1 i32.sub - local.set $0 + local.set $3 local.get $2 if - local.get $4 + local.get $0 i32.load16_u local.tee $2 i32.const 48 @@ -2857,10 +2859,10 @@ local.get $1 i32.ge_u if - local.get $6 - local.get $6 + local.get $5 + local.get $5 f64.eq - local.get $6 + local.get $5 f64.const 0 f64.ne i32.and @@ -2868,30 +2870,30 @@ br_if $folding-inner0 br $while-break|2 end - local.get $6 + local.get $5 local.get $1 f64.convert_i32_s f64.mul local.get $2 f64.convert_i32_u f64.add - local.set $6 - local.get $4 + local.set $5 + local.get $0 i32.const 2 i32.add - local.set $4 + local.set $0 br $while-continue|2 end end end - local.get $3 + local.get $4 call $~lib/rt/pure/__release - local.get $5 local.get $6 + local.get $5 f64.mul return end - local.get $3 + local.get $4 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -2915,34 +2917,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 call $~lib/string/String#get:length - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 - local.get $2 - local.tee $3 + local.get $3 + local.tee $0 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $3 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 - local.get $0 + local.get $2 i32.const 1 i32.sub - local.set $0 + local.set $2 br $while-continue|0 end end i32.const 1 - local.set $4 + local.set $6 i32.const 1 local.get $1 i32.const 43 @@ -2952,10 +2954,10 @@ i32.eq select if - local.get $0 + local.get $2 i32.const 1 i32.sub - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 i32.const -1 @@ -2964,15 +2966,15 @@ i32.const 45 i32.eq select - local.set $4 - local.get $3 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 end - local.get $0 + local.get $2 i32.const 2 i32.gt_s i32.const 0 @@ -2984,7 +2986,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $3 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -3002,57 +3004,57 @@ br_if $case2|1 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 2 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 8 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 16 - local.set $6 + local.set $4 end end - local.get $6 + local.get $4 i32.const 10 - local.get $6 + local.get $4 select - local.set $6 + local.set $4 loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $2 local.tee $1 i32.const 1 i32.sub - local.set $0 + local.set $2 local.get $1 if - local.get $3 + local.get $0 i32.load16_u local.tee $1 i32.const 48 @@ -3085,7 +3087,7 @@ select end local.tee $1 - local.get $6 + local.get $4 i32.ge_u if local.get $5 @@ -3094,27 +3096,27 @@ br $while-break|2 end local.get $1 + local.get $4 local.get $5 - local.get $6 i32.mul i32.add local.set $5 - local.get $3 + local.get $0 i32.const 2 i32.add - local.set $3 + local.set $0 br $while-continue|2 end end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 local.get $5 + local.get $6 i32.mul return end - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 0 ) @@ -3122,40 +3124,40 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i64) + (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 call $~lib/string/String#get:length - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 - local.get $2 - local.tee $3 + local.get $3 + local.tee $0 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $3 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 - local.get $0 + local.get $2 i32.const 1 i32.sub - local.set $0 + local.set $2 br $while-continue|0 end end i64.const 1 - local.set $4 + local.set $6 i32.const 1 local.get $1 i32.const 43 @@ -3165,10 +3167,10 @@ i32.eq select if - local.get $0 + local.get $2 i32.const 1 i32.sub - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 i64.const -1 @@ -3177,15 +3179,15 @@ i32.const 45 i32.eq select - local.set $4 - local.get $3 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 end - local.get $0 + local.get $2 i32.const 2 i32.gt_s i32.const 0 @@ -3197,7 +3199,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $3 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -3215,57 +3217,57 @@ br_if $case2|1 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 2 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 8 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 16 - local.set $6 + local.set $4 end end - local.get $6 + local.get $4 i32.const 10 - local.get $6 + local.get $4 select - local.set $6 + local.set $4 loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $2 local.tee $1 i32.const 1 i32.sub - local.set $0 + local.set $2 local.get $1 if - local.get $3 + local.get $0 i32.load16_u local.tee $1 i32.const 48 @@ -3298,7 +3300,7 @@ select end local.tee $1 - local.get $6 + local.get $4 i32.ge_u if local.get $5 @@ -3309,27 +3311,27 @@ local.get $1 i64.extend_i32_u local.get $5 - local.get $6 + local.get $4 i64.extend_i32_s i64.mul i64.add local.set $5 - local.get $3 + local.get $0 i32.const 2 i32.add - local.set $3 + local.set $0 br $while-continue|2 end end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 local.get $5 + local.get $6 i64.mul return end - local.get $2 + local.get $3 call $~lib/rt/pure/__release i64.const 0 ) @@ -4033,32 +4035,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $13 + local.tee $11 i64.div_u local.tee $16 i64.clz - local.set $11 + local.set $13 local.get $7 - local.get $13 + local.get $11 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $11 + local.get $13 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $13 + local.get $11 f64.convert_i64_u f64.div i64.trunc_f64_u local.get $16 - local.get $11 + local.get $13 i64.shl i64.add f64.convert_i64_u local.get $10 - local.get $11 + local.get $13 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4091,11 +4093,11 @@ i64.and i64.const 1220703125 i64.mul - local.tee $7 + local.tee $10 i64.const 32 i64.shr_u i64.add - local.tee $10 + local.tee $7 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4107,7 +4109,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $7 + local.get $10 local.get $0 i64.extend_i32_u i64.shl @@ -4115,11 +4117,11 @@ i64.shr_u i64.const 1 i64.and - local.get $10 + local.get $7 local.get $0 i64.extend_i32_u i64.shl - local.get $7 + local.get $10 i64.const 4294967295 i64.and local.get $11 @@ -4817,7 +4819,7 @@ local.set $7 local.get $2 call $~lib/rt/pure/__retain - local.set $5 + local.set $6 block $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -4834,7 +4836,7 @@ local.get $0 call $~lib/rt/pure/__retain else - local.get $5 + local.get $6 local.get $0 local.get $7 local.get $0 @@ -4845,7 +4847,7 @@ local.set $0 br $folding-inner0 end - local.get $5 + local.get $6 call $~lib/string/String#get:length local.set $2 local.get $10 @@ -4871,7 +4873,7 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl @@ -4899,17 +4901,17 @@ local.get $1 i32.const 1 i32.add - local.tee $1 + local.tee $5 i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $1 local.get $2 + local.get $5 i32.add local.set $1 local.get $9 @@ -4941,7 +4943,7 @@ loop $while-continue|1 local.get $0 local.get $7 - local.get $6 + local.get $5 call $~lib/string/String#indexOf local.tee $4 i32.const -1 @@ -4952,7 +4954,7 @@ i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl @@ -4960,7 +4962,7 @@ local.get $4 local.get $10 i32.add - local.set $6 + local.set $5 br $while-continue|1 end end @@ -4974,7 +4976,7 @@ loop $while-continue|2 local.get $0 local.get $7 - local.get $6 + local.get $5 call $~lib/string/String#indexOf local.tee $9 i32.const -1 @@ -5010,38 +5012,38 @@ i32.shl i32.add local.get $0 - local.get $6 + local.get $5 i32.const 1 i32.shl i32.add local.get $9 - local.get $6 + local.get $5 i32.sub - local.tee $6 + local.tee $5 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $3 - local.get $6 + local.get $5 local.get $8 i32.add - local.tee $6 + local.tee $5 i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $6 + local.get $5 i32.add local.set $8 local.get $9 local.get $10 i32.add - local.set $6 + local.set $5 br $while-continue|2 end end @@ -5062,7 +5064,7 @@ local.set $3 end local.get $4 - local.get $6 + local.get $5 i32.sub local.tee $2 if @@ -5072,7 +5074,7 @@ i32.shl i32.add local.get $0 - local.get $6 + local.get $5 i32.const 1 i32.shl i32.add @@ -5104,13 +5106,13 @@ call $~lib/rt/pure/__retain local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release return end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release local.get $0 ) @@ -5254,15 +5256,15 @@ i32.const 0 i32.gt_s select - local.tee $3 + local.tee $1 local.get $0 call $~lib/string/String#get:length - local.tee $1 - local.get $3 + local.tee $3 local.get $1 + local.get $3 i32.lt_s select - local.tee $3 + local.tee $1 local.get $2 i32.const 0 local.get $2 @@ -5270,58 +5272,59 @@ i32.gt_s select local.tee $2 - local.get $1 + local.get $3 local.get $2 - local.get $1 + local.get $3 i32.lt_s select local.tee $2 - local.get $3 + local.get $1 local.get $2 - i32.gt_s + i32.lt_s select i32.const 1 i32.shl - local.tee $4 - local.get $3 + local.set $4 + local.get $1 local.get $2 - local.get $3 + local.get $1 local.get $2 - i32.lt_s + i32.gt_s select i32.const 1 i32.shl local.tee $2 + local.get $4 i32.sub - local.tee $3 + local.tee $1 i32.eqz if i32.const 1280 return end i32.const 0 - local.get $4 - local.get $1 + local.get $2 + local.get $3 i32.const 1 i32.shl i32.eq - local.get $2 + local.get $4 select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $3 + local.get $1 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $2 + local.get $4 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $2 call $~lib/rt/pure/__retain ) (func $~lib/rt/__allocArray (param $0 i32) (result i32) @@ -6025,7 +6028,7 @@ (local $5 i64) local.get $3 i64.extend_i32_s - local.set $4 + local.set $5 local.get $3 local.get $3 i32.const 1 @@ -6042,11 +6045,11 @@ i32.shl i32.add local.get $1 - local.get $4 + local.get $5 local.get $1 - local.get $4 + local.get $5 i64.div_u - local.tee $1 + local.tee $4 i64.mul i64.sub i32.wrap_i64 @@ -6056,7 +6059,8 @@ i32.add i32.load16_u i32.store16 - local.get $1 + local.get $4 + local.tee $1 i64.const 0 i64.ne br_if $do-continue|1 @@ -6067,11 +6071,11 @@ i32.const 7 i32.and i64.extend_i32_s - local.set $5 - local.get $4 + local.set $4 + local.get $5 i64.const 1 i64.sub - local.set $4 + local.set $5 loop $do-continue|0 local.get $0 local.get $2 @@ -6082,7 +6086,7 @@ i32.shl i32.add local.get $1 - local.get $4 + local.get $5 i64.and i32.wrap_i64 i32.const 1 @@ -6092,7 +6096,7 @@ i32.load16_u i32.store16 local.get $1 - local.get $5 + local.get $4 i64.shr_u local.tee $1 i64.const 0 @@ -6631,35 +6635,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -6678,117 +6683,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -6796,7 +6797,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -6811,10 +6812,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -6832,7 +6833,7 @@ i32.const 20280 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -6848,19 +6849,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -6871,7 +6872,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -6896,21 +6897,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -6922,7 +6923,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -6938,10 +6939,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -6949,9 +6950,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -6978,13 +6979,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -6993,7 +6994,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -7007,7 +7008,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -7190,7 +7191,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -7198,7 +7199,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -7266,18 +7267,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -7288,67 +7292,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7361,8 +7366,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -7371,71 +7376,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 19408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 20104 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -7444,47 +7469,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -7493,48 +7521,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -7546,13 +7559,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index edee9d2672..37f2e0823a 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1364,14 +1364,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $0 - i32.const 1 - i32.ne - if + block $case0|0 local.get $0 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 end i32.const 1408 br $break|0 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index ca6e5e8be3..4ec97bf360 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -473,7 +473,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -481,11 +481,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1487,11 +1487,11 @@ i32.and i32.const 24 i32.add - local.tee $3 + local.tee $5 i32.add local.set $1 local.get $2 - local.get $3 + local.get $5 i32.sub local.set $2 local.get $0 @@ -3328,12 +3328,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $5 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $5 + local.set $2 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -3342,23 +3342,23 @@ if local.get $4 local.get $3 - local.get $5 + local.get $2 call $~lib/memory/memory.copy end local.get $4 - local.tee $3 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $5 local.get $2 - local.get $3 i32.store offset=4 - local.get $2 + local.get $5 local.get $1 i32.store offset=8 - local.get $2 + local.get $5 local.get $0 i32.store offset=12 - local.get $2 + local.get $5 ) (func $~lib/typedarray/Int8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -9535,6 +9535,7 @@ br $while-continue|0 end end + local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -9553,31 +9554,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 + local.tee $3 + i32.const 8388608 + i32.sub local.get $2 + local.get $1 + i32.sub + local.tee $1 + i32.const 23 + i32.shl + i32.or local.get $3 + i32.const 1 + local.get $1 i32.sub - local.tee $2 + i32.shr_u + local.get $1 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 + select i32.or f32.reinterpret_i32 return @@ -9676,7 +9673,12 @@ i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.set $2 + local.get $1 + i64.const 63 + i64.shr_u + local.set $3 + local.get $2 i64.const 2047 i64.eq if @@ -9688,19 +9690,15 @@ 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 + local.tee $4 i64.const -9223372036854775808 i64.le_u if - local.get $3 + local.get $4 i64.const -9223372036854775808 i64.eq br_if $folding-inner0 @@ -9760,6 +9758,9 @@ br $while-continue|0 end end + local.get $3 + i64.const 63 + i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -9778,35 +9779,29 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 + local.tee $3 + i64.const 4503599627370496 + i64.sub local.get $2 + local.get $1 + i64.sub + local.tee $1 + i64.const 52 + i64.shl + i64.or local.get $3 + i64.const 0 + local.get $1 i64.sub - local.tee $2 + i64.const 1 + i64.add + i64.shr_u + local.get $1 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 + select i64.or f64.reinterpret_i64 return @@ -18856,21 +18851,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19258,14 +19253,14 @@ local.get $1 i32.const 255 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19440,21 +19435,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19611,14 +19606,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19793,9 +19788,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $0 + local.tee $2 call $~lib/util/number/utoa_dec_simple - local.get $0 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20633,35 +20628,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -20680,117 +20676,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -20798,7 +20790,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -20813,10 +20805,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -20834,7 +20826,7 @@ i32.const 8248 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -20850,19 +20842,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -20873,7 +20865,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -20898,21 +20890,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -20924,7 +20916,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -20940,10 +20932,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -20951,9 +20943,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -20980,13 +20972,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -20995,7 +20987,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -21009,7 +21001,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -21192,7 +21184,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -21200,7 +21192,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -21268,18 +21260,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -21290,67 +21285,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21363,8 +21359,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -21373,71 +21369,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 7376 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 8072 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -21446,47 +21462,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -21495,48 +21514,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -21548,13 +21552,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 52c13126ca..71c01220f9 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -418,35 +418,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -465,117 +466,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -583,7 +580,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -598,10 +595,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -619,7 +616,7 @@ i32.const 1936 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -635,19 +632,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -658,7 +655,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -683,21 +680,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -709,7 +706,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -725,10 +722,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -736,9 +733,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -765,13 +762,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -780,7 +777,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -794,7 +791,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -1177,7 +1174,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1185,7 +1182,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1253,18 +1250,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -1275,67 +1275,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1349,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -1358,71 +1359,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 1064 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + 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/_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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1431,47 +1452,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -1480,48 +1504,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -1533,13 +1542,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 56323337fc..27a7b53cd0 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 From 4186f49759ee983cf5c4e0c89662531ae06da7d1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 03:25:58 +0300 Subject: [PATCH 06/13] Revert "simplify-locals-nostructure -> simplify-locals-notee-nostructure" This reverts commit 0be3cf6a27e6657fe78dcf9ef98250955434b974. --- src/module.ts | 2 +- tests/compiler/binary.optimized.wat | 93 +- tests/compiler/do.optimized.wat | 8 +- .../extends-baseaggregate.optimized.wat | 58 +- tests/compiler/for.optimized.wat | 8 +- .../implicit-getter-setter.optimized.wat | 8 +- tests/compiler/issues/1095.optimized.wat | 8 +- tests/compiler/issues/1225.optimized.wat | 8 +- tests/compiler/logical.optimized.wat | 8 +- tests/compiler/managed-cast.optimized.wat | 8 +- tests/compiler/memcpy.optimized.wat | 63 +- tests/compiler/number.optimized.wat | 218 +- tests/compiler/object-literal.optimized.wat | 8 +- tests/compiler/rc/local-init.optimized.wat | 8 +- .../rc/logical-and-mismatch.optimized.wat | 8 +- .../rc/logical-or-mismatch.optimized.wat | 8 +- tests/compiler/rc/optimize.optimized.wat | 22 +- tests/compiler/rc/rereturn.optimized.wat | 8 +- .../rc/ternary-mismatch.optimized.wat | 8 +- tests/compiler/resolve-binary.optimized.wat | 220 +- .../resolve-elementaccess.optimized.wat | 419 ++- tests/compiler/resolve-ternary.optimized.wat | 226 +- .../retain-release-sanity.optimized.wat | 274 +- tests/compiler/retain-return.optimized.wat | 8 +- tests/compiler/rt/finalize.optimized.wat | 38 +- tests/compiler/runtime-full.optimized.wat | 8 +- .../compiler/std/array-literal.optimized.wat | 8 +- tests/compiler/std/array.optimized.wat | 1145 ++++---- tests/compiler/std/arraybuffer.optimized.wat | 8 +- tests/compiler/std/dataview.optimized.wat | 8 +- tests/compiler/std/map.optimized.wat | 1298 ++++----- tests/compiler/std/math.optimized.wat | 2346 ++++++++--------- tests/compiler/std/mod.optimized.wat | 82 +- tests/compiler/std/set.optimized.wat | 52 +- tests/compiler/std/staticarray.optimized.wat | 8 +- .../std/string-casemapping.optimized.wat | 352 ++- .../std/string-encoding.optimized.wat | 8 +- tests/compiler/std/string.optimized.wat | 955 ++++--- tests/compiler/std/symbol.optimized.wat | 9 +- tests/compiler/std/typedarray.optimized.wat | 580 ++-- tests/compiler/wasi/trace.optimized.wat | 419 ++- tests/compiler/while.optimized.wat | 8 +- 42 files changed, 4493 insertions(+), 4546 deletions(-) diff --git a/src/module.ts b/src/module.ts index 85281af212..96b0ebf6d2 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1549,7 +1549,7 @@ export class Module { if (optimizeLevel >= 3 && shrinkLevel <= 1) { passes.push("licm"); } - passes.push("simplify-locals-notee-nostructure"); + passes.push("simplify-locals-nostructure"); passes.push("vacuum"); passes.push("reorder-locals"); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 17cee2e52b..12db290bd5 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -132,7 +132,6 @@ br $while-continue|0 end end - local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -151,27 +150,31 @@ i32.const 8 i32.shl i32.clz - local.tee $1 - i32.shl local.tee $3 - i32.const 8388608 - i32.sub - local.get $2 - local.get $1 - i32.sub - local.tee $1 - i32.const 23 i32.shl - i32.or + local.set $1 + local.get $2 local.get $3 - i32.const 1 - local.get $1 i32.sub - i32.shr_u - local.get $1 + local.tee $2 i32.const 0 i32.gt_s - select + 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 @@ -192,12 +195,7 @@ i64.shr_u i64.const 2047 i64.and - local.set $2 - local.get $1 - i64.const 63 - i64.shr_u - local.set $3 - local.get $2 + local.tee $2 i64.const 2047 i64.eq if @@ -206,15 +204,19 @@ 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 $4 + local.tee $3 i64.const 9214364837600034816 i64.le_u if - local.get $4 + local.get $3 i64.const 9214364837600034816 i64.eq br_if $folding-inner0 @@ -274,9 +276,6 @@ br $while-continue|0 end end - local.get $3 - i64.const 63 - i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -295,29 +294,35 @@ i64.const 11 i64.shl i64.clz - local.tee $1 - i64.shl local.tee $3 - i64.const 4503599627370496 - i64.sub - local.get $2 - local.get $1 - i64.sub - local.tee $1 - i64.const 52 i64.shl - i64.or + local.set $1 + local.get $2 local.get $3 - i64.const 0 - local.get $1 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $1 + local.tee $2 i64.const 0 i64.gt_s - select + 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 diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 9c70e4f6ef..13ee0d6c52 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -238,7 +238,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -246,11 +246,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 1a0d0a698e..304b4904b7 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -163,7 +163,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -171,11 +171,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1820,26 +1820,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $2 - local.set $0 + local.tee $3 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $3 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $3 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $4 - i32.load offset=4 local.tee $5 + i32.load offset=4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -1848,51 +1848,51 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray - local.get $2 - local.get $4 + local.get $3 + local.get $5 i32.store - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 else i32.const 0 - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $5 + local.get $2 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end - local.get $2 + local.get $3 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 @@ -1909,18 +1909,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 i32.load - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $3 + local.get $2 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 1a9f116bdb..579428fa82 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -235,7 +235,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -243,11 +243,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 99b974af68..779ea253f5 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index e1f87a0342..2c23f79404 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 4f2ed5eeae..37e44e8191 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 3fc5c348af..e59eaa06b5 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index ebc8463025..41383bad90 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 48c7ddd585..8952f746c9 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -160,13 +160,22 @@ block $break|2 block $case2|2 block $case1|2 - block $case0|2 - local.get $0 + local.get $0 + i32.const 3 + i32.and + local.tee $3 + i32.const 1 + i32.ne + if + local.get $3 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $3 i32.const 3 - i32.and - i32.const 1 - i32.sub - br_table $case0|2 $case1|2 $case2|2 $break|2 + i32.eq + br_if $case2|2 + br $break|2 end local.get $1 i32.load @@ -220,25 +229,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 24 + i32.shr_u local.get $1 i32.load offset=5 - local.tee $4 + local.tee $3 i32.const 8 i32.shl - local.get $3 - i32.const 24 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 24 + i32.shr_u local.get $1 i32.load offset=9 local.tee $3 i32.const 8 i32.shl - local.get $4 - i32.const 24 - i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -311,25 +320,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 16 + i32.shr_u local.get $1 i32.load offset=6 - local.tee $4 + local.tee $3 i32.const 16 i32.shl - local.get $3 - i32.const 16 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 16 + i32.shr_u local.get $1 i32.load offset=10 local.tee $3 i32.const 16 i32.shl - local.get $4 - i32.const 16 - i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -398,25 +407,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 8 + i32.shr_u local.get $1 i32.load offset=7 - local.tee $4 + local.tee $3 i32.const 24 i32.shl - local.get $3 - i32.const 8 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 8 + i32.shr_u local.get $1 i32.load offset=11 local.tee $3 i32.const 24 i32.shl - local.get $4 - i32.const 8 - i32.shr_u i32.or i32.store offset=8 local.get $0 diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 5ff5fba74d..3fd153cc6e 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -355,6 +355,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -362,25 +367,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -399,113 +397,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -513,7 +514,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -528,8 +529,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -565,18 +566,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -587,7 +588,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -620,13 +621,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -638,7 +639,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -655,9 +656,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -666,9 +667,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -695,7 +696,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -709,7 +710,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -723,7 +724,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1078,7 +1079,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1086,7 +1087,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1156,8 +1157,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 f64) + (local $4 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 1920 @@ -1166,79 +1166,77 @@ i32.const 2352 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 $4 - i64.const 4294967295 - i64.and - local.set $2 - local.get $4 + local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - local.get $4 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $1 - local.get $0 - local.get $0 - local.get $4 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 2 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 $1 + i64.const 1 + i64.sub + local.tee $1 local.get $0 i32.const 2 i32.add local.get $1 - local.get $4 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -1254,7 +1252,7 @@ i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $3 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index f118ebf12f..9fb5ce8199 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -162,7 +162,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -170,11 +170,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 31a2fe22a1..d25ba45aa4 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 12bfe96868..bcfd706103 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index eeefb100c7..0ee135fd09 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index 3927895849..a655fd3623 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1091,23 +1091,23 @@ (local $2 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $0 local.get $1 call $~lib/rt/pure/__retain + local.tee $2 local.tee $1 - local.tee $0 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $2 + local.set $1 + local.get $0 call $~lib/rt/pure/__release 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 ) (func $rc/optimize/OptimizeARC.keeps.partialRetains (param $0 i32) (param $1 i32) local.get $1 diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index e05108df03..04e6d6ae71 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index ac681cb4ed..5c66d5b631 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 7cfb5a6905..78726945aa 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -370,6 +370,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -377,25 +382,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -414,113 +412,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -528,7 +529,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -543,8 +544,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -580,18 +581,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -602,7 +603,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -635,13 +636,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -653,7 +654,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -670,9 +671,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -681,9 +682,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -710,7 +711,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -724,7 +725,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -738,7 +739,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1093,7 +1094,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1101,7 +1102,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1171,7 +1172,6 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2064 @@ -1180,79 +1180,77 @@ i32.const 2496 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 $1 - i64.const 4294967295 - i64.and - local.set $2 - local.get $1 + local.tee $2 i64.const 32 i64.shr_u - local.tee $1 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $4 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $1 i64.const 4294967295 i64.and - local.get $1 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $3 - local.get $0 - local.get $0 - local.get $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 3 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $4 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 1 + i64.sub + local.tee $1 local.get $0 i32.const 3 i32.add - local.get $3 local.get $1 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -1264,14 +1262,14 @@ i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294966784 i64.mul - local.get $3 + local.get $1 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index 43839dd3cf..b6e217bab8 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -437,36 +437,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -485,113 +484,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -599,7 +602,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -614,10 +617,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -635,7 +638,7 @@ i32.const 2280 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -651,19 +654,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -674,7 +677,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -699,21 +702,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -725,7 +728,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -741,10 +744,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -752,9 +755,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -781,13 +784,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -796,7 +799,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -810,7 +813,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1193,7 +1196,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1201,7 +1204,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1269,21 +1272,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -1294,68 +1294,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1368,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1378,91 +1377,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 1408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 2104 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1471,50 +1450,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1523,33 +1499,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -1561,13 +1552,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index fbce41ccb9..08c31d502b 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -182,7 +182,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -190,11 +190,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1347,6 +1347,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -1354,25 +1359,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -1391,113 +1389,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -1505,7 +1506,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -1520,8 +1521,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -1557,18 +1558,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -1579,7 +1580,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -1612,13 +1613,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -1630,7 +1631,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -1647,9 +1648,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -1658,9 +1659,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -1687,7 +1688,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -1701,7 +1702,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -1715,7 +1716,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -2070,7 +2071,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -2078,7 +2079,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -2148,8 +2149,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 f64) + (local $4 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 2096 @@ -2158,79 +2158,77 @@ i32.const 2528 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 $4 - i64.const 4294967295 - i64.and - local.set $2 - local.get $4 + local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - local.get $4 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $1 - local.get $0 - local.get $0 - local.get $4 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 1 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 $1 + i64.const 1 + i64.sub + local.tee $1 local.get $0 i32.const 1 i32.add local.get $1 - local.get $4 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -2246,7 +2244,7 @@ i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $3 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index cc6bcb11c2..4c99175311 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -180,7 +180,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -188,11 +188,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1781,57 +1781,56 @@ i32.const 3 call $~lib/rt/tlsf/__alloc 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 i32.const 12 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 12 call $~lib/memory/memory.fill - local.get $2 - local.set $1 - local.get $2 - local.get $0 + local.get $1 + local.tee $0 + local.get $3 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 - local.get $3 + local.set $0 + local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $1 i32.store - local.get $0 - local.get $2 + local.get $3 + local.get $1 i32.store offset=4 - local.get $0 + local.get $3 i32.const 12 i32.store offset=8 - local.get $0 + local.get $3 i32.const 3 i32.store offset=12 - local.get $0 + local.get $3 call $~lib/array/Array#push - local.get $0 + local.get $3 call $~lib/array/Array#push - local.get $0 + local.get $3 i32.load offset=12 - local.tee $2 + local.tee $1 i32.const 1 i32.lt_s if @@ -1842,73 +1841,72 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.load offset=4 - local.get $2 + local.get $1 i32.const 1 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.shl i32.add i32.load drop - local.get $0 - local.get $2 + local.get $3 + local.get $1 i32.store offset=12 - local.get $0 + local.get $3 call $~lib/rt/pure/__release i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc 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 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $2 - local.set $1 - local.get $2 - local.get $0 + local.get $1 + local.tee $0 + local.get $3 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 - local.get $3 + local.set $0 + local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $1 i32.store - local.get $0 - local.get $2 + local.get $3 + local.get $1 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 $0 + local.get $3 loop $for-loop|0 - local.get $4 + local.get $2 i32.const 10 i32.lt_s if @@ -1916,48 +1914,47 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.const 0 i32.store - local.get $2 + local.get $3 i32.const 0 i32.store offset=4 - local.get $2 + local.get $3 i32.const 0 i32.store offset=8 - local.get $2 + local.get $3 i32.const 0 i32.store offset=12 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $0 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $0 - local.set $1 - local.get $0 - local.get $2 + local.get $1 + local.tee $0 + local.get $3 i32.load local.tee $5 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $5 call $~lib/rt/pure/__release end - local.get $2 - local.get $1 - i32.store - local.get $2 + local.get $3 local.get $0 + i32.store + local.get $3 + local.get $1 i32.store offset=4 - local.get $2 + local.get $3 i32.const 0 i32.store offset=8 - local.get $2 + local.get $3 i32.const 0 i32.store offset=12 i32.const 0 @@ -1967,15 +1964,15 @@ i32.const 10 i32.lt_s if - local.get $2 - local.get $2 + local.get $3 + local.get $3 i32.load offset=12 local.tee $1 i32.const 1 i32.add local.tee $5 call $~lib/array/ensureSize - local.get $2 + local.get $3 i32.load offset=4 local.get $1 i32.const 2 @@ -1984,7 +1981,7 @@ i32.const 1344 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 local.get $5 i32.store offset=12 i32.const 1344 @@ -1996,12 +1993,12 @@ br $for-loop|1 end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 i32.const 1 i32.add - local.set $4 + local.set $2 br $for-loop|0 end end @@ -2009,15 +2006,15 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $0 - call $~lib/rt/pure/__retain local.tee $2 + call $~lib/rt/pure/__retain + local.tee $3 i32.const 1456 call $~lib/string/String.__concat - local.get $0 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 i32.const 6 @@ -2030,13 +2027,13 @@ i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.const 0 i32.store - local.get $2 + local.get $3 local.tee $0 local.get $1 - local.tee $3 + local.tee $2 i32.load local.tee $4 i32.ne @@ -2047,95 +2044,94 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.get $0 i32.store local.get $2 - local.set $4 - local.get $2 + local.set $0 local.get $3 - local.tee $0 + local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 - i32.store - local.get $1 local.get $2 - local.tee $3 + i32.store + local.get $0 + local.tee $2 + local.get $3 + local.tee $0 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 local.get $0 + local.get $2 i32.store local.get $1 - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 local.get $0 + local.get $2 i32.store - local.get $1 - local.set $4 local.get $3 - local.tee $0 local.get $1 + local.tee $2 i32.load - local.tee $3 + local.tee $4 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $3 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 local.get $0 i32.store local.get $1 - local.get $2 + local.get $3 i32.load local.tee $0 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $0 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) @@ -2422,26 +2418,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $2 - local.set $0 + local.tee $3 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $3 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $3 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $4 - i32.load offset=4 local.tee $5 + i32.load offset=4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -2450,51 +2446,51 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray - local.get $2 - local.get $4 + local.get $3 + local.get $5 i32.store - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 else i32.const 0 - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $5 + local.get $2 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end - local.get $2 + local.get $3 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 @@ -2511,18 +2507,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 i32.load - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $3 + local.get $2 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 9371044043..72b4c576f6 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index cf0fab021d..671366654c 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -2066,25 +2066,25 @@ global.get $~lib/rt/pure/ROOTS local.tee $1 local.tee $3 - local.set $0 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $5 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $5 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $2 + local.tee $5 i32.load offset=4 - local.tee $4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $4 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -2093,10 +2093,10 @@ i32.const 0 end if - local.get $2 + local.get $5 call $~lib/rt/pure/markGray local.get $3 - local.get $2 + local.get $5 i32.store local.get $3 i32.const 4 @@ -2104,29 +2104,29 @@ local.set $3 else i32.const 0 - local.get $4 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $4 + local.get $2 i32.const 1879048192 i32.and select if - local.get $2 + local.get $5 call $~lib/rt/pure/finalize else + local.get $5 local.get $2 - local.get $4 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index ae4f3be6eb..0a6d9adf60 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index a8bcc64779..dcb6c1ef2d 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 8e28118c1d..9691d0bf30 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -539,7 +539,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -547,11 +547,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1553,11 +1553,11 @@ i32.and i32.const 24 i32.add - local.tee $5 + local.tee $3 i32.add local.set $1 local.get $2 - local.get $5 + local.get $3 i32.sub local.set $2 local.get $0 @@ -1919,12 +1919,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $2 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $2 + local.set $5 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -1933,23 +1933,23 @@ if local.get $4 local.get $3 - local.get $2 + local.get $5 call $~lib/memory/memory.copy end local.get $4 - local.tee $2 + local.tee $3 call $~lib/rt/pure/__retain i32.store - local.get $5 local.get $2 + local.get $3 i32.store offset=4 - local.get $5 + local.get $2 local.get $1 i32.store offset=8 - local.get $5 + local.get $2 local.get $0 i32.store offset=12 - local.get $5 + local.get $2 ) (func $~lib/array/Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -2603,7 +2603,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 local.get $1 i32.load offset=12 i32.const 0 @@ -2611,7 +2611,7 @@ select local.tee $4 i32.add - local.tee $3 + local.tee $2 i32.const 268435452 i32.gt_u if @@ -2622,23 +2622,23 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 2 i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $2 + local.get $3 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/memory/memory.copy - local.get $2 + local.get $0 local.get $5 i32.add local.get $1 @@ -2649,7 +2649,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $3 + 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) @@ -3809,10 +3809,10 @@ (local $7 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $4 + local.set $1 local.get $0 i32.load offset=12 - local.tee $1 + local.tee $4 i32.const 2 i32.const 3 i32.const 0 @@ -3823,11 +3823,11 @@ local.set $6 loop $for-loop|0 local.get $2 - local.get $1 + local.get $4 local.get $0 i32.load offset=12 local.tee $3 - local.get $1 + local.get $4 local.get $3 i32.lt_s select @@ -3850,7 +3850,7 @@ local.get $7 local.get $2 local.get $0 - local.get $4 + local.get $1 i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store @@ -3861,7 +3861,7 @@ br $for-loop|0 end end - local.get $4 + local.get $1 call $~lib/rt/pure/__release local.get $5 ) @@ -6004,7 +6004,7 @@ (local $3 i32) local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 local.get $0 i32.load offset=12 @@ -6025,16 +6025,16 @@ 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 $3 + local.get $2 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 local.get $0 i32.load offset=4 local.get $1 @@ -6047,16 +6047,16 @@ i32.ne if local.get $0 - local.get $2 + local.get $3 call $~lib/rt/pure/__retain i32.store local.get $1 call $~lib/rt/pure/__release end - local.get $2 - call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release ) (func $std/array/createReverseOrderedNestedArray (result i32) (local $0 i32) @@ -6264,7 +6264,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 i32.const 1 i32.le_s if @@ -6276,22 +6276,22 @@ end local.get $0 i32.load offset=4 - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 2 i32.eq if - local.get $3 + local.get $2 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $2 - local.get $3 + local.set $3 + local.get $2 i32.load call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~argumentsLength - local.get $2 + local.get $3 local.get $4 local.get $1 i32.load @@ -6299,16 +6299,16 @@ i32.const 0 i32.lt_s if - local.get $3 + local.get $2 local.get $4 i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain - local.get $2 + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -6316,13 +6316,13 @@ call $~lib/rt/pure/__release return end - local.get $3 local.get $2 + local.get $3 local.get $1 call $~lib/rt/pure/__retain - local.tee $4 + local.tee $2 call $~lib/util/sort/insertionSort<~lib/array/Array> - local.get $4 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -7366,9 +7366,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $0 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7687,36 +7687,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -7735,113 +7734,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -7849,7 +7852,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -7864,10 +7867,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -7885,7 +7888,7 @@ i32.const 9896 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -7901,19 +7904,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -7924,7 +7927,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -7949,21 +7952,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -7975,7 +7978,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -7991,10 +7994,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -8002,9 +8005,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -8031,13 +8034,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -8046,7 +8049,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -8060,7 +8063,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -8243,7 +8246,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -8251,7 +8254,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -8319,21 +8322,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -8344,68 +8344,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 + local.tee $3 + local.get $3 i64.clz i32.wrap_i64 - local.tee $3 - i32.sub - local.set $7 - local.get $5 - local.get $3 + 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8418,8 +8417,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -8428,91 +8427,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 9024 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 9720 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8521,50 +8500,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8573,33 +8549,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -8611,13 +8602,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) @@ -8973,23 +8964,22 @@ local.get $8 if local.get $1 - local.get $1 + local.tee $2 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $2 + local.tee $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/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $2 - local.set $1 end local.get $3 i32.const 1 @@ -9069,133 +9059,132 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $8 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $7 + local.tee $6 i32.const 0 i32.lt_s if - local.get $8 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $7 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $2 + local.get $3 select return end i32.const 7840 local.set $1 - local.get $8 + local.get $5 call $~lib/string/String#get:length - local.set $5 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $5 + local.get $8 if local.get $1 - local.get $1 - local.get $8 + local.tee $2 + local.get $5 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $7 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -9203,21 +9192,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -9277,21 +9266,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9433,14 +9422,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10103,169 +10092,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10292,14 +10280,14 @@ local.get $1 i32.const 255 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -10448,169 +10436,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10632,169 +10619,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10820,70 +10806,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 @@ -10892,68 +10878,67 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -10962,24 +10947,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -11136,21 +11121,21 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $4 + local.set $0 i32.const 16 i32.const 27 call $~lib/rt/tlsf/__alloc - local.tee $0 + local.tee $4 local.get $3 i32.store offset=12 - local.get $0 + local.get $4 local.get $2 i32.store offset=8 - local.get $0 local.get $4 - i32.store offset=4 local.get $0 + i32.store offset=4 local.get $4 + local.get $0 call $~lib/rt/pure/__retain i32.store i32.const 0 @@ -11168,8 +11153,8 @@ i32.load local.tee $5 if + local.get $0 local.get $1 - local.get $4 i32.add local.get $5 i32.load offset=4 @@ -11196,7 +11181,7 @@ local.get $3 i32.lt_s if - local.get $4 + local.get $0 local.get $2 i32.const 2 i32.shl @@ -11211,7 +11196,7 @@ br $for-loop|2 end end - local.get $0 + local.get $4 call $~lib/rt/pure/__retain ) (func $start:std/array @@ -17472,7 +17457,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 local.get $1 i32.load offset=12 i32.const 0 @@ -17480,7 +17465,7 @@ select local.tee $4 i32.add - local.tee $3 + local.tee $2 i32.const 268435452 i32.gt_u if @@ -17491,23 +17476,23 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 2 i32.const 7 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $2 + local.get $3 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/memory/memory.copy - local.get $2 + local.get $0 local.get $5 i32.add local.get $1 @@ -17518,7 +17503,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19208,14 +19193,14 @@ (local $3 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $2 + local.set $1 local.get $0 local.get $0 i32.load offset=12 local.tee $3 i32.const 1 i32.add - local.tee $1 + local.tee $2 i32.const 2 call $~lib/array/ensureSize local.get $0 @@ -19224,15 +19209,15 @@ i32.const 2 i32.shl i32.add - local.get $2 + local.get $1 call $~lib/rt/pure/__retain i32.store local.get $0 - local.get $1 - i32.store offset=12 local.get $2 - call $~lib/rt/pure/__release + i32.store offset=12 local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) (func $~lib/array/Array<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19251,9 +19236,9 @@ i32.const 0 local.get $1 select - local.tee $4 - i32.add local.tee $5 + i32.add + local.tee $3 i32.const 268435452 i32.gt_u if @@ -19264,15 +19249,15 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 i32.const 2 i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $6 i32.load offset=4 - local.set $6 + local.set $3 local.get $2 i32.const 2 i32.shl @@ -19281,49 +19266,49 @@ i32.load offset=4 local.set $0 loop $for-loop|0 - local.get $3 + local.get $4 local.get $2 i32.lt_u if local.get $3 - local.get $6 + local.get $4 i32.add local.get $0 - local.get $3 + local.get $4 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $4 i32.const 4 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end local.get $2 - local.get $6 + local.get $3 i32.add - local.set $3 + local.set $4 local.get $1 i32.load offset=4 - local.set $2 - local.get $4 + local.set $3 + local.get $5 i32.const 2 i32.shl - local.set $4 + local.set $2 i32.const 0 local.set $0 loop $for-loop|1 local.get $0 - local.get $4 + local.get $2 i32.lt_u if local.get $0 - local.get $3 + local.get $4 i32.add local.get $0 - local.get $2 + local.get $3 i32.add i32.load call $~lib/rt/pure/__retain @@ -19337,7 +19322,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $6 ) (func $~lib/array/Array<~lib/string/String>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -20655,12 +20640,12 @@ local.get $0 local.get $1 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 local.get $2 call $~lib/array/Array<~lib/string/String>#indexOf i32.const 0 i32.ge_s - local.get $1 + local.get $0 call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#indexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 1684b2599c..b0dafe80b1 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 7fdfbd1f09..1fc37200c5 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index a90c0b89c9..e1e10c778f 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -177,7 +177,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -185,11 +185,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1379,55 +1379,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_s i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -1435,72 +1435,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -2406,55 +2406,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_s i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load8_s offset=1 i32.store8 offset=1 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -2462,72 +2462,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -2751,55 +2751,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load i32.store - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load call $~lib/util/hash/hash32 local.get $1 @@ -2807,73 +2807,73 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 + local.get $6 + call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -3611,55 +3611,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_u i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -3667,72 +3667,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3977,55 +3977,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_u i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load8_u offset=1 i32.store8 offset=1 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -4033,72 +4033,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -4881,55 +4881,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_s i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -4937,72 +4937,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -5305,55 +5305,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_s i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load16_s offset=2 i32.store16 offset=2 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -5361,72 +5361,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6178,55 +6178,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_u i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6234,72 +6234,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6548,55 +6548,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_u i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load16_u offset=2 i32.store16 offset=2 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6604,72 +6604,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -8631,55 +8631,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i64.load i64.store - local.get $2 local.get $3 + local.get $2 i32.load offset=8 i32.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -8687,72 +8687,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=12 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 16 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 16 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32) @@ -9120,55 +9120,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i64.load i64.store - local.get $2 local.get $3 + local.get $2 i64.load offset=8 i64.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -9176,72 +9176,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=16 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 24 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 24 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32) @@ -10593,55 +10593,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f32.load f32.store - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -10650,72 +10650,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32) @@ -10996,55 +10996,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f32.load f32.store - local.get $2 local.get $3 + local.get $2 f32.load offset=4 f32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -11053,72 +11053,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32) @@ -11829,55 +11829,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f64.load f64.store - local.get $2 local.get $3 + local.get $2 i32.load offset=8 i32.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -11886,72 +11886,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=12 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 16 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 16 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32) @@ -12232,55 +12232,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f64.load f64.store - local.get $2 local.get $3 + local.get $2 f64.load offset=8 f64.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -12289,72 +12289,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=16 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 24 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 24 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 466babd55c..e9c68a62b6 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -1045,9 +1045,7 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 f64) - (local $6 f64) - (local $7 i32) + (local $5 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -1089,7 +1087,7 @@ return end i32.const -54 - local.set $7 + local.set $5 local.get $0 f64.const 18014398509481984 f64.mul @@ -1122,7 +1120,6 @@ end end end - f64.const 0.5 local.get $2 i64.const 4294967295 i64.and @@ -1142,27 +1139,27 @@ f64.const 1 f64.sub local.tee $3 - f64.mul - local.get $3 - f64.mul - local.set $4 - local.get $3 f64.const 2 local.get $3 f64.add f64.div - local.tee $5 - local.get $5 - f64.mul - local.tee $6 - local.get $6 + local.tee $4 + local.get $4 f64.mul local.set $0 - local.get $5 local.get $4 - local.get $6 + f64.const 0.5 + local.get $3 + f64.mul + local.get $3 + f64.mul + local.tee $4 + local.get $0 f64.const 0.6666666666666735 local.get $0 + local.get $0 + f64.mul + local.tee $0 f64.const 0.2857142874366239 local.get $0 f64.const 0.1818357216161805 @@ -1189,7 +1186,7 @@ f64.add f64.add f64.mul - local.get $7 + local.get $5 local.get $1 i32.const 20 i32.shr_s @@ -1403,30 +1400,30 @@ local.get $1 f32.add f32.div - local.tee $0 - local.get $0 + local.tee $4 + local.get $4 f32.mul local.tee $6 local.get $6 f32.mul - local.set $4 - local.get $0 + local.set $0 + local.get $4 f32.const 0.5 local.get $1 f32.mul local.get $1 f32.mul - local.tee $0 + local.tee $4 local.get $6 f32.const 0.6666666269302368 - local.get $4 + local.get $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $4 + local.get $0 f32.const 0.40000972151756287 - local.get $4 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -1436,17 +1433,17 @@ f32.mul local.get $3 f32.convert_i32_s - local.tee $4 + local.tee $0 f32.const 9.05800061445916e-06 f32.mul local.get $5 f32.add f32.add - local.get $0 + local.get $4 f32.sub local.get $1 f32.add - local.get $4 + local.get $0 f32.const 0.6931381225585938 f32.mul f32.add @@ -1455,8 +1452,7 @@ (local $1 i32) (local $2 f32) (local $3 f32) - (local $4 f32) - (local $5 i32) + (local $4 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -1494,7 +1490,7 @@ return end i32.const -25 - local.set $5 + local.set $4 local.get $0 f32.const 33554432 f32.mul @@ -1536,9 +1532,6 @@ local.tee $3 local.get $3 f32.mul - local.tee $4 - local.get $4 - f32.mul local.set $2 local.get $3 f32.const 0.5 @@ -1547,9 +1540,12 @@ local.get $0 f32.mul local.tee $3 - local.get $4 + local.get $2 f32.const 0.6666666269302368 local.get $2 + local.get $2 + f32.mul + local.tee $2 f32.const 0.2849878668785095 f32.mul f32.add @@ -1564,7 +1560,7 @@ f32.add f32.add f32.mul - local.get $5 + local.get $4 local.get $1 i32.const 23 i32.shr_s @@ -2835,10 +2831,10 @@ end local.get $0 i32.reinterpret_f32 - local.set $4 + local.set $3 local.get $1 i32.reinterpret_f32 - local.tee $3 + local.tee $4 i32.const 1065353216 i32.eq if @@ -2846,24 +2842,24 @@ call $~lib/math/NativeMathf.atan return end - local.get $3 + local.get $4 i32.const 30 i32.shr_u i32.const 2 i32.and - local.get $4 + local.get $3 i32.const 31 i32.shr_u i32.or local.set $2 - local.get $3 + local.get $4 i32.const 2147483647 i32.and - local.set $3 - local.get $4 + local.set $4 + local.get $3 i32.const 2147483647 i32.and - local.tee $4 + local.tee $3 i32.eqz if block $break|0 @@ -2898,10 +2894,10 @@ end end block $folding-inner0 - local.get $3 + local.get $4 i32.eqz br_if $folding-inner0 - local.get $3 + local.get $4 i32.const 2139095040 i32.eq if @@ -2917,7 +2913,7 @@ i32.const 2 i32.and select - local.get $4 + local.get $3 i32.const 2139095040 i32.eq select @@ -2932,20 +2928,20 @@ return end i32.const 1 - local.get $4 + local.get $3 i32.const 2139095040 i32.eq - local.get $3 + local.get $4 i32.const 218103808 i32.add - local.get $4 + local.get $3 i32.lt_u select br_if $folding-inner0 - local.get $4 + local.get $3 i32.const 218103808 i32.add - local.get $3 + local.get $4 i32.lt_u i32.const 0 local.get $2 @@ -3114,20 +3110,20 @@ i64.const -1073741824 i64.and f64.reinterpret_i64 - local.tee $1 - local.get $1 + local.tee $0 + local.get $0 f64.mul f64.div - local.set $0 - local.get $1 - local.get $1 + local.set $1 + local.get $0 local.get $0 local.get $1 + local.get $0 f64.sub f64.const 2 - local.get $1 - f64.mul local.get $0 + f64.mul + local.get $1 f64.add f64.div f64.mul @@ -3285,8 +3281,8 @@ (local $4 i64) (local $5 i64) (local $6 i64) - (local $7 i64) - (local $8 i32) + (local $7 i32) + (local $8 i64) (local $9 i64) (local $10 i64) (local $11 i64) @@ -3298,7 +3294,7 @@ i64.shr_s i64.const 1045 i64.sub - local.tee $4 + local.tee $2 i64.const 6 i64.shr_s i32.wrap_i64 @@ -3306,45 +3302,45 @@ i32.shl i32.const 1064 i32.add - local.tee $8 + local.tee $7 i64.load - local.set $5 - local.get $8 + local.set $6 + local.get $7 i64.load offset=8 - local.set $2 - local.get $8 + local.set $4 + local.get $7 i64.load offset=16 local.set $1 - local.get $4 + local.get $2 i64.const 63 i64.and - local.tee $4 + local.tee $2 i64.const 0 i64.ne if - local.get $5 - local.get $4 - i64.shl + local.get $6 local.get $2 - i64.const 64 + i64.shl local.get $4 + i64.const 64 + local.get $2 i64.sub local.tee $3 i64.shr_u i64.or - local.set $5 - local.get $2 + local.set $6 local.get $4 + local.get $2 i64.shl local.get $1 local.get $3 i64.shr_u i64.or - local.set $2 + local.set $4 local.get $1 - local.get $4 + local.get $2 i64.shl - local.get $8 + local.get $7 i64.load offset=24 local.get $3 i64.shr_u @@ -3356,41 +3352,41 @@ i64.and i64.const 4503599627370496 i64.or - local.tee $4 + local.tee $2 i64.const 4294967295 i64.and local.tee $3 - local.get $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $8 i64.mul - local.get $2 + local.get $4 i64.const 4294967295 i64.and - local.tee $6 + local.tee $5 local.get $3 i64.mul local.tee $9 i64.const 32 i64.shr_u i64.add - local.set $2 - local.get $6 - local.get $4 + local.set $4 + local.get $5 + local.get $2 i64.const 32 i64.shr_u - local.tee $6 + local.tee $5 i64.mul - local.get $2 + local.get $4 i64.const 4294967295 i64.and i64.add local.set $3 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i64.mul - local.get $2 + local.get $4 i64.const 32 i64.shr_u i64.add @@ -3399,14 +3395,19 @@ i64.shr_u i64.add global.set $~lib/math/res128_hi + global.get $~lib/math/res128_hi + local.get $2 + local.get $6 + i64.mul + i64.add local.get $1 i64.const 32 i64.shr_u - local.get $4 + local.get $2 i64.const 32 i64.shr_s i64.mul - local.tee $2 + local.tee $4 local.get $9 i64.const 4294967295 i64.and @@ -3415,66 +3416,60 @@ i64.shl i64.add i64.add - local.tee $3 - local.get $2 + local.tee $2 + local.get $4 i64.lt_u i64.extend_i32_u - global.get $~lib/math/res128_hi - local.get $4 - local.get $5 - i64.mul - i64.add i64.add - local.tee $9 + local.tee $8 i64.const 2 i64.shl - local.get $3 + local.get $2 i64.const 62 i64.shr_u i64.or - local.tee $4 + local.tee $6 i64.const 63 i64.shr_s local.tee $1 i64.const 1 i64.shr_s - local.get $4 + local.get $6 i64.xor - local.tee $5 + local.tee $3 i64.clz - local.set $2 - local.get $5 - local.get $2 + local.set $4 + local.get $3 + local.get $4 i64.shl local.get $1 - local.get $3 + local.get $2 i64.const 2 i64.shl i64.xor - local.tee $10 + local.tee $5 i64.const 64 - local.get $2 + local.get $4 i64.sub i64.shr_u i64.or - local.tee $5 - i64.const 32 - i64.shr_u - local.set $3 - local.get $5 + local.tee $2 i64.const 4294967295 i64.and - local.tee $6 + local.set $3 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $9 i64.const 560513588 i64.mul - local.set $7 local.get $3 - i64.const 560513588 - i64.mul - local.get $6 i64.const 3373259426 i64.mul - local.get $7 + local.get $3 + i64.const 560513588 + i64.mul + local.tee $10 i64.const 32 i64.shr_u i64.add @@ -3482,52 +3477,52 @@ i64.const 4294967295 i64.and i64.add - local.set $6 - local.get $3 + local.set $3 + local.get $9 i64.const 3373259426 i64.mul local.get $11 i64.const 32 i64.shr_u i64.add - local.get $6 + local.get $3 i64.const 32 i64.shr_u i64.add global.set $~lib/math/res128_hi - local.get $7 + local.get $10 i64.const 4294967295 i64.and - local.get $6 + local.get $3 i64.const 32 i64.shl i64.add local.tee $3 f64.const 3.753184150245214e-04 - local.get $5 + local.get $2 f64.convert_i64_u f64.mul f64.const 3.834951969714103e-04 - local.get $10 - local.get $2 - i64.shl + local.get $5 + local.get $4 + i64.shl f64.convert_i64_u f64.mul f64.add i64.trunc_f64_u - local.tee $5 + local.tee $2 i64.lt_u i64.extend_i32_u global.get $~lib/math/res128_hi - local.tee $7 + local.tee $5 i64.const 11 i64.shr_u i64.add f64.convert_i64_u global.set $~lib/math/rempio2_y0 f64.const 5.421010862427522e-20 + local.get $2 local.get $5 - local.get $7 i64.const 53 i64.shl local.get $3 @@ -3540,12 +3535,12 @@ global.set $~lib/math/rempio2_y1 global.get $~lib/math/rempio2_y0 i64.const 4372995238176751616 - local.get $2 + local.get $4 i64.const 52 i64.shl i64.sub local.get $0 - local.get $4 + local.get $6 i64.xor i64.const -9223372036854775808 i64.and @@ -3558,7 +3553,7 @@ local.get $12 f64.mul global.set $~lib/math/rempio2_y1 - local.get $9 + local.get $8 i64.const 62 i64.shr_s local.get $1 @@ -3570,72 +3565,70 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i32) (local $6 i32) (local $7 f64) - (local $8 i32) local.get $0 i64.reinterpret_f64 local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 31 i32.shr_u - local.set $8 - local.get $6 + local.set $6 + local.get $5 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1072243195 i32.le_u if - local.get $6 + local.get $5 i32.const 1044816030 i32.lt_u if f64.const 1 return end - local.get $0 - local.get $0 - f64.mul - local.tee $4 - local.get $4 - f64.mul - local.set $5 f64.const 1 f64.const 0.5 - local.get $4 + local.get $0 + local.get $0 f64.mul local.tee $3 + f64.mul + local.tee $4 f64.sub local.tee $1 f64.const 1 local.get $1 f64.sub - local.get $3 - f64.sub - local.get $4 local.get $4 + f64.sub + local.get $3 + local.get $3 f64.const 0.0416666666666666 - local.get $4 + local.get $3 f64.const -0.001388888888887411 - local.get $4 + local.get $3 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $5 - local.get $5 + local.get $3 + local.get $3 f64.mul - f64.const -2.7557314351390663e-07 + local.tee $4 local.get $4 + f64.mul + f64.const -2.7557314351390663e-07 + local.get $3 f64.const 2.087572321298175e-09 - local.get $4 + local.get $3 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3652,7 +3645,7 @@ f64.add return end - local.get $6 + local.get $5 i32.const 2146435072 i32.ge_u if @@ -3668,28 +3661,28 @@ i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1094263291 i32.lt_u if - local.get $6 + local.get $5 i32.const 20 i32.shr_u - local.tee $8 + local.tee $6 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $5 + local.tee $3 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $5 + local.get $3 f64.const 6.077100506506192e-11 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3704,25 +3697,25 @@ i32.const 16 i32.gt_u if - local.get $5 + local.get $3 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $5 + local.get $3 f64.const 6.077100506303966e-11 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $3 + local.get $4 f64.sub f64.sub - local.set $3 - local.get $8 + local.set $4 + local.get $6 local.get $0 - local.get $3 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3737,24 +3730,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $5 + local.get $3 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $5 + local.get $3 f64.const 2.0222662487111665e-21 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $3 + local.get $4 f64.sub f64.sub - local.set $3 + local.set $4 local.get $0 - local.get $3 + local.get $4 f64.sub else local.get $1 @@ -3766,70 +3759,69 @@ local.get $0 local.get $1 f64.sub - local.get $3 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 - local.get $5 + 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 $6 + local.tee $5 i32.sub + local.get $5 local.get $6 - local.get $8 select end - local.set $8 + local.set $6 global.get $~lib/math/rempio2_y0 - local.set $4 + local.set $3 global.get $~lib/math/rempio2_y1 - local.set $5 - local.get $8 + local.set $4 + local.get $6 i32.const 1 i32.and if (result f64) - f64.const 0.00833333333332249 - local.get $4 + 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.tee $3 + local.get $1 + f64.const 0.00833333333332249 + local.get $0 f64.const -1.984126982985795e-04 - local.get $3 + local.get $0 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $3 - local.get $3 + local.get $0 + local.get $0 + local.get $0 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $0 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $0 - local.get $4 - local.get $3 - f64.const 0.5 - local.get $5 - f64.mul - local.get $3 - local.get $4 - f64.mul - local.tee $1 - local.get $0 f64.mul f64.sub f64.mul - local.get $5 + local.get $4 f64.sub local.get $1 f64.const -0.16666666666666632 @@ -3837,44 +3829,43 @@ f64.sub f64.sub else - local.get $4 - local.get $4 - f64.mul - local.tee $7 - local.get $7 - f64.mul - local.set $3 f64.const 1 f64.const 0.5 - local.get $7 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.mul local.tee $1 f64.sub - local.tee $0 + local.tee $7 f64.const 1 - local.get $0 + local.get $7 f64.sub local.get $1 f64.sub - local.get $7 - local.get $7 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $7 + local.get $0 f64.const -0.001388888888887411 - local.get $7 + local.get $0 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $3 - local.get $3 + local.get $0 + local.get $0 + f64.mul + local.tee $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $7 + local.get $0 f64.const 2.087572321298175e-09 - local.get $7 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3883,8 +3874,8 @@ f64.mul f64.add f64.mul + local.get $3 local.get $4 - local.get $5 f64.mul f64.sub f64.add @@ -3894,7 +3885,7 @@ local.get $0 f64.neg local.get $0 - local.get $8 + local.get $6 i32.const 1 i32.add i32.const 2 @@ -3924,14 +3915,17 @@ (local $4 f64) (local $5 i64) (local $6 i64) - (local $7 i32) + (local $7 i64) (local $8 i64) + (local $9 i32) + (local $10 i32) + (local $11 i64) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 31 i32.shr_u - local.set $7 + local.set $10 local.get $1 i32.const 2147483647 i32.and @@ -3951,24 +3945,24 @@ local.tee $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4017,51 +4011,32 @@ i32.const 152 i32.sub local.tee $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.set $5 - 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $1 + local.tee $9 i64.load - local.get $5 - i64.shl - local.get $1 + local.set $6 + local.get $9 i64.load offset=8 - local.tee $6 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + 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 $6 + local.get $7 local.get $5 i64.const 32 i64.sub i64.shl - local.get $1 + local.get $9 i64.load offset=16 i64.const 96 local.get $5 @@ -4069,29 +4044,52 @@ i64.shr_u i64.or else - local.get $6 + 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 $5 + local.tee $6 i64.const 2 i64.shl - local.tee $6 + local.tee $8 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $6 i64.const 62 i64.shr_u - local.get $6 + local.get $8 i64.const 63 i64.shr_u i64.add @@ -4099,7 +4097,7 @@ local.tee $1 i32.sub local.get $1 - local.get $7 + local.get $10 select end local.set $1 @@ -4141,24 +4139,24 @@ local.get $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4186,28 +4184,27 @@ ) (func $~lib/math/NativeMath.expm1 (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i32) + (local $2 i32) + (local $3 f64) (local $4 f64) - (local $5 i32) - (local $6 f64) + (local $5 f64) + (local $6 i32) (local $7 i32) (local $8 i64) local.get $0 i64.reinterpret_f64 local.tee $8 - i64.const 32 + i64.const 63 i64.shr_u - i64.const 2147483647 - i64.and i32.wrap_i64 - local.set $5 + local.set $7 local.get $8 - i64.const 63 + i64.const 32 i64.shr_u + i64.const 2147483647 + i64.and i32.wrap_i64 - local.set $7 - local.get $5 + local.tee $6 i32.const 1078159482 i32.ge_u if @@ -4233,7 +4230,7 @@ return end end - local.get $5 + local.get $6 i32.const 1071001154 i32.gt_u if @@ -4251,18 +4248,18 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $5 + local.get $6 i32.const 1072734898 i32.lt_u select - local.tee $3 + local.tee $2 f64.convert_i32_s local.tee $1 f64.const 0.6931471803691238 f64.mul f64.sub - local.tee $4 - local.get $4 + local.tee $0 + local.get $0 local.get $1 f64.const 1.9082149292705877e-10 f64.mul @@ -4272,9 +4269,9 @@ f64.sub local.get $1 f64.sub - local.set $4 + local.set $3 else - local.get $5 + local.get $6 i32.const 1016070144 i32.lt_u if @@ -4286,27 +4283,27 @@ f64.const 0.5 local.get $0 f64.mul - local.tee $2 + local.tee $4 f64.mul - local.tee $1 - local.get $1 + local.tee $5 + local.get $5 f64.mul - local.set $6 + local.set $1 f64.const 3 f64.const 1 - local.get $1 + local.get $5 f64.const -0.03333333333333313 f64.mul f64.add - local.get $6 - f64.const 1.5873015872548146e-03 local.get $1 + f64.const 1.5873015872548146e-03 + local.get $5 f64.const -7.93650757867488e-05 f64.mul f64.add - local.get $6 - f64.const 4.008217827329362e-06 local.get $1 + f64.const 4.008217827329362e-06 + local.get $5 f64.const -2.0109921818362437e-07 f64.mul f64.add @@ -4314,59 +4311,59 @@ f64.add f64.mul f64.add - local.tee $6 - local.get $2 + local.tee $1 + local.get $4 f64.mul f64.sub - local.set $2 + local.set $4 + local.get $5 local.get $1 - local.get $6 - local.get $2 + local.get $4 f64.sub f64.const 6 local.get $0 - local.get $2 + local.get $4 f64.mul f64.sub f64.div f64.mul - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.eqz if local.get $0 local.get $0 - local.get $2 - f64.mul local.get $1 + f64.mul + local.get $5 f64.sub f64.sub return end local.get $0 - local.get $2 - local.get $4 + local.get $1 + local.get $3 f64.sub f64.mul - local.get $4 + local.get $3 f64.sub - local.get $1 + local.get $5 f64.sub - local.set $1 - local.get $3 + local.set $3 + local.get $2 i32.const -1 i32.eq if f64.const 0.5 local.get $0 - local.get $1 + local.get $3 f64.sub f64.mul f64.const 0.5 f64.sub return end - local.get $3 + local.get $2 i32.const 1 i32.eq if @@ -4375,7 +4372,7 @@ f64.lt if f64.const -2 - local.get $1 + local.get $3 local.get $0 f64.const 0.5 f64.add @@ -4386,13 +4383,13 @@ f64.const 1 f64.const 2 local.get $0 - local.get $1 + local.get $3 f64.sub f64.mul f64.add return end - local.get $3 + local.get $2 i64.extend_i32_s i64.const 1023 i64.add @@ -4401,16 +4398,16 @@ f64.reinterpret_i64 local.set $4 i32.const 1 - local.get $3 + local.get $2 i32.const 56 i32.gt_s - local.get $3 + local.get $2 i32.const 0 i32.lt_s select if local.get $0 - local.get $1 + local.get $3 f64.sub f64.const 1 f64.add @@ -4422,7 +4419,7 @@ local.get $0 local.get $4 f64.mul - local.get $3 + local.get $2 i32.const 1024 i32.eq select @@ -4433,22 +4430,22 @@ local.get $0 f64.const 1 i64.const 1023 - local.get $3 + local.get $2 i64.extend_i32_s i64.sub i64.const 52 i64.shl f64.reinterpret_i64 - local.tee $2 + local.tee $1 f64.sub - local.get $1 + local.get $3 f64.sub f64.const 1 + local.get $3 local.get $1 - local.get $2 f64.add f64.sub - local.get $3 + local.get $2 i32.const 20 i32.lt_s select @@ -4458,8 +4455,8 @@ ) (func $~lib/math/NativeMath.exp (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i32) + (local $2 i32) + (local $3 f64) (local $4 i32) (local $5 f64) (local $6 i32) @@ -4469,14 +4466,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 31 i32.shr_u local.set $6 - local.get $3 + local.get $2 i32.const 2147483647 i32.and - local.tee $3 + local.tee $2 i32.const 1082532651 i32.ge_u if @@ -4504,12 +4501,12 @@ return end end - local.get $3 + local.get $2 i32.const 1071001154 i32.gt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1072734898 i32.ge_u if (result i32) @@ -4542,7 +4539,7 @@ f64.sub local.set $0 else - local.get $3 + local.get $2 i32.const 1043333120 i32.gt_u if (result f64) @@ -4558,25 +4555,25 @@ local.get $0 local.get $0 f64.mul - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.mul local.set $5 f64.const 1 local.get $0 local.get $0 - local.get $2 + local.get $3 f64.const 0.16666666666666602 f64.mul local.get $5 f64.const -2.7777777777015593e-03 - local.get $2 + local.get $3 f64.const 6.613756321437934e-05 f64.mul f64.add local.get $5 f64.const -1.6533902205465252e-06 - local.get $2 + local.get $3 f64.const 4.1381367970572385e-08 f64.mul f64.add @@ -4585,10 +4582,10 @@ f64.mul f64.add f64.sub - local.tee $2 + local.tee $0 f64.mul f64.const 2 - local.get $2 + local.get $0 f64.sub f64.div local.get $7 @@ -4688,25 +4685,24 @@ (local $1 f32) (local $2 f32) (local $3 i32) - (local $4 f32) - (local $5 i32) + (local $4 i32) + (local $5 f32) (local $6 i32) (local $7 f32) local.get $0 i32.reinterpret_f32 - local.tee $6 - i32.const 2147483647 - i32.and - local.set $5 - local.get $6 + local.tee $4 i32.const 31 i32.shr_u local.set $6 - local.get $5 + local.get $4 + i32.const 2147483647 + i32.and + local.tee $4 i32.const 1100331076 i32.ge_u if - local.get $5 + local.get $4 i32.const 2139095040 i32.gt_u if @@ -4728,7 +4724,7 @@ return end end - local.get $5 + local.get $4 i32.const 1051816472 i32.gt_u if @@ -4746,19 +4742,19 @@ f32.copysign f32.add i32.trunc_f32_s - local.get $5 + local.get $4 i32.const 1065686418 i32.lt_u select local.tee $3 f32.convert_i32_s - local.tee $1 + local.tee $0 f32.const 0.6931381225585938 f32.mul f32.sub - local.tee $4 - local.get $4 + local.tee $1 local.get $1 + local.get $0 f32.const 9.05800061445916e-06 f32.mul local.tee $1 @@ -4767,9 +4763,9 @@ f32.sub local.get $1 f32.sub - local.set $4 + local.set $5 else - local.get $5 + local.get $4 i32.const 855638016 i32.lt_u if @@ -4824,10 +4820,10 @@ end local.get $0 local.get $2 - local.get $4 + local.get $5 f32.sub f32.mul - local.get $4 + local.get $5 f32.sub local.get $1 f32.sub @@ -4877,7 +4873,7 @@ i32.const 23 i32.shl f32.reinterpret_i32 - local.set $4 + local.set $5 i32.const 1 local.get $3 i32.const 56 @@ -4898,7 +4894,7 @@ f32.const 1701411834604692317316873e14 f32.mul local.get $0 - local.get $4 + local.get $5 f32.mul local.get $3 i32.const 128 @@ -4930,7 +4926,7 @@ i32.lt_s select f32.add - local.get $4 + local.get $5 f32.mul ) (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32) @@ -5396,27 +5392,27 @@ ) (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32) (local $1 f64) - (local $2 i64) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 f64) + (local $4 f64) + (local $5 i64) block $~lib/util/math/exp2f_lut|inlined.0 (result f32) local.get $0 f64.promote_f32 local.set $1 local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 20 i32.shr_u i32.const 2047 i32.and - local.tee $4 + local.tee $3 i32.const 1072 i32.ge_u if f32.const 0 - local.get $3 + local.get $2 i32.const -8388608 i32.eq br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5424,7 +5420,7 @@ local.get $0 local.get $0 f32.add - local.get $4 + local.get $3 i32.const 2040 i32.ge_u br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5444,15 +5440,12 @@ br_if $~lib/util/math/exp2f_lut|inlined.0 drop end + f64.const 0.6931471806916203 + local.get $1 local.get $1 f64.const 211106232532992 f64.add - local.tee $5 - i64.reinterpret_f64 - local.set $2 - f64.const 0.6931471806916203 - local.get $1 - local.get $5 + local.tee $4 f64.const 211106232532992 f64.sub f64.sub @@ -5470,7 +5463,9 @@ f64.mul f64.mul f64.add - local.get $2 + local.get $4 + i64.reinterpret_f64 + local.tee $5 i32.wrap_i64 i32.const 31 i32.and @@ -5479,7 +5474,7 @@ i32.const 3336 i32.add i64.load - local.get $2 + local.get $5 i64.const 47 i64.shl i64.add @@ -5523,13 +5518,12 @@ (local $3 i64) (local $4 i64) (local $5 f64) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) (local $8 f64) (local $9 f64) - (local $10 f64) - (local $11 i32) - (local $12 f64) + (local $10 i32) + (local $11 f64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -5554,7 +5548,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 2047 i32.eq if @@ -5571,7 +5565,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $11 + local.tee $10 i32.const 2047 i32.eq select @@ -5579,8 +5573,8 @@ local.get $0 return end - local.get $11 - local.get $7 + local.get $10 + local.get $6 i32.sub i32.const 64 i32.gt_s @@ -5591,13 +5585,13 @@ return end f64.const 1 - local.set $10 - local.get $11 + local.set $9 + local.get $10 i32.const 1533 i32.gt_s if (result f64) f64.const 5260135901548373507240989e186 - local.set $10 + local.set $9 local.get $1 f64.const 1.90109156629516e-211 f64.mul @@ -5606,12 +5600,12 @@ f64.const 1.90109156629516e-211 f64.mul else - local.get $7 + local.get $6 i32.const 573 i32.lt_s if (result f64) f64.const 1.90109156629516e-211 - local.set $10 + local.set $9 local.get $1 f64.const 5260135901548373507240989e186 f64.mul @@ -5623,68 +5617,68 @@ local.get $0 end end - local.tee $0 - local.get $0 - local.get $0 + local.set $0 + local.get $1 + local.get $1 + local.get $1 f64.const 134217729 f64.mul - local.tee $12 + local.tee $11 f64.sub - local.get $12 + local.get $11 f64.add - local.tee $9 + local.tee $8 f64.sub - local.set $6 + local.set $5 + local.get $0 local.get $0 local.get $0 - f64.mul - local.set $5 - local.get $1 - local.get $1 - local.get $1 f64.const 134217729 f64.mul - local.tee $0 + local.tee $11 f64.sub - local.get $0 + local.get $11 f64.add - local.tee $8 + local.tee $7 f64.sub - local.set $12 - local.get $10 + local.set $11 + local.get $9 local.get $8 local.get $8 f64.mul local.get $1 local.get $1 f64.mul - local.tee $0 + local.tee $1 f64.sub f64.const 2 local.get $8 f64.mul - local.get $12 + local.get $5 f64.add - local.get $12 + local.get $5 f64.mul f64.add - local.get $9 - local.get $9 + local.get $7 + local.get $7 f64.mul - local.get $5 + local.get $0 + local.get $0 + f64.mul + local.tee $0 f64.sub f64.const 2 - local.get $9 + local.get $7 f64.mul - local.get $6 + local.get $11 f64.add - local.get $6 + local.get $11 f64.mul f64.add f64.add - local.get $0 + local.get $1 f64.add - local.get $5 + local.get $0 f64.add f64.sqrt f64.mul @@ -5835,16 +5829,19 @@ ) (func $~lib/math/NativeMath.log10 (param $0 f64) (result f64) (local $1 i32) - (local $2 f64) + (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i64) + (local $5 f64) (local $6 f64) (local $7 f64) (local $8 i32) + (local $9 f64) + (local $10 f64) + (local $11 f64) local.get $0 i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5859,7 +5856,7 @@ i32.shr_u end if - local.get $5 + local.get $2 i64.const 1 i64.shl i64.eqz @@ -5888,7 +5885,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5901,7 +5898,7 @@ local.get $0 return else - local.get $5 + local.get $2 i64.const 32 i64.shl i64.eqz @@ -5916,8 +5913,7 @@ end end end - f64.const 0.5 - local.get $5 + local.get $2 i64.const 4294967295 i64.and local.get $1 @@ -5936,43 +5932,64 @@ f64.const 1 f64.sub local.tee $0 - f64.mul - local.get $0 - f64.mul - local.set $3 - local.get $0 f64.const 2 local.get $0 f64.add f64.div - local.tee $6 - local.get $6 - f64.mul local.tee $4 local.get $4 f64.mul - local.set $2 + local.set $3 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $9 + f64.const 0.30102999566361177 + f64.mul + local.tee $10 + local.get $0 + f64.const 0.5 local.get $0 + f64.mul local.get $0 - local.get $3 + f64.mul + local.tee $5 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $6 + f64.const 0.4342944818781689 + f64.mul + local.tee $11 + f64.add + local.set $7 + local.get $9 + f64.const 3.694239077158931e-13 + f64.mul + local.get $0 + local.get $6 f64.sub - local.get $3 + local.get $5 f64.sub - local.get $6 - local.get $3 local.get $4 + local.get $5 + local.get $3 f64.const 0.6666666666666735 - local.get $2 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.const 0.2857142874366239 - local.get $2 + local.get $0 f64.const 0.1818357216161805 - local.get $2 + local.get $0 f64.const 0.14798198605116586 f64.mul f64.add @@ -5981,11 +5998,11 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $0 f64.const 0.3999999999940942 - local.get $2 + local.get $0 f64.const 0.22222198432149784 - local.get $2 + local.get $0 f64.const 0.15313837699209373 f64.mul f64.add @@ -5996,30 +6013,8 @@ f64.add f64.mul f64.add - local.set $0 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $3 - f64.const 0.30102999566361177 - f64.mul - local.tee $6 - local.get $7 - f64.const 0.4342944818781689 - f64.mul - local.tee $2 - f64.add - local.set $4 - local.get $3 - f64.const 3.694239077158931e-13 - f64.mul - local.get $0 - local.get $7 + local.tee $0 + local.get $6 f64.add f64.const 2.5082946711645275e-11 f64.mul @@ -6028,13 +6023,13 @@ f64.const 0.4342944818781689 f64.mul f64.add - local.get $6 - local.get $4 + local.get $10 + local.get $7 f64.sub - local.get $2 + local.get $11 f64.add f64.add - local.get $4 + local.get $7 f64.add ) (func $std/math/test_log10 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6058,8 +6053,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 f32) - (local $6 i32) + (local $5 i32) + (local $6 f32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6097,7 +6092,7 @@ return end i32.const -25 - local.set $6 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -6136,13 +6131,21 @@ local.get $0 f32.add f32.div - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f32.mul - local.tee $4 - local.get $4 + local.set $2 + local.get $5 + local.get $1 + i32.const 23 + i32.shr_u + i32.const 127 + i32.sub + i32.add + f32.convert_i32_s + local.tee $6 + f32.const 7.903415166765626e-07 f32.mul - local.set $3 local.get $0 local.get $0 f32.const 0.5 @@ -6156,22 +6159,25 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $5 + local.tee $4 f32.sub local.get $0 f32.sub - local.get $2 + local.get $3 local.get $0 - local.get $4 + local.get $2 f32.const 0.6666666269302368 - local.get $3 + local.get $2 + local.get $2 + f32.mul + local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $3 + local.get $0 f32.const 0.40000972151756287 - local.get $3 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -6180,20 +6186,8 @@ f32.add f32.mul f32.add - local.set $0 - local.get $6 - local.get $1 - i32.const 23 - i32.shr_u - i32.const 127 - i32.sub - i32.add - f32.convert_i32_s - local.tee $2 - f32.const 7.903415166765626e-07 - f32.mul - local.get $0 - local.get $5 + local.tee $0 + local.get $4 f32.add f32.const -3.168997136526741e-05 f32.mul @@ -6202,11 +6196,11 @@ f32.const 0.434326171875 f32.mul f32.add - local.get $5 + local.get $4 f32.const 0.434326171875 f32.mul f32.add - local.get $2 + local.get $6 f32.const 0.3010292053222656 f32.mul f32.add @@ -6243,16 +6237,18 @@ ) (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64) (local $1 i32) - (local $2 f64) + (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i64) + (local $5 f64) (local $6 f64) (local $7 f64) (local $8 i32) + (local $9 f64) + (local $10 f64) local.get $0 i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6267,7 +6263,7 @@ i32.shr_u end if - local.get $5 + local.get $2 i64.const 1 i64.shl i64.eqz @@ -6296,7 +6292,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6309,7 +6305,7 @@ local.get $0 return else - local.get $5 + local.get $2 i64.const 32 i64.shl i64.eqz @@ -6324,8 +6320,7 @@ end end end - f64.const 0.5 - local.get $5 + local.get $2 i64.const 4294967295 i64.and local.get $1 @@ -6344,11 +6339,6 @@ f64.const 1 f64.sub local.tee $0 - f64.mul - local.get $0 - f64.mul - local.set $3 - local.get $0 f64.const 2 local.get $0 f64.add @@ -6356,31 +6346,51 @@ local.tee $4 local.get $4 f64.mul - local.tee $6 - local.get $6 - f64.mul - local.set $2 + local.set $3 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $9 + local.get $0 + f64.const 0.5 local.get $0 + f64.mul local.get $0 - local.get $3 + f64.mul + local.tee $5 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $6 + f64.const 1.4426950407214463 + f64.mul + local.tee $10 + f64.add + local.set $7 + local.get $0 + local.get $6 f64.sub - local.get $3 + local.get $5 f64.sub local.get $4 + local.get $5 local.get $3 - local.get $6 f64.const 0.6666666666666735 - local.get $2 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.const 0.2857142874366239 - local.get $2 + local.get $0 f64.const 0.1818357216161805 - local.get $2 + local.get $0 f64.const 0.14798198605116586 f64.mul f64.add @@ -6389,11 +6399,11 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $0 f64.const 0.3999999999940942 - local.get $2 + local.get $0 f64.const 0.22222198432149784 - local.get $2 + local.get $0 f64.const 0.15313837699209373 f64.mul f64.add @@ -6404,24 +6414,8 @@ f64.add f64.mul f64.add - local.set $0 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $3 - local.get $7 - f64.const 1.4426950407214463 - f64.mul - local.tee $2 - f64.add - local.set $4 - local.get $0 - local.get $7 + local.tee $0 + local.get $6 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -6429,13 +6423,13 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $3 - local.get $4 + local.get $9 + local.get $7 f64.sub - local.get $2 + local.get $10 f64.add f64.add - local.get $4 + local.get $7 f64.add ) (func $std/math/test_log2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6459,8 +6453,7 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 f32) - (local $6 i32) + (local $5 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6498,7 +6491,7 @@ return end i32.const -25 - local.set $6 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -6540,9 +6533,6 @@ local.tee $3 local.get $3 f32.mul - local.tee $4 - local.get $4 - f32.mul local.set $2 local.get $0 local.get $0 @@ -6557,22 +6547,25 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $5 + local.tee $4 f32.sub local.get $0 f32.sub local.get $3 local.get $0 - local.get $4 + local.get $2 f32.const 0.6666666269302368 local.get $2 + local.get $2 + f32.mul + local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $2 + local.get $0 f32.const 0.40000972151756287 - local.get $2 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -6582,7 +6575,7 @@ f32.mul f32.add local.tee $0 - local.get $5 + local.get $4 f32.add f32.const -1.7605285393074155e-04 f32.mul @@ -6590,11 +6583,11 @@ f32.const 1.44287109375 f32.mul f32.add - local.get $5 + local.get $4 f32.const 1.44287109375 f32.mul f32.add - local.get $6 + local.get $5 local.get $1 i32.const 23 i32.shr_u @@ -6811,7 +6804,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i64.ge_u @@ -6826,36 +6818,39 @@ local.set $2 end local.get $2 + local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 - i64.sub - local.set $4 - local.get $7 - i64.const 63 i64.shl - local.get $2 - local.get $3 - i64.shl - local.tee $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - local.get $2 - i64.const 0 + local.set $2 local.get $4 + local.get $3 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $4 + local.tee $4 i64.const 0 i64.gt_s - select + if (result i64) + local.get $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + else + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + end + local.get $7 + i64.const 63 + i64.shl i64.or f64.reinterpret_i64 return @@ -7023,7 +7018,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i32.ge_u @@ -7038,31 +7032,34 @@ local.set $2 end local.get $2 + local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 - i32.sub - local.set $4 - local.get $2 - local.get $3 - i32.shl - local.tee $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 i32.shl - i32.or - local.get $2 - i32.const 1 + local.set $2 local.get $4 + local.get $3 i32.sub - i32.shr_u - local.get $4 + local.tee $4 i32.const 0 i32.gt_s - select + if (result i32) + local.get $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + else + local.get $2 + i32.const 1 + local.get $4 + i32.sub + i32.shr_u + end local.get $7 i32.or f32.reinterpret_i32 @@ -7082,22 +7079,23 @@ ) (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64) (local $2 f64) - (local $3 i32) + (local $3 f64) (local $4 i32) (local $5 i32) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) (local $8 i32) (local $9 i32) (local $10 f64) - (local $11 f64) + (local $11 i32) (local $12 i32) (local $13 f64) - (local $14 f64) - (local $15 i64) + (local $14 i64) + (local $15 f64) (local $16 i32) (local $17 f64) (local $18 i32) + (local $19 f64) local.get $1 f64.abs f64.const 2 @@ -7152,31 +7150,30 @@ end local.get $0 i64.reinterpret_f64 - local.tee $15 + local.tee $14 + i32.wrap_i64 + local.set $18 + local.get $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $16 - local.get $15 - i32.wrap_i64 - local.set $5 - local.get $16 + local.tee $16 i32.const 2147483647 i32.and local.set $4 local.get $1 i64.reinterpret_f64 - local.tee $15 + local.tee $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $8 i32.const 2147483647 i32.and - local.tee $8 - local.get $15 + local.tee $9 + local.get $14 i32.wrap_i64 - local.tee $18 + local.tee $6 i32.or i32.eqz if @@ -7184,18 +7181,18 @@ return end i32.const 1 - local.get $18 + local.get $6 i32.const 0 - local.get $8 + local.get $9 i32.const 2146435072 i32.eq select i32.const 1 - local.get $8 + local.get $9 i32.const 2146435072 i32.gt_s i32.const 1 - local.get $5 + local.get $18 i32.const 0 local.get $4 i32.const 2146435072 @@ -7217,47 +7214,47 @@ i32.const 0 i32.lt_s if (result i32) - local.get $8 + local.get $9 i32.const 1128267776 i32.ge_s if (result i32) i32.const 2 else - local.get $8 + local.get $9 i32.const 1072693248 i32.ge_s if (result i32) i32.const 52 i32.const 20 - local.get $8 + local.get $9 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $12 + local.tee $11 i32.const 20 i32.gt_s - local.tee $3 + local.tee $5 select - local.get $12 + local.get $11 i32.sub - local.set $9 + local.set $12 i32.const 2 - local.get $18 - local.get $8 - local.get $3 - select - local.tee $12 + local.get $6 local.get $9 + local.get $5 + select + local.tee $5 + local.get $12 i32.shr_u - local.tee $3 + local.tee $11 i32.const 1 i32.and i32.sub i32.const 0 + local.get $5 + local.get $11 local.get $12 - local.get $3 - local.get $9 i32.shl i32.eq select @@ -7268,15 +7265,15 @@ else i32.const 0 end - local.set $3 - local.get $18 + local.set $5 + local.get $6 i32.eqz if - local.get $8 + local.get $9 i32.const 2146435072 i32.eq if - local.get $5 + local.get $18 local.get $4 i32.const 1072693248 i32.sub @@ -7288,7 +7285,7 @@ if f64.const 0 local.get $1 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7297,7 +7294,7 @@ f64.const 0 local.get $1 f64.neg - local.get $7 + local.get $8 i32.const 0 i32.ge_s select @@ -7310,11 +7307,11 @@ end unreachable end - local.get $8 + local.get $9 i32.const 1072693248 i32.eq if - local.get $7 + local.get $8 i32.const 0 i32.ge_s if @@ -7326,7 +7323,7 @@ f64.div return end - local.get $7 + local.get $8 i32.const 1073741824 i32.eq if @@ -7335,7 +7332,7 @@ f64.mul return end - local.get $7 + local.get $8 i32.const 1071644672 i32.eq if @@ -7351,8 +7348,8 @@ end local.get $0 f64.abs - local.set $2 - local.get $5 + local.set $3 + local.get $18 i32.eqz if i32.const 1 @@ -7368,41 +7365,41 @@ select if f64.const 1 - local.get $2 + local.get $3 f64.div - local.get $2 - local.get $7 + local.get $3 + local.get $8 i32.const 0 i32.lt_s select - local.set $2 + local.set $3 local.get $16 i32.const 0 i32.lt_s if (result f64) - local.get $3 + local.get $5 local.get $4 i32.const 1072693248 i32.sub i32.or if (result f64) - local.get $2 + local.get $3 f64.neg - local.get $2 local.get $3 + local.get $5 i32.const 1 i32.eq select else - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $2 + local.get $3 end return end @@ -7411,7 +7408,7 @@ i32.const 0 i32.lt_s if (result f64) - local.get $3 + local.get $5 i32.eqz if local.get $0 @@ -7424,7 +7421,7 @@ end f64.const -1 f64.const 1 - local.get $3 + local.get $5 i32.const 1 i32.eq select @@ -7432,11 +7429,11 @@ f64.const 1 end local.set $10 - local.get $8 + local.get $9 i32.const 1105199104 i32.gt_s if (result f64) - local.get $8 + local.get $9 i32.const 1139802112 i32.gt_s if @@ -7446,7 +7443,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7458,7 +7455,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.gt_s select @@ -7479,7 +7476,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7499,19 +7496,19 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.gt_s select return end f64.const 1.4426950216293335 - local.get $2 + local.get $3 f64.const 1 f64.sub local.tee $0 f64.mul - local.tee $2 + local.tee $3 local.get $0 f64.const 1.9259629911266175e-08 f64.mul @@ -7537,10 +7534,10 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $11 + local.set $7 local.get $0 - local.get $11 - local.get $2 + local.get $7 + local.get $3 f64.sub f64.sub else @@ -7548,10 +7545,10 @@ i32.const 1048576 i32.lt_s if (result i32) - local.get $2 + local.get $3 f64.const 9007199254740992 f64.mul - local.tee $2 + local.tee $3 i64.reinterpret_f64 i64.const 32 i64.shr_u @@ -7567,30 +7564,30 @@ i32.const 1023 i32.sub i32.add - local.set $5 + local.set $6 local.get $4 i32.const 1048575 i32.and - local.tee $3 + local.tee $5 i32.const 1072693248 i32.or local.set $4 - local.get $3 + local.get $5 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $3 + local.get $5 i32.const 767610 i32.lt_s if (result i32) i32.const 1 else - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 local.get $4 i32.const -1048576 i32.add @@ -7598,8 +7595,9 @@ i32.const 0 end end - local.set $3 - local.get $2 + local.set $5 + f64.const 0.9617967009544373 + local.get $3 i64.reinterpret_f64 i64.const 4294967295 i64.and @@ -7609,30 +7607,64 @@ i64.shl i64.or f64.reinterpret_i64 - local.tee $11 + local.tee $7 f64.const 1.5 f64.const 1 - local.get $3 + local.get $5 select - local.tee $13 + local.tee $2 f64.sub - local.tee $6 + local.tee $3 f64.const 1 - local.get $11 - local.get $13 + local.get $7 + local.get $2 f64.add f64.div - local.tee $2 + local.tee $0 f64.mul local.tee $17 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $14 - local.get $2 - local.get $6 - local.get $14 + local.tee $15 + f64.const 3 + local.get $15 + local.get $15 + f64.mul + local.tee $19 + f64.add + local.get $17 + local.get $17 + f64.mul + local.tee $13 + local.get $13 + f64.mul + f64.const 0.5999999999999946 + local.get $13 + f64.const 0.4285714285785502 + local.get $13 + f64.const 0.33333332981837743 + local.get $13 + f64.const 0.272728123808534 + local.get $13 + f64.const 0.23066074577556175 + local.get $13 + f64.const 0.20697501780033842 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $0 + local.get $3 + local.get $15 local.get $4 i32.const 1 i32.shr_s @@ -7640,7 +7672,7 @@ i32.or i32.const 524288 i32.add - local.get $3 + local.get $5 i32.const 18 i32.shl i32.add @@ -7651,76 +7683,38 @@ local.tee $0 f64.mul f64.sub - local.get $14 - local.get $11 + local.get $15 + local.get $7 local.get $0 - local.get $13 + local.get $2 f64.sub f64.sub f64.mul f64.sub f64.mul - local.set $13 - local.get $17 - local.get $17 - f64.mul - local.tee $0 - local.get $0 - f64.mul - f64.const 0.5999999999999946 - local.get $0 - f64.const 0.4285714285785502 - local.get $0 - f64.const 0.33333332981837743 - local.get $0 - f64.const 0.272728123808534 - local.get $0 - f64.const 0.23066074577556175 - local.get $0 - f64.const 0.20697501780033842 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $13 - local.get $14 + local.tee $2 + local.get $15 local.get $17 f64.add f64.mul f64.add - local.set $6 - f64.const 0.9617967009544373 - local.get $14 - f64.const 3 - local.get $14 - local.get $14 - f64.mul local.tee $0 f64.add - local.get $6 - f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $11 + local.tee $7 f64.mul - local.tee $2 - local.get $13 - local.get $11 + local.tee $3 + local.get $2 + local.get $7 f64.mul - local.get $6 - local.get $11 + local.get $0 + local.get $7 f64.const 3 f64.sub - local.get $0 + local.get $19 f64.sub f64.sub local.get $17 @@ -7732,15 +7726,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 + local.tee $2 f64.mul - local.set $13 + local.tee $19 f64.const -7.028461650952758e-09 - local.get $6 + local.get $2 f64.mul local.get $0 - local.get $6 local.get $2 + local.get $3 f64.sub f64.sub f64.const 0.9617966939259756 @@ -7748,37 +7742,37 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $3 + local.get $5 select f64.add - local.tee $6 - local.get $13 - local.get $6 + local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $3 + local.get $5 select - local.tee $0 + local.tee $3 f64.add - local.get $5 + local.get $6 f64.convert_i32_s - local.tee $2 + local.tee $0 f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $11 + local.set $7 local.get $2 - f64.sub + local.get $7 local.get $0 f64.sub - local.get $13 + local.get $3 + f64.sub + local.get $19 f64.sub f64.sub end - local.set $2 + local.set $3 local.get $1 local.get $1 i64.reinterpret_f64 @@ -7787,133 +7781,134 @@ f64.reinterpret_i64 local.tee $0 f64.sub - local.get $11 + local.get $7 f64.mul local.get $1 - local.get $2 + local.get $3 f64.mul f64.add - local.tee $2 + local.tee $1 local.get $0 - local.get $11 + local.get $7 f64.mul - local.tee $6 + local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 - local.tee $15 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.set $9 - local.get $15 + local.tee $14 i32.wrap_i64 - local.set $3 + local.set $5 block $folding-inner1 block $folding-inner0 - local.get $9 + local.get $14 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $12 i32.const 1083179008 i32.ge_s if - local.get $3 - local.get $9 + local.get $5 + local.get $12 i32.const 1083179008 i32.sub i32.or - local.get $2 + local.get $1 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $6 + local.get $2 f64.sub f64.gt i32.or br_if $folding-inner0 else - local.get $9 + local.get $12 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $3 - local.get $9 + local.get $5 + local.get $12 i32.const -1064252416 i32.sub i32.or - local.get $2 + local.get $1 local.get $0 - local.get $6 + local.get $2 f64.sub f64.le i32.or select br_if $folding-inner1 end - local.get $9 + local.get $12 i32.const 2147483647 i32.and - local.tee $12 + local.tee $11 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.set $3 - local.get $12 + local.set $5 + i32.const 0 + local.set $6 + local.get $1 + local.get $11 i32.const 1071644672 i32.gt_s - if (result i32) - local.get $6 + if i32.const 1048575 - local.get $9 + local.get $12 i32.const 1048576 - local.get $3 + local.get $5 i32.const 1 i32.add i32.shr_s i32.add - local.tee $12 + local.tee $11 i32.const 2147483647 i32.and i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $3 + local.tee $5 i32.shr_s i32.const -1 i32.xor - local.get $12 + local.get $11 i32.and i64.extend_i32_s i64.const 32 i64.shl f64.reinterpret_i64 - f64.sub - local.set $6 + local.set $0 i32.const 0 - local.get $12 + local.get $11 i32.const 1048575 i32.and i32.const 1048576 i32.or i32.const 20 - local.get $3 + local.get $5 i32.sub i32.shr_s - local.tee $5 + local.tee $6 i32.sub - local.get $5 - local.get $9 + local.get $6 + local.get $12 i32.const 0 i32.lt_s select - else - i32.const 0 + local.set $6 + local.get $2 + local.get $0 + f64.sub + local.set $2 end - local.set $5 local.get $2 - local.get $6 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -7922,10 +7917,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $1 - local.get $2 + local.tee $3 + local.get $1 local.get $0 - local.get $6 + local.get $2 f64.sub f64.sub f64.const 0.6931471805599453 @@ -7934,23 +7929,17 @@ f64.const -1.904654299957768e-09 f64.mul f64.add - local.tee $0 + local.tee $1 f64.add - local.set $2 - local.get $0 + local.tee $2 local.get $2 - local.get $1 - f64.sub - f64.sub - local.set $1 + f64.mul + local.set $0 local.get $10 f64.const 1 local.get $2 local.get $2 - local.get $2 - local.get $2 - f64.mul - local.tee $0 + local.get $0 f64.const 0.16666666666666602 local.get $0 f64.const -2.7777777777015593e-03 @@ -7978,7 +7967,12 @@ f64.div local.get $1 local.get $2 - local.get $1 + local.get $3 + f64.sub + f64.sub + local.tee $0 + local.get $2 + local.get $0 f64.mul f64.add f64.sub @@ -7990,25 +7984,25 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.get $5 + local.get $6 i32.const 20 i32.shl i32.add - local.tee $3 + local.tee $5 i32.const 20 i32.shr_s i32.const 0 i32.le_s if (result f64) local.get $0 - local.get $5 + local.get $6 call $~lib/math/NativeMath.scalbn else local.get $0 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $3 + local.get $5 i64.extend_i32_s i64.const 32 i64.shl @@ -8133,23 +8127,24 @@ local.get $0 i32.reinterpret_f32 local.tee $4 - i32.const 31 - i32.shr_u - local.set $5 - local.get $4 i32.const 2147483647 i32.and - local.set $4 - local.get $1 - f32.nearest - local.get $1 - f32.eq - i32.const 0 - local.get $5 - select + local.set $6 + local.get $4 + i32.const 31 + i32.shr_u + local.tee $4 + if (result i32) + local.get $1 + f32.nearest + local.get $1 + f32.eq + else + i32.const 0 + end if i32.const 0 - local.set $5 + local.set $4 local.get $1 f32.const 0.5 f32.mul @@ -8166,15 +8161,15 @@ end local.get $1 i32.reinterpret_f32 - local.set $6 - local.get $4 + 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 $5 - local.get $6 i32.const 2147483647 i32.and i32.const 2139095040 @@ -8182,20 +8177,20 @@ i32.or select else - local.get $4 + local.get $6 if (result i32) - local.get $4 + 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 else - local.get $5 + local.get $4 if (result i32) i32.const 2143289344 else @@ -8318,7 +8313,7 @@ else i32.const 2139095040 i32.const 0 - local.get $6 + local.get $5 i32.const 31 i32.shr_u select @@ -9005,9 +9000,8 @@ (local $3 f64) (local $4 f64) (local $5 i32) - (local $6 f64) + (local $6 i32) (local $7 f64) - (local $8 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -9017,7 +9011,7 @@ local.tee $5 i32.const 31 i32.shr_u - local.set $8 + local.set $6 local.get $5 i32.const 2147483647 i32.and @@ -9032,38 +9026,36 @@ local.get $0 return end - f64.const 0.00833333333332249 + local.get $0 local.get $0 local.get $0 f64.mul - local.tee $4 + 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 $4 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $4 - local.get $4 - local.get $4 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $4 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $3 - local.get $0 - local.get $4 - local.get $0 - f64.mul - f64.const -0.16666666666666632 - local.get $4 - local.get $3 f64.mul f64.add f64.mul @@ -9093,21 +9085,21 @@ local.get $5 i32.const 20 i32.shr_u - local.tee $8 + local.tee $6 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $4 + local.tee $3 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $4 + local.get $3 f64.const 6.077100506506192e-11 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9122,25 +9114,25 @@ i32.const 16 i32.gt_u if - local.get $4 + local.get $3 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $4 + local.get $3 f64.const 6.077100506303966e-11 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $3 + local.get $4 f64.sub f64.sub - local.set $3 - local.get $8 + local.set $4 + local.get $6 local.get $0 - local.get $3 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9155,24 +9147,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $4 + local.get $3 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $4 + local.get $3 f64.const 2.0222662487111665e-21 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $3 + local.get $4 f64.sub f64.sub - local.set $3 + local.set $4 local.get $0 - local.get $3 + local.get $4 f64.sub else local.get $1 @@ -9184,10 +9176,10 @@ local.get $0 local.get $1 f64.sub - local.get $3 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 - local.get $4 + local.get $3 i32.trunc_f64_s br $~lib/math/rempio2|inlined.1 end @@ -9197,56 +9189,55 @@ local.tee $5 i32.sub local.get $5 - local.get $8 + local.get $6 select end - local.set $8 + local.set $6 global.get $~lib/math/rempio2_y0 - local.set $7 + local.set $3 global.get $~lib/math/rempio2_y1 local.set $4 - local.get $8 + local.get $6 i32.const 1 i32.and if (result f64) - local.get $7 - local.get $7 - f64.mul - local.tee $6 - local.get $6 - f64.mul - local.set $3 f64.const 1 f64.const 0.5 - local.get $6 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.mul local.tee $1 f64.sub - local.tee $0 + local.tee $7 f64.const 1 - local.get $0 + local.get $7 f64.sub local.get $1 f64.sub - local.get $6 - local.get $6 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $6 + local.get $0 f64.const -0.001388888888887411 - local.get $6 + local.get $0 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $3 - local.get $3 + local.get $0 + local.get $0 + f64.mul + local.tee $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $6 + local.get $0 f64.const 2.087572321298175e-09 - local.get $6 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -9255,48 +9246,47 @@ f64.mul f64.add f64.mul - local.get $7 + local.get $3 local.get $4 f64.mul f64.sub f64.add f64.add else - f64.const 0.00833333333332249 - local.get $7 - local.get $7 + local.get $3 + local.get $3 f64.mul - local.tee $3 - f64.const -1.984126982985795e-04 + 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 $3 - local.get $3 - local.get $3 + local.get $0 + local.get $0 + local.get $0 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $0 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $0 - local.get $7 - local.get $3 - f64.const 0.5 - local.get $4 - f64.mul - local.get $3 - local.get $7 - f64.mul - local.tee $1 - local.get $0 f64.mul f64.sub f64.mul @@ -9312,7 +9302,7 @@ local.get $0 f64.neg local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.and select @@ -9341,14 +9331,17 @@ (local $5 i64) (local $6 f64) (local $7 i64) - (local $8 i32) + (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 $8 + local.set $11 local.get $1 i32.const 2147483647 i32.and @@ -9368,26 +9361,26 @@ local.tee $4 local.get $4 f64.mul - local.tee $3 + local.tee $6 local.get $4 f64.mul - local.set $6 + local.set $3 local.get $4 - local.get $6 - f64.const -0.16666666641626524 local.get $3 + f64.const -0.16666666641626524 + local.get $6 f64.const 0.008333329385889463 f64.mul f64.add f64.mul f64.add - local.get $6 - local.get $3 local.get $3 + local.get $6 + local.get $6 f64.mul f64.mul f64.const -1.9839334836096632e-04 - local.get $3 + local.get $6 f64.const 2.718311493989822e-06 f64.mul f64.add @@ -9436,51 +9429,32 @@ i32.const 152 i32.sub local.tee $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.set $5 - 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $1 + local.tee $10 i64.load - local.get $5 - i64.shl - local.get $1 + local.set $7 + local.get $10 i64.load offset=8 - local.tee $7 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + 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 $7 + local.get $8 local.get $5 i64.const 32 i64.sub i64.shl - local.get $1 + local.get $10 i64.load offset=16 i64.const 96 local.get $5 @@ -9488,29 +9462,52 @@ i64.shr_u i64.or else - local.get $7 + 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 $5 + local.tee $7 i64.const 2 i64.shl - local.tee $7 + local.tee $9 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $7 i64.const 62 i64.shr_u - local.get $7 + local.get $9 i64.const 63 i64.shr_u i64.add @@ -9518,7 +9515,7 @@ local.tee $1 i32.sub local.get $1 - local.get $8 + local.get $11 select end local.set $1 @@ -9531,24 +9528,24 @@ local.get $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -9563,7 +9560,7 @@ local.tee $4 local.get $3 f64.mul - local.tee $6 + local.tee $3 f64.const -0.16666666641626524 local.get $4 f64.const 0.008333329385889463 @@ -9571,7 +9568,7 @@ f64.add f64.mul f64.add - local.get $6 + local.get $3 local.get $4 local.get $4 f64.mul @@ -9840,18 +9837,18 @@ local.get $0 f64.mul local.tee $4 - local.get $4 + local.get $0 f64.mul - local.set $3 + local.set $5 local.get $0 local.get $1 local.get $4 + local.get $5 + f64.const 0.13333333333320124 + local.get $4 local.get $4 - local.get $0 f64.mul - local.tee $5 - f64.const 0.13333333333320124 - local.get $3 + local.tee $3 f64.const 0.021869488294859542 local.get $3 f64.const 3.5920791075913124e-03 @@ -9944,12 +9941,6 @@ local.get $1 return end - local.get $1 - i64.reinterpret_f64 - i64.const -4294967296 - i64.and - f64.reinterpret_i64 - local.set $4 f64.const -1 local.get $1 f64.div @@ -9958,16 +9949,21 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $1 + local.tee $4 local.get $5 f64.const 1 - local.get $1 local.get $4 + local.get $1 + i64.reinterpret_f64 + i64.const -4294967296 + i64.and + f64.reinterpret_i64 + local.tee $1 f64.mul f64.add - local.get $1 - local.get $3 local.get $4 + local.get $3 + local.get $1 local.get $0 f64.sub f64.sub @@ -10176,17 +10172,20 @@ (local $2 i32) (local $3 i32) (local $4 f64) - (local $5 i64) - (local $6 f64) + (local $5 f64) + (local $6 i64) (local $7 i64) - (local $8 i32) + (local $8 i64) (local $9 i64) + (local $10 i32) + (local $11 i32) + (local $12 i64) local.get $0 i32.reinterpret_f32 local.tee $2 i32.const 31 i32.shr_u - local.set $8 + local.set $11 local.get $2 i32.const 2147483647 i32.and @@ -10203,36 +10202,36 @@ end local.get $0 f64.promote_f32 - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.mul - local.tee $1 - local.get $1 + local.tee $4 + local.get $5 f64.mul - local.set $6 - local.get $4 + local.set $1 + local.get $5 local.get $1 - local.get $4 - f64.mul - local.tee $4 f64.const 0.3333313950307914 - local.get $1 + local.get $4 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add + local.get $1 local.get $4 - local.get $6 + local.get $4 + f64.mul + local.tee $1 f64.mul f64.const 0.05338123784456704 - local.get $1 + local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $6 - f64.const 0.002974357433599673 local.get $1 + f64.const 0.002974357433599673 + local.get $4 f64.const 0.009465647849436732 f64.mul f64.add @@ -10283,81 +10282,85 @@ i32.const 152 i32.sub local.tee $2 - i32.const 63 - i32.and - i64.extend_i32_s - local.set $5 - f64.const 8.515303950216386e-20 - local.get $0 - f64.promote_f32 - f64.copysign - local.get $3 - i32.const 8388607 - i32.and - i32.const 8388608 - i32.or - i64.extend_i32_s - local.tee $9 - local.get $2 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $2 + local.tee $10 i64.load - local.get $5 - i64.shl + local.set $7 + local.get $10 + i64.load offset=8 + local.set $8 local.get $2 - i64.load offset=8 - local.tee $7 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + i32.const 63 + i32.and + i64.extend_i32_s + local.tee $6 i64.const 32 i64.gt_u if (result i64) - local.get $7 - local.get $5 + local.get $8 + local.get $6 i64.const 32 i64.sub i64.shl - local.get $2 + local.get $10 i64.load offset=16 i64.const 96 - local.get $5 + local.get $6 i64.sub i64.shr_u i64.or else - local.get $7 + local.get $8 i64.const 32 - local.get $5 + 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 $3 + 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 $5 + local.tee $7 i64.const 2 i64.shl - local.tee $7 + local.tee $9 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $7 i64.const 62 i64.shr_u - local.get $7 + local.get $9 i64.const 63 i64.shr_u i64.add @@ -10365,41 +10368,41 @@ local.tee $2 i32.sub local.get $2 - local.get $8 + local.get $11 select end local.set $2 global.get $~lib/math/rempio2f_y - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.mul - local.tee $1 - local.get $1 + local.tee $4 + local.get $5 f64.mul - local.set $6 - local.get $4 + local.set $1 + local.get $5 local.get $1 - local.get $4 - f64.mul - local.tee $4 f64.const 0.3333313950307914 - local.get $1 + local.get $4 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add + local.get $1 + local.get $4 local.get $4 - local.get $6 + f64.mul + local.tee $1 f64.mul f64.const 0.05338123784456704 - local.get $1 + local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $6 - f64.const 0.002974357433599673 local.get $1 + f64.const 0.002974357433599673 + local.get $4 f64.const 0.009465647849436732 f64.mul f64.add @@ -10619,8 +10622,8 @@ (func $~lib/math/NativeMath.sincos (param $0 f64) (local $1 f64) (local $2 f64) - (local $3 f64) - (local $4 i64) + (local $3 i64) + (local $4 f64) (local $5 i32) (local $6 i32) (local $7 f64) @@ -10628,7 +10631,7 @@ (local $9 f64) local.get $0 i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 @@ -10653,68 +10656,62 @@ global.set $~lib/math/NativeMath.sincos_cos return end - f64.const 0.00833333333332249 + local.get $0 local.get $0 local.get $0 f64.mul - local.tee $3 + 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 $3 + local.get $2 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $3 - local.get $3 + local.get $2 + local.get $2 + local.get $2 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $2 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $2 - local.get $0 - local.get $3 - local.get $0 - f64.mul - f64.const -0.16666666666666632 - local.get $3 - local.get $2 f64.mul f64.add f64.mul f64.add global.set $~lib/math/NativeMath.sincos_sin + f64.const 1 + f64.const 0.5 local.get $0 local.get $0 f64.mul - local.tee $3 - local.get $3 - f64.mul - local.set $2 - f64.const 1 - f64.const 0.5 - local.get $3 + local.tee $2 f64.mul - local.tee $1 + local.tee $4 f64.sub - local.tee $7 + local.tee $1 f64.const 1 - local.get $7 - f64.sub local.get $1 f64.sub - local.get $3 - local.get $3 + local.get $4 + f64.sub + local.get $2 + local.get $2 f64.const 0.0416666666666666 - local.get $3 + local.get $2 f64.const -0.001388888888887411 - local.get $3 + local.get $2 f64.const 2.480158728947673e-05 f64.mul f64.add @@ -10724,10 +10721,13 @@ local.get $2 local.get $2 f64.mul + local.tee $4 + local.get $4 + f64.mul f64.const -2.7557314351390663e-07 - local.get $3 + local.get $2 f64.const 2.087572321298175e-09 - local.get $3 + local.get $2 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10759,7 +10759,7 @@ return end block $~lib/math/rempio2|inlined.3 (result i32) - local.get $4 + local.get $3 i64.const 32 i64.shr_u i32.wrap_i64 @@ -10786,7 +10786,7 @@ local.get $2 f64.const 6.077100506506192e-11 f64.mul - local.tee $3 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10809,17 +10809,17 @@ local.get $2 f64.const 6.077100506303966e-11 f64.mul - local.tee $1 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $1 + local.get $4 f64.sub f64.sub - local.set $3 + local.set $4 local.get $6 local.get $0 - local.get $3 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10842,16 +10842,16 @@ local.get $2 f64.const 2.0222662487111665e-21 f64.mul - local.tee $1 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $1 + local.get $4 f64.sub f64.sub - local.set $3 + local.set $4 local.get $0 - local.get $3 + local.get $4 f64.sub else local.get $1 @@ -10863,7 +10863,7 @@ local.get $0 local.get $1 f64.sub - local.get $3 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 local.get $2 @@ -10871,7 +10871,7 @@ br $~lib/math/rempio2|inlined.3 end i32.const 0 - local.get $4 + local.get $3 call $~lib/math/pio2_large_quot local.tee $5 i32.sub @@ -10880,12 +10880,23 @@ select end local.set $6 - f64.const 0.00833333333332249 global.get $~lib/math/rempio2_y0 - local.tee $2 - local.get $2 + local.tee $4 + local.get $4 f64.mul local.tee $0 + local.get $4 + f64.mul + local.set $2 + local.get $4 + local.get $0 + f64.const 0.5 + global.get $~lib/math/rempio2_y1 + 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 @@ -10905,66 +10916,55 @@ f64.add f64.mul f64.add - local.set $7 - local.get $2 - local.get $0 - f64.const 0.5 - global.get $~lib/math/rempio2_y1 - local.tee $1 - f64.mul - local.get $0 - local.get $2 - f64.mul - local.tee $3 - local.get $7 f64.mul f64.sub f64.mul local.get $1 f64.sub - local.get $3 + local.get $2 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub - local.get $2 - local.get $2 - f64.mul - local.tee $0 - local.get $0 - f64.mul - local.set $7 + local.tee $8 + local.set $0 f64.const 1 f64.const 0.5 - local.get $0 + local.get $4 + local.get $4 f64.mul - local.tee $8 + local.tee $2 + f64.mul + local.tee $7 f64.sub local.tee $9 f64.const 1 local.get $9 f64.sub - local.get $8 + local.get $7 f64.sub - local.get $0 - local.get $0 + local.get $2 + local.get $2 f64.const 0.0416666666666666 - local.get $0 + local.get $2 f64.const -0.001388888888887411 - local.get $0 + local.get $2 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $7 + local.get $2 + local.get $2 + f64.mul + local.tee $7 local.get $7 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $2 f64.const 2.087572321298175e-09 - local.get $0 + local.get $2 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10973,23 +10973,21 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $4 local.get $1 f64.mul f64.sub f64.add f64.add - local.set $2 - local.set $0 - local.get $2 - local.set $1 + local.tee $2 + local.set $4 local.get $6 i32.const 1 i32.and if - local.get $0 + local.get $8 f64.neg - local.set $1 + local.set $4 local.get $2 local.set $0 end @@ -10997,16 +10995,16 @@ i32.const 2 i32.and if (result f64) - local.get $1 + local.get $4 f64.neg - local.set $1 + local.set $4 local.get $0 f64.neg else local.get $0 end global.set $~lib/math/NativeMath.sincos_sin - local.get $1 + local.get $4 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) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index a6227fce6e..1ab531e51f 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -161,7 +161,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i64.ge_u @@ -176,36 +175,39 @@ local.set $2 end local.get $2 + local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 - i64.sub - local.set $4 - local.get $7 - i64.const 63 - i64.shl - local.get $2 - local.get $3 i64.shl - local.tee $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - local.get $2 - i64.const 0 + local.set $2 local.get $4 + local.get $3 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $4 + local.tee $4 i64.const 0 i64.gt_s - select + if (result i64) + local.get $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + else + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + end + local.get $7 + i64.const 63 + i64.shl i64.or f64.reinterpret_i64 return @@ -398,7 +400,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i32.ge_u @@ -413,31 +414,34 @@ local.set $2 end local.get $2 + local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 - i32.sub - local.set $4 - local.get $2 - local.get $3 - i32.shl - local.tee $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 i32.shl - i32.or - local.get $2 - i32.const 1 + local.set $2 local.get $4 + local.get $3 i32.sub - i32.shr_u - local.get $4 + local.tee $4 i32.const 0 i32.gt_s - select + if (result i32) + local.get $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + else + local.get $2 + i32.const 1 + local.get $4 + i32.sub + i32.shr_u + end local.get $7 i32.or f32.reinterpret_i32 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 65900ff42f..27157c4e65 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -174,7 +174,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -182,11 +182,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1574,11 +1574,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -2810,11 +2810,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -3629,11 +3629,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -4452,11 +4452,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -5283,11 +5283,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -6597,7 +6597,7 @@ local.get $1 local.get $1 call $~lib/util/hash/hash64 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -6635,11 +6635,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 4 i32.shl i32.add @@ -6655,7 +6655,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and @@ -7922,7 +7922,7 @@ local.get $1 i32.reinterpret_f32 call $~lib/util/hash/hash32 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -7960,11 +7960,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 3 i32.shl i32.add @@ -7980,7 +7980,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and @@ -8752,7 +8752,7 @@ local.get $1 i64.reinterpret_f64 call $~lib/util/hash/hash64 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -8790,11 +8790,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 4 i32.shl i32.add @@ -8810,7 +8810,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 1d182f30cf..1566c00a87 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 1b1fe8ad1b..84d97b0c7c 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -500,7 +500,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -508,11 +508,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1435,119 +1435,107 @@ i32.add i32.load local.tee $2 - i32.const 255 - i32.and - local.set $4 - local.get $2 i32.const 8 i32.shr_s local.set $3 - local.get $4 - i32.const 2 - i32.lt_u - if - local.get $0 + block $folding-inner0 + local.get $2 + i32.const 255 + i32.and + local.tee $2 + i32.const 2 + i32.lt_u + br_if $folding-inner0 local.get $3 - i32.const 0 - local.get $1 - local.get $4 - i32.xor - i32.sub + i32.const 255 i32.and - i32.add - return - end - local.get $3 - i32.const 255 - i32.and - local.set $2 - local.get $3 - i32.const 8 - i32.shr_u - local.set $4 - loop $while-continue|0 - local.get $2 - if - local.get $5 + local.set $2 + local.get $3 + i32.const 8 + i32.shr_u + local.set $4 + loop $while-continue|0 local.get $2 - i32.const 1 - i32.shr_u - local.tee $3 - local.get $4 - i32.add - i32.const 1 - i32.shl - i32.const 6184 - i32.add - i32.load8_u - local.tee $6 - i32.eq - if (result i32) - local.get $3 + if + local.get $5 + local.get $2 + i32.const 1 + i32.shr_u + local.tee $3 local.get $4 i32.add i32.const 1 i32.shl i32.const 6184 i32.add - i32.load8_u offset=1 - i32.const 2 - i32.shl - i32.const 4712 - i32.add - i32.load - local.tee $2 - i32.const 255 - i32.and - local.set $3 - local.get $2 - i32.const 8 - i32.shr_s - local.set $2 - local.get $3 - i32.const 2 - i32.lt_u - if - local.get $0 - local.get $2 - i32.const 0 - local.get $1 - local.get $3 - i32.xor - i32.sub - i32.and - i32.add - return - end - local.get $0 - i32.const 1 - i32.add - local.get $1 - i32.const 1 - i32.shl - i32.sub - return - else - local.get $6 - local.get $5 - i32.gt_u + i32.load8_u + local.tee $6 + i32.eq if (result i32) local.get $3 - else - local.get $3 local.get $4 i32.add - local.set $4 + i32.const 1 + i32.shl + i32.const 6184 + i32.add + i32.load8_u offset=1 + i32.const 2 + i32.shl + i32.const 4712 + i32.add + i32.load + local.tee $2 + i32.const 8 + i32.shr_s + local.set $3 local.get $2 - local.get $3 + i32.const 255 + i32.and + local.tee $2 + i32.const 2 + i32.lt_u + br_if $folding-inner0 + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.const 1 + i32.shl i32.sub + return + else + local.get $6 + local.get $5 + i32.gt_u + if (result i32) + local.get $3 + else + local.get $3 + local.get $4 + i32.add + local.set $4 + local.get $2 + local.get $3 + i32.sub + end end + local.set $2 + br $while-continue|0 end - local.set $2 - br $while-continue|0 end + local.get $0 + return end local.get $0 + local.get $3 + i32.const 0 + local.get $1 + local.get $2 + i32.xor + i32.sub + i32.and + i32.add ) (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -2378,24 +2366,23 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) local.get $0 call $~lib/string/String#get:length - local.tee $12 + local.tee $8 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $12 + local.get $8 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc - local.set $9 + local.set $10 loop $for-loop|0 local.get $4 - local.get $12 + local.get $8 i32.lt_u if local.get $0 @@ -2404,20 +2391,20 @@ i32.shl i32.add i32.load16_u - local.tee $7 - local.set $5 - local.get $7 + local.tee $2 + local.set $1 + local.get $2 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $12 + local.get $8 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $7 + local.get $2 i32.const 55295 i32.sub i32.const 1025 @@ -2430,7 +2417,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $3 + local.tee $5 i32.const 56319 i32.sub i32.const 1025 @@ -2440,11 +2427,11 @@ i32.const 1 i32.add local.set $4 - local.get $3 + local.get $5 i32.const 1023 i32.and - local.get $7 - local.tee $5 + local.get $2 + local.tee $1 i32.const 1023 i32.and i32.const 10 @@ -2452,55 +2439,55 @@ i32.or i32.const 65536 i32.add - local.tee $7 + local.tee $2 i32.const 131072 i32.ge_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add + local.get $1 local.get $5 - local.get $3 i32.const 16 i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-continue|0 end end end - local.get $7 + local.get $2 i32.const 304 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 else - local.get $7 + local.get $2 i32.const 931 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.const 1 i32.gt_u if (result i32) @@ -2509,45 +2496,46 @@ local.set $5 local.get $4 i32.const 0 - local.set $1 + local.set $3 i32.const 0 local.get $4 - local.tee $3 + local.tee $2 i32.const 30 i32.sub - local.tee $7 + local.tee $1 i32.const 0 - local.get $7 + local.get $1 i32.gt_s select local.set $11 loop $while-continue|1 - local.get $3 + local.get $2 local.get $11 i32.gt_s if block $~lib/util/string/codePointBefore|inlined.0 (result i32) + local.get $2 + local.set $1 i32.const -1 - local.get $3 - local.tee $2 + local.get $2 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 drop local.get $5 - local.get $2 + local.get $1 i32.const 1 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $10 + local.tee $7 i32.const 64512 i32.and i32.const 56320 i32.eq - local.get $2 + local.get $1 i32.const 2 i32.sub i32.const 0 @@ -2555,23 +2543,23 @@ i32.and if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $7 + local.tee $1 i32.const 64512 i32.and i32.const 55296 i32.eq if - local.get $10 + local.get $7 i32.const 1023 i32.and - local.get $7 + local.get $1 i32.const 1023 i32.and i32.const 10 @@ -2583,22 +2571,22 @@ end end i32.const 65533 - local.get $10 - local.get $10 + local.get $7 + local.get $7 i32.const 63488 i32.and i32.const 55296 i32.eq select end - local.tee $7 - local.set $2 - local.get $7 + local.tee $1 + local.set $7 + local.get $1 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $2 + local.get $7 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2606,12 +2594,12 @@ i32.eqz if i32.const 0 - local.get $7 + local.get $1 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $7 + local.get $1 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2620,61 +2608,61 @@ br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 - local.set $1 + local.set $3 end - local.get $3 - local.get $7 + local.get $2 + local.get $1 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $3 + local.set $2 br $while-continue|1 end end i32.const 0 - local.get $1 + local.get $3 i32.eqz br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 i32.add - local.tee $3 + local.tee $2 i32.const 30 i32.add - local.tee $7 - local.get $12 - local.get $7 - local.get $12 + local.tee $1 + local.get $8 + local.get $1 + local.get $8 i32.lt_s select local.set $6 loop $while-continue|2 - local.get $3 + local.get $2 local.get $6 i32.lt_s if local.get $5 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add i32.load16_u - local.tee $2 + local.tee $1 i32.const 64512 i32.and i32.const 55296 i32.eq - local.get $12 - local.get $3 + local.get $8 + local.get $2 i32.const 1 i32.add i32.ne i32.and if (result i32) local.get $5 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add @@ -2685,7 +2673,7 @@ i32.const 56320 i32.eq if (result i32) - local.get $2 + local.get $1 i32.const 10 i32.shl local.get $7 @@ -2693,10 +2681,10 @@ i32.const -56613888 i32.add else - local.get $2 + local.get $1 end else - local.get $2 + local.get $1 end local.tee $7 i32.const 918000 @@ -2723,14 +2711,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $3 + local.get $2 local.get $7 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $3 + local.set $2 br $while-continue|2 end end @@ -2746,53 +2734,53 @@ end i32.store16 else - local.get $7 + local.get $2 i32.const 9398 i32.sub i32.const 25 i32.le_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 26 i32.add i32.store16 else - local.get $7 + local.get $2 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $7 + local.tee $2 i32.const 65536 i32.lt_s if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.store16 else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65536 i32.sub - local.tee $7 + local.tee $2 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $7 + local.get $2 i32.const 1023 i32.and i32.const 56320 @@ -2801,23 +2789,23 @@ i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 end end end end end else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $5 - local.get $5 + local.get $1 + local.get $1 i32.const 65 i32.sub i32.const 26 @@ -2833,15 +2821,15 @@ i32.const 1 i32.add local.set $4 - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-loop|0 end end + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index e1fa6d3f5e..dc5826a290 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -241,7 +241,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -249,11 +249,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 66fba426a6..35a7728eb5 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -828,7 +828,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -836,11 +836,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -2080,7 +2080,6 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2089,21 +2088,23 @@ i32.const 1 i32.shl local.set $5 - local.get $1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl local.set $3 - i32.const 1 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl - local.tee $1 - i32.eqz - local.get $3 + local.tee $4 local.get $5 i32.lt_u - select + if (result i32) + i32.const 1 + else + local.get $3 + i32.eqz + end if local.get $0 call $~lib/rt/pure/__retain @@ -2111,53 +2112,51 @@ call $~lib/rt/pure/__release return end - local.get $3 - local.get $5 - i32.sub - local.set $4 - local.get $3 + local.get $4 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $3 + local.set $1 local.get $4 - local.get $1 + local.get $5 + i32.sub + local.tee $4 + local.get $3 i32.gt_u if local.get $1 + local.get $2 + local.get $3 local.get $4 i32.const 2 i32.sub - local.get $1 - i32.div_u - local.tee $7 - i32.mul - local.set $6 local.get $3 - local.get $2 - local.get $1 - local.get $7 + i32.div_u + local.tee $6 call $~lib/memory/memory.repeat + local.get $1 local.get $3 local.get $6 + i32.mul + local.tee $3 i32.add local.get $2 local.get $4 - local.get $6 + local.get $3 i32.sub call $~lib/memory/memory.copy else - local.get $3 + local.get $1 local.get $2 local.get $4 call $~lib/memory/memory.copy end - local.get $3 + local.get $1 local.get $4 i32.add local.get $0 local.get $5 call $~lib/memory/memory.copy - local.get $3 + local.get $1 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2166,7 +2165,6 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2175,21 +2173,23 @@ i32.const 1 i32.shl local.set $3 - local.get $1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl local.set $4 - i32.const 1 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl - local.tee $1 - i32.eqz - local.get $4 + local.tee $5 local.get $3 i32.lt_u - select + if (result i32) + i32.const 1 + else + local.get $4 + i32.eqz + end if local.get $0 call $~lib/rt/pure/__retain @@ -2197,55 +2197,53 @@ call $~lib/rt/pure/__release return end - local.get $4 - local.get $3 - i32.sub - local.set $5 - local.get $4 + local.get $5 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $4 + local.tee $1 local.get $0 local.get $3 call $~lib/memory/memory.copy local.get $5 - local.get $1 + local.get $3 + i32.sub + local.tee $0 + local.get $4 i32.gt_u if local.get $1 - local.get $5 - i32.const 2 - i32.sub - local.get $1 - i32.div_u - local.tee $0 - i32.mul - local.set $6 local.get $3 - local.get $4 i32.add local.tee $3 local.get $2 - local.get $1 + local.get $4 local.get $0 + i32.const 2 + i32.sub + local.get $4 + i32.div_u + local.tee $5 call $~lib/memory/memory.repeat + local.get $4 + local.get $5 + i32.mul + local.tee $4 local.get $3 - local.get $6 i32.add local.get $2 - local.get $5 - local.get $6 + local.get $0 + local.get $4 i32.sub call $~lib/memory/memory.copy else + local.get $1 local.get $3 - local.get $4 i32.add local.get $2 - local.get $5 + local.get $0 call $~lib/memory/memory.copy end - local.get $4 + local.get $1 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2640,34 +2638,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $4 - call $~lib/string/String#get:length local.tee $3 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $4 - local.tee $0 + local.get $3 + local.tee $4 i32.load16_u local.set $2 loop $while-continue|0 local.get $2 call $~lib/util/string/isSpace if - local.get $0 + local.get $4 i32.const 2 i32.add - local.tee $0 + local.tee $4 i32.load16_u local.set $2 - local.get $3 + local.get $0 i32.const 1 i32.sub - local.set $3 + local.set $0 br $while-continue|0 end end f64.const 1 - local.set $6 + local.set $5 i32.const 1 local.get $2 i32.const 43 @@ -2677,10 +2675,10 @@ i32.eq select if - local.get $3 + local.get $0 i32.const 1 i32.sub - local.tee $3 + local.tee $0 i32.eqz br_if $folding-inner0 f64.const -1 @@ -2689,11 +2687,11 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $5 + local.get $4 i32.const 2 i32.add - local.tee $0 + local.tee $4 i32.load16_u local.set $2 end @@ -2716,12 +2714,12 @@ i32.const 48 i32.eq i32.const 0 - local.get $3 + local.get $0 i32.const 2 i32.gt_s select if (result i32) - local.get $0 + local.get $4 i32.load16_u offset=2 i32.const 32 i32.or @@ -2731,18 +2729,18 @@ i32.const 0 end if - local.get $3 - i32.const 2 - i32.sub - local.set $3 - local.get $0 + local.get $4 i32.const 4 i32.add + local.set $4 + local.get $0 + i32.const 2 + i32.sub local.set $0 end end else - local.get $3 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -2754,7 +2752,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $4 i32.load16_u offset=2 i32.const 32 i32.or @@ -2772,38 +2770,38 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 2 local.set $1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 8 local.set $1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 16 local.set $1 end @@ -2816,14 +2814,14 @@ end loop $while-continue|2 block $while-break|2 - local.get $3 + local.get $0 local.tee $2 i32.const 1 i32.sub - local.set $3 + local.set $0 local.get $2 if - local.get $0 + local.get $4 i32.load16_u local.tee $2 i32.const 48 @@ -2859,10 +2857,10 @@ local.get $1 i32.ge_u if - local.get $5 - local.get $5 + local.get $6 + local.get $6 f64.eq - local.get $5 + local.get $6 f64.const 0 f64.ne i32.and @@ -2870,30 +2868,30 @@ br_if $folding-inner0 br $while-break|2 end - local.get $5 + local.get $6 local.get $1 f64.convert_i32_s f64.mul local.get $2 f64.convert_i32_u f64.add - local.set $5 - local.get $0 + local.set $6 + local.get $4 i32.const 2 i32.add - local.set $0 + local.set $4 br $while-continue|2 end end end - local.get $4 + local.get $3 call $~lib/rt/pure/__release - local.get $6 local.get $5 + local.get $6 f64.mul return end - local.get $4 + local.get $3 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -2917,34 +2915,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 - call $~lib/string/String#get:length local.tee $2 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $0 + local.get $2 + local.tee $3 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $0 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 - local.get $2 + 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 $6 + local.set $4 i32.const 1 local.get $1 i32.const 43 @@ -2954,10 +2952,10 @@ i32.eq select if - local.get $2 + local.get $0 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.eqz br_if $folding-inner0 i32.const -1 @@ -2966,15 +2964,15 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $4 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 end - local.get $2 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -2986,7 +2984,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $3 i32.load16_u offset=2 i32.const 32 i32.or @@ -3004,57 +3002,57 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 2 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 8 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 16 - local.set $4 + local.set $6 end end - local.get $4 + local.get $6 i32.const 10 - local.get $4 + local.get $6 select - local.set $4 + local.set $6 loop $while-continue|2 block $while-break|2 - local.get $2 + local.get $0 local.tee $1 i32.const 1 i32.sub - local.set $2 + local.set $0 local.get $1 if - local.get $0 + local.get $3 i32.load16_u local.tee $1 i32.const 48 @@ -3087,7 +3085,7 @@ select end local.tee $1 - local.get $4 + local.get $6 i32.ge_u if local.get $5 @@ -3096,27 +3094,27 @@ br $while-break|2 end local.get $1 - local.get $4 local.get $5 + local.get $6 i32.mul i32.add local.set $5 - local.get $0 + local.get $3 i32.const 2 i32.add - local.set $0 + local.set $3 br $while-continue|2 end end end - local.get $3 + local.get $2 call $~lib/rt/pure/__release + local.get $4 local.get $5 - local.get $6 i32.mul return end - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 0 ) @@ -3124,40 +3122,40 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 i64) (local $5 i64) - (local $6 i64) + (local $6 i32) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 - call $~lib/string/String#get:length local.tee $2 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $0 + local.get $2 + local.tee $3 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $0 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 - local.get $2 + local.get $0 i32.const 1 i32.sub - local.set $2 + local.set $0 br $while-continue|0 end end i64.const 1 - local.set $6 + local.set $4 i32.const 1 local.get $1 i32.const 43 @@ -3167,10 +3165,10 @@ i32.eq select if - local.get $2 + local.get $0 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.eqz br_if $folding-inner0 i64.const -1 @@ -3179,15 +3177,15 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $4 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 end - local.get $2 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -3199,7 +3197,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $3 i32.load16_u offset=2 i32.const 32 i32.or @@ -3217,57 +3215,57 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 2 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 8 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 16 - local.set $4 + local.set $6 end end - local.get $4 + local.get $6 i32.const 10 - local.get $4 + local.get $6 select - local.set $4 + local.set $6 loop $while-continue|2 block $while-break|2 - local.get $2 + local.get $0 local.tee $1 i32.const 1 i32.sub - local.set $2 + local.set $0 local.get $1 if - local.get $0 + local.get $3 i32.load16_u local.tee $1 i32.const 48 @@ -3300,7 +3298,7 @@ select end local.tee $1 - local.get $4 + local.get $6 i32.ge_u if local.get $5 @@ -3311,27 +3309,27 @@ local.get $1 i64.extend_i32_u local.get $5 - local.get $4 + local.get $6 i64.extend_i32_s i64.mul i64.add local.set $5 - local.get $0 + local.get $3 i32.const 2 i32.add - local.set $0 + local.set $3 br $while-continue|2 end end end - local.get $3 + local.get $2 call $~lib/rt/pure/__release + local.get $4 local.get $5 - local.get $6 i64.mul return end - local.get $3 + local.get $2 call $~lib/rt/pure/__release i64.const 0 ) @@ -4035,32 +4033,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $11 + local.tee $13 i64.div_u local.tee $16 i64.clz - local.set $13 + local.set $11 local.get $7 - local.get $11 + local.get $13 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $13 + local.get $11 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $11 + local.get $13 f64.convert_i64_u f64.div i64.trunc_f64_u local.get $16 - local.get $13 + local.get $11 i64.shl i64.add f64.convert_i64_u local.get $10 - local.get $13 + local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4093,11 +4091,11 @@ i64.and i64.const 1220703125 i64.mul - local.tee $10 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.tee $7 + local.tee $10 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4109,7 +4107,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $10 + local.get $7 local.get $0 i64.extend_i32_u i64.shl @@ -4117,11 +4115,11 @@ i64.shr_u i64.const 1 i64.and - local.get $7 + local.get $10 local.get $0 i64.extend_i32_u i64.shl - local.get $10 + local.get $7 i64.const 4294967295 i64.and local.get $11 @@ -4819,7 +4817,7 @@ local.set $7 local.get $2 call $~lib/rt/pure/__retain - local.set $6 + local.set $5 block $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -4836,7 +4834,7 @@ local.get $0 call $~lib/rt/pure/__retain else - local.get $6 + local.get $5 local.get $0 local.get $7 local.get $0 @@ -4847,7 +4845,7 @@ local.set $0 br $folding-inner0 end - local.get $6 + local.get $5 call $~lib/string/String#get:length local.set $2 local.get $10 @@ -4873,7 +4871,7 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl @@ -4901,17 +4899,17 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $1 i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy + local.get $1 local.get $2 - local.get $5 i32.add local.set $1 local.get $9 @@ -4943,7 +4941,7 @@ loop $while-continue|1 local.get $0 local.get $7 - local.get $5 + local.get $6 call $~lib/string/String#indexOf local.tee $4 i32.const -1 @@ -4954,7 +4952,7 @@ i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl @@ -4962,7 +4960,7 @@ local.get $4 local.get $10 i32.add - local.set $5 + local.set $6 br $while-continue|1 end end @@ -4976,7 +4974,7 @@ loop $while-continue|2 local.get $0 local.get $7 - local.get $5 + local.get $6 call $~lib/string/String#indexOf local.tee $9 i32.const -1 @@ -5012,38 +5010,38 @@ i32.shl i32.add local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.add local.get $9 - local.get $5 + local.get $6 i32.sub - local.tee $5 + local.tee $6 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $3 - local.get $5 + local.get $6 local.get $8 i32.add - local.tee $5 + local.tee $6 i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $5 + local.get $6 i32.add local.set $8 local.get $9 local.get $10 i32.add - local.set $5 + local.set $6 br $while-continue|2 end end @@ -5064,7 +5062,7 @@ local.set $3 end local.get $4 - local.get $5 + local.get $6 i32.sub local.tee $2 if @@ -5074,7 +5072,7 @@ i32.shl i32.add local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.add @@ -5106,13 +5104,13 @@ call $~lib/rt/pure/__retain local.get $7 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release return end local.get $7 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release local.get $0 ) @@ -5256,15 +5254,15 @@ i32.const 0 i32.gt_s select - local.tee $1 + local.tee $3 local.get $0 call $~lib/string/String#get:length - local.tee $3 - local.get $1 + local.tee $1 local.get $3 + local.get $1 i32.lt_s select - local.tee $1 + local.tee $3 local.get $2 i32.const 0 local.get $2 @@ -5272,59 +5270,58 @@ i32.gt_s select local.tee $2 - local.get $3 + local.get $1 local.get $2 - local.get $3 + local.get $1 i32.lt_s select local.tee $2 - local.get $1 + local.get $3 local.get $2 - i32.lt_s + i32.gt_s select i32.const 1 i32.shl - local.set $4 - local.get $1 + local.tee $4 + local.get $3 local.get $2 - local.get $1 + local.get $3 local.get $2 - i32.gt_s + i32.lt_s select i32.const 1 i32.shl local.tee $2 - local.get $4 i32.sub - local.tee $1 + local.tee $3 i32.eqz if i32.const 1280 return end i32.const 0 - local.get $2 - local.get $3 + local.get $4 + local.get $1 i32.const 1 i32.shl i32.eq - local.get $4 + local.get $2 select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $1 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 local.get $0 - local.get $4 + local.get $2 i32.add - local.get $1 + local.get $3 call $~lib/memory/memory.copy - local.get $2 + local.get $1 call $~lib/rt/pure/__retain ) (func $~lib/rt/__allocArray (param $0 i32) (result i32) @@ -6028,7 +6025,7 @@ (local $5 i64) local.get $3 i64.extend_i32_s - local.set $5 + local.set $4 local.get $3 local.get $3 i32.const 1 @@ -6045,11 +6042,11 @@ i32.shl i32.add local.get $1 - local.get $5 + local.get $4 local.get $1 - local.get $5 + local.get $4 i64.div_u - local.tee $4 + local.tee $1 i64.mul i64.sub i32.wrap_i64 @@ -6059,8 +6056,7 @@ i32.add i32.load16_u i32.store16 - local.get $4 - local.tee $1 + local.get $1 i64.const 0 i64.ne br_if $do-continue|1 @@ -6071,11 +6067,11 @@ i32.const 7 i32.and i64.extend_i32_s - local.set $4 - local.get $5 + local.set $5 + local.get $4 i64.const 1 i64.sub - local.set $5 + local.set $4 loop $do-continue|0 local.get $0 local.get $2 @@ -6086,7 +6082,7 @@ i32.shl i32.add local.get $1 - local.get $5 + local.get $4 i64.and i32.wrap_i64 i32.const 1 @@ -6096,7 +6092,7 @@ i32.load16_u i32.store16 local.get $1 - local.get $4 + local.get $5 i64.shr_u local.tee $1 i64.const 0 @@ -6635,36 +6631,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -6683,113 +6678,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -6797,7 +6796,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -6812,10 +6811,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -6833,7 +6832,7 @@ i32.const 20280 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -6849,19 +6848,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -6872,7 +6871,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -6897,21 +6896,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -6923,7 +6922,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -6939,10 +6938,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -6950,9 +6949,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -6979,13 +6978,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -6994,7 +6993,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -7008,7 +7007,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -7191,7 +7190,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -7199,7 +7198,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -7267,21 +7266,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -7292,68 +7288,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7366,8 +7361,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -7376,91 +7371,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 19408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 20104 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7469,50 +7444,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7521,33 +7493,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -7559,13 +7546,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 37f2e0823a..edee9d2672 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1364,11 +1364,14 @@ block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $0 + i32.const 1 + i32.ne + if local.get $0 - i32.const 1 + i32.const 2 i32.sub - br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 end i32.const 1408 br $break|0 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 4ec97bf360..ca6e5e8be3 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -473,7 +473,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -481,11 +481,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1487,11 +1487,11 @@ i32.and i32.const 24 i32.add - local.tee $5 + local.tee $3 i32.add local.set $1 local.get $2 - local.get $5 + local.get $3 i32.sub local.set $2 local.get $0 @@ -3328,12 +3328,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $2 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $2 + local.set $5 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -3342,23 +3342,23 @@ if local.get $4 local.get $3 - local.get $2 + local.get $5 call $~lib/memory/memory.copy end local.get $4 - local.tee $2 + local.tee $3 call $~lib/rt/pure/__retain i32.store - local.get $5 local.get $2 + local.get $3 i32.store offset=4 - local.get $5 + local.get $2 local.get $1 i32.store offset=8 - local.get $5 + local.get $2 local.get $0 i32.store offset=12 - local.get $5 + local.get $2 ) (func $~lib/typedarray/Int8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -9535,7 +9535,6 @@ br $while-continue|0 end end - local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -9554,27 +9553,31 @@ i32.const 8 i32.shl i32.clz - local.tee $1 - i32.shl local.tee $3 - i32.const 8388608 - i32.sub - local.get $2 - local.get $1 - i32.sub - local.tee $1 - i32.const 23 i32.shl - i32.or + local.set $1 + local.get $2 local.get $3 - i32.const 1 - local.get $1 i32.sub - i32.shr_u - local.get $1 + local.tee $2 i32.const 0 i32.gt_s - select + 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 @@ -9673,12 +9676,7 @@ i64.shr_u i64.const 2047 i64.and - local.set $2 - local.get $1 - i64.const 63 - i64.shr_u - local.set $3 - local.get $2 + local.tee $2 i64.const 2047 i64.eq if @@ -9690,15 +9688,19 @@ 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 $4 + local.tee $3 i64.const -9223372036854775808 i64.le_u if - local.get $4 + local.get $3 i64.const -9223372036854775808 i64.eq br_if $folding-inner0 @@ -9758,9 +9760,6 @@ br $while-continue|0 end end - local.get $3 - i64.const 63 - i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -9779,29 +9778,35 @@ i64.const 11 i64.shl i64.clz - local.tee $1 - i64.shl local.tee $3 - i64.const 4503599627370496 - i64.sub - local.get $2 - local.get $1 - i64.sub - local.tee $1 - i64.const 52 i64.shl - i64.or + local.set $1 + local.get $2 local.get $3 - i64.const 0 - local.get $1 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $1 + local.tee $2 i64.const 0 i64.gt_s - select + 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 @@ -18851,21 +18856,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19253,14 +19258,14 @@ local.get $1 i32.const 255 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19435,21 +19440,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19606,14 +19611,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19788,9 +19793,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $0 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20628,36 +20633,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -20676,113 +20680,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -20790,7 +20798,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -20805,10 +20813,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -20826,7 +20834,7 @@ i32.const 8248 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -20842,19 +20850,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -20865,7 +20873,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -20890,21 +20898,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -20916,7 +20924,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -20932,10 +20940,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -20943,9 +20951,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -20972,13 +20980,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -20987,7 +20995,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -21001,7 +21009,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -21184,7 +21192,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -21192,7 +21200,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -21260,21 +21268,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -21285,68 +21290,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21359,8 +21363,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -21369,91 +21373,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 7376 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 8072 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21462,50 +21446,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21514,33 +21495,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -21552,13 +21548,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 71c01220f9..52c13126ca 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -418,36 +418,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -466,113 +465,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -580,7 +583,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -595,10 +598,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -616,7 +619,7 @@ i32.const 1936 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -632,19 +635,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -655,7 +658,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -680,21 +683,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -706,7 +709,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -722,10 +725,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -733,9 +736,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -762,13 +765,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -777,7 +780,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -791,7 +794,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1174,7 +1177,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1182,7 +1185,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1250,21 +1253,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -1275,68 +1275,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1349,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1359,91 +1358,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 1064 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 1760 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1452,50 +1431,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1504,33 +1480,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -1542,13 +1533,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 27a7b53cd0..56323337fc 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 From a05e3e12ddb6171e6dc129b6d7480704da0d74de Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 03:58:37 +0300 Subject: [PATCH 07/13] what if... --- src/module.ts | 12 +- tests/compiler/binary.optimized.wat | 93 +- tests/compiler/comma.optimized.wat | 11 - tests/compiler/do.optimized.wat | 14 +- .../extends-baseaggregate.optimized.wat | 71 +- tests/compiler/for.optimized.wat | 10 +- .../implicit-getter-setter.optimized.wat | 10 +- tests/compiler/issues/1095.optimized.wat | 10 +- tests/compiler/issues/1225.optimized.wat | 10 +- tests/compiler/logical.optimized.wat | 10 +- tests/compiler/managed-cast.optimized.wat | 10 +- tests/compiler/memcpy.optimized.wat | 63 +- tests/compiler/memory.optimized.wat | 11 - tests/compiler/number.optimized.wat | 218 +- tests/compiler/object-literal.optimized.wat | 10 +- tests/compiler/rc/local-init.optimized.wat | 10 +- .../rc/logical-and-mismatch.optimized.wat | 10 +- .../rc/logical-or-mismatch.optimized.wat | 10 +- tests/compiler/rc/optimize.optimized.wat | 24 +- tests/compiler/rc/rereturn.optimized.wat | 10 +- .../rc/ternary-mismatch.optimized.wat | 10 +- tests/compiler/resolve-binary.optimized.wat | 220 +- .../resolve-elementaccess.optimized.wat | 419 +-- tests/compiler/resolve-ternary.optimized.wat | 228 +- .../retain-release-sanity.optimized.wat | 287 +- tests/compiler/retain-return.optimized.wat | 10 +- tests/compiler/rt/finalize.optimized.wat | 70 +- tests/compiler/runtime-full.optimized.wat | 10 +- .../compiler/std/array-literal.optimized.wat | 10 +- tests/compiler/std/array.optimized.wat | 1167 ++++---- tests/compiler/std/arraybuffer.optimized.wat | 10 +- tests/compiler/std/dataview.optimized.wat | 10 +- tests/compiler/std/map.optimized.wat | 1302 ++++----- tests/compiler/std/math.optimized.wat | 2527 +++++++++-------- tests/compiler/std/mod.optimized.wat | 82 +- tests/compiler/std/set.optimized.wat | 56 +- tests/compiler/std/staticarray.optimized.wat | 10 +- .../std/string-casemapping.optimized.wat | 376 +-- .../std/string-encoding.optimized.wat | 12 +- tests/compiler/std/string.optimized.wat | 969 +++---- tests/compiler/std/symbol.optimized.wat | 9 +- tests/compiler/std/typedarray.optimized.wat | 624 ++-- tests/compiler/unary.optimized.wat | 16 +- tests/compiler/wasi/trace.optimized.wat | 419 +-- tests/compiler/while.optimized.wat | 14 +- 45 files changed, 4758 insertions(+), 4736 deletions(-) diff --git a/src/module.ts b/src/module.ts index 96b0ebf6d2..9b83d01fac 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1536,6 +1536,13 @@ export class Module { passes.push("remove-unused-brs"); passes.push("remove-unused-names"); passes.push("inlining-optimizing"); + + if (optimizeLevel >= 3 && shrinkLevel <= 1) { + passes.push("licm"); + } + passes.push("simplify-locals-notee-nostructure"); + passes.push("vacuum"); + if (optimizeLevel >= 2 || shrinkLevel >= 1) { passes.push("pick-load-signs"); passes.push("simplify-globals-optimizing"); @@ -1546,11 +1553,6 @@ export class Module { passes.push("precompute"); } passes.push("vacuum"); - if (optimizeLevel >= 3 && shrinkLevel <= 1) { - passes.push("licm"); - } - passes.push("simplify-locals-nostructure"); - passes.push("vacuum"); passes.push("reorder-locals"); passes.push("remove-unused-brs"); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 12db290bd5..17cee2e52b 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -132,6 +132,7 @@ br $while-continue|0 end end + local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -150,31 +151,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 + local.tee $3 + i32.const 8388608 + i32.sub local.get $2 + local.get $1 + i32.sub + local.tee $1 + i32.const 23 + i32.shl + i32.or local.get $3 + i32.const 1 + local.get $1 i32.sub - local.tee $2 + i32.shr_u + local.get $1 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 + select i32.or f32.reinterpret_i32 return @@ -195,7 +192,12 @@ i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.set $2 + local.get $1 + i64.const 63 + i64.shr_u + local.set $3 + local.get $2 i64.const 2047 i64.eq if @@ -204,19 +206,15 @@ 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 + local.tee $4 i64.const 9214364837600034816 i64.le_u if - local.get $3 + local.get $4 i64.const 9214364837600034816 i64.eq br_if $folding-inner0 @@ -276,6 +274,9 @@ br $while-continue|0 end end + local.get $3 + i64.const 63 + i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -294,35 +295,29 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 + local.tee $3 + i64.const 4503599627370496 + i64.sub local.get $2 + local.get $1 + i64.sub + local.tee $1 + i64.const 52 + i64.shl + i64.or local.get $3 + i64.const 0 + local.get $1 i64.sub - local.tee $2 + i64.const 1 + i64.add + i64.shr_u + local.get $1 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 + select i64.or f64.reinterpret_i64 return diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index 212f05ac19..b8197dbcf8 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -80,17 +80,6 @@ global.set $comma/b i32.const 2 global.set $comma/a - global.get $comma/b - i32.const 2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 19 - i32.const 1 - call $~lib/builtins/abort - unreachable - end loop $for-loop|0 local.get $0 global.get $comma/a diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 13ee0d6c52..67ffe2fb8d 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -238,7 +238,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -246,11 +246,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -713,10 +713,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1158,11 +1158,13 @@ i32.const 1 i32.add local.tee $0 + local.set $1 + local.get $0 i32.const 10 i32.ne br_if $do-continue|02 end - local.get $0 + local.get $1 i32.const 10 i32.ne if diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 304b4904b7..bb1ae1f8c0 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -163,7 +163,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -171,11 +171,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -638,10 +638,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1379,10 +1379,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 @@ -1820,26 +1820,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR + local.tee $2 local.set $0 + global.get $~lib/rt/pure/CUR + local.set $3 loop $for-loop|0 - local.get $4 local.get $0 + local.get $3 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.load offset=4 - local.tee $2 + local.tee $5 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.const 0 @@ -1848,51 +1848,51 @@ i32.const 0 end if - local.get $5 + local.get $4 call $~lib/rt/pure/markGray - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 else i32.const 0 - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $5 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $5 + local.get $4 call $~lib/rt/tlsf/freeBlock else + local.get $4 local.get $5 - local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end - local.get $3 + local.get $2 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 @@ -1909,18 +1909,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 i32.load - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 @@ -2106,14 +2106,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 579428fa82..3093c267a7 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -235,7 +235,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -243,11 +243,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -710,10 +710,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 779ea253f5..abf3658563 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -645,10 +645,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 2c23f79404..d92c305328 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -630,10 +630,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 37e44e8191..d8027676ba 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index e59eaa06b5..682fad3efb 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 41383bad90..ec0fb8a13b 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -633,10 +633,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 8952f746c9..48c7ddd585 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -160,22 +160,13 @@ block $break|2 block $case2|2 block $case1|2 - local.get $0 - i32.const 3 - i32.and - local.tee $3 - i32.const 1 - i32.ne - if - local.get $3 - i32.const 2 - i32.eq - br_if $case1|2 - local.get $3 + block $case0|2 + local.get $0 i32.const 3 - i32.eq - br_if $case2|2 - br $break|2 + i32.and + i32.const 1 + i32.sub + br_table $case0|2 $case1|2 $case2|2 $break|2 end local.get $1 i32.load @@ -229,25 +220,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 24 - i32.shr_u local.get $1 i32.load offset=5 - local.tee $3 + local.tee $4 i32.const 8 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 24 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=9 local.tee $3 i32.const 8 i32.shl + local.get $4 + i32.const 24 + i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -320,25 +311,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 16 - i32.shr_u local.get $1 i32.load offset=6 - local.tee $3 + local.tee $4 i32.const 16 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 16 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=10 local.tee $3 i32.const 16 i32.shl + local.get $4 + i32.const 16 + i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -407,25 +398,25 @@ i32.or i32.store local.get $0 - local.get $3 - i32.const 8 - i32.shr_u local.get $1 i32.load offset=7 - local.tee $3 + local.tee $4 i32.const 24 i32.shl - i32.or - i32.store offset=4 - local.get $0 local.get $3 i32.const 8 i32.shr_u + i32.or + i32.store offset=4 + local.get $0 local.get $1 i32.load offset=11 local.tee $3 i32.const 24 i32.shl + local.get $4 + i32.const 8 + i32.shr_u i32.or i32.store offset=8 local.get $0 diff --git a/tests/compiler/memory.optimized.wat b/tests/compiler/memory.optimized.wat index b9acc22e85..bf670ac375 100644 --- a/tests/compiler/memory.optimized.wat +++ b/tests/compiler/memory.optimized.wat @@ -158,17 +158,6 @@ global.set $memory/ptr i32.const 1167 global.set $memory/ptr - global.get $memory/ptr - i32.const 1167 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 39 - i32.const 1 - call $~lib/builtins/abort - unreachable - end i32.const 1169 global.set $memory/ptr i32.const 1169 diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 3fd153cc6e..5ff5fba74d 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -355,11 +355,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -367,18 +362,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -397,116 +399,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -514,7 +513,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -529,8 +528,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -566,18 +565,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -588,7 +587,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -621,13 +620,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -639,7 +638,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -656,9 +655,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -667,9 +666,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -696,7 +695,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -710,7 +709,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -724,7 +723,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -1079,7 +1078,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1087,7 +1086,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1157,7 +1156,8 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 f64) + (local $4 i64) + (local $5 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 1920 @@ -1166,77 +1166,79 @@ i32.const 2352 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 + local.tee $4 + i64.const 4294967295 + i64.and + local.set $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $3 + local.tee $4 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - i64.const 0 + local.get $4 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $1 + local.get $0 + local.get $0 + local.get $4 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 2 + i32.add + local.get $1 local.get $0 i32.const 2 i32.add local.get $1 - local.get $3 + local.get $4 i64.const 2147483647 i64.mul local.get $2 @@ -1252,7 +1254,7 @@ i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $4 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 9fb5ce8199..67ce4a87be 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -162,7 +162,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -170,11 +170,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -637,10 +637,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index d25ba45aa4..2f72376819 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index bcfd706103..25eb8062b8 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 0ee135fd09..b95566396a 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index a655fd3623..66af931863 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -718,10 +718,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1091,22 +1091,22 @@ (local $2 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 local.tee $1 + local.tee $0 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $2 call $~lib/rt/pure/__release end - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release ) (func $rc/optimize/OptimizeARC.keeps.partialRetains (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 04e6d6ae71..941e7b0233 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 5c66d5b631..28e4de31cb 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -630,10 +630,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 78726945aa..7cfb5a6905 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -370,11 +370,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -382,18 +377,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -412,116 +414,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -529,7 +528,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -544,8 +543,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -581,18 +580,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -603,7 +602,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -636,13 +635,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -654,7 +653,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -671,9 +670,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -682,9 +681,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -711,7 +710,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -725,7 +724,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -739,7 +738,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -1094,7 +1093,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1102,7 +1101,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1172,6 +1171,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) + (local $4 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2064 @@ -1180,77 +1180,79 @@ i32.const 2496 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 + local.tee $1 + i64.const 4294967295 + i64.and + local.set $2 + local.get $1 i64.const 32 i64.shr_u - local.tee $3 + local.tee $1 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $4 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $4 i64.const 4294967295 i64.and - i64.const 0 + local.get $1 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $3 + local.get $0 + local.get $0 + local.get $1 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $4 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $4 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 3 + i32.add + local.get $3 local.get $0 i32.const 3 i32.add - local.get $1 local.get $3 + local.get $1 i64.const 2147483647 i64.mul local.get $2 @@ -1262,14 +1264,14 @@ i64.const 32 i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294966784 i64.mul - local.get $1 + local.get $3 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index b6e217bab8..43839dd3cf 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -437,35 +437,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -484,117 +485,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -602,7 +599,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -617,10 +614,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -638,7 +635,7 @@ i32.const 2280 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -654,19 +651,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -677,7 +674,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -702,21 +699,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -728,7 +725,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -744,10 +741,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -755,9 +752,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -784,13 +781,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -799,7 +796,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -813,7 +810,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -1196,7 +1193,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1204,7 +1201,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1272,18 +1269,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -1294,67 +1294,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1368,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -1377,71 +1378,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 1408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + 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/_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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1450,47 +1471,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -1499,48 +1523,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -1552,13 +1561,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index 08c31d502b..54dc6c4497 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -182,7 +182,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -190,11 +190,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -657,10 +657,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1347,11 +1347,6 @@ (local $10 i32) (local $11 i64) (local $12 i64) - local.get $3 - local.get $1 - i64.sub - local.set $9 - local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -1359,18 +1354,25 @@ local.tee $10 i64.extend_i32_s i64.shl - local.tee $11 - i64.const 1 + local.set $9 + local.get $3 + local.get $1 i64.sub - local.tee $12 - i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $9 + i64.const 1 + i64.sub + local.tee $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -1389,116 +1391,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if + block $case0|1 local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -1506,7 +1505,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -1521,8 +1520,8 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -1558,18 +1557,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $8 - local.get $9 + local.tee $9 + local.get $8 i64.sub i64.gt_u - local.get $8 local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -1580,7 +1579,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -1613,13 +1612,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $12 local.get $6 i64.extend_i32_s i64.or @@ -1631,7 +1630,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.wrap_i64 i32.const 65535 i32.and @@ -1648,9 +1647,9 @@ i32.sub local.set $4 local.get $3 - local.get $12 + local.get $11 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -1659,9 +1658,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -1688,7 +1687,7 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $9 i64.add local.tee $8 local.get $3 @@ -1702,7 +1701,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $9 i64.ge_u i32.const 0 local.get $1 @@ -1716,7 +1715,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $9 i64.add local.set $1 br $while-continue|6 @@ -2071,7 +2070,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -2079,7 +2078,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -2149,7 +2148,8 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 f64) + (local $4 i64) + (local $5 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 2096 @@ -2158,77 +2158,79 @@ i32.const 2528 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 + local.tee $4 + i64.const 4294967295 + i64.and + local.set $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $3 + local.tee $4 i64.const 31 i64.shl local.get $2 - i64.const 4294967295 - i64.and - local.tee $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - i64.const 0 + local.get $4 + i64.const 10 + i64.shl 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 1 + i64.sub + local.set $1 + local.get $0 + local.get $0 + local.get $4 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $1 + local.tee $3 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294967295 i64.and - local.get $3 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 1 + i32.add + local.get $1 local.get $0 i32.const 1 i32.add local.get $1 - local.get $3 + local.get $4 i64.const 2147483647 i64.mul local.get $2 @@ -2244,7 +2246,7 @@ i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $4 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 4c99175311..84a4d6dc9f 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -180,7 +180,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -188,11 +188,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -655,10 +655,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1560,10 +1560,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 @@ -1781,56 +1781,57 @@ i32.const 3 call $~lib/rt/tlsf/__alloc 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 i32.const 12 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 i32.const 12 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $2 + local.set $1 + local.get $2 + local.get $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $0 - i32.store - local.get $3 local.get $1 + i32.store + local.get $0 + local.get $2 i32.store offset=4 - local.get $3 + local.get $0 i32.const 12 i32.store offset=8 - local.get $3 + local.get $0 i32.const 3 i32.store offset=12 - local.get $3 + local.get $0 call $~lib/array/Array#push - local.get $3 + local.get $0 call $~lib/array/Array#push - local.get $3 + local.get $0 i32.load offset=12 - local.tee $1 + local.tee $2 i32.const 1 i32.lt_s if @@ -1841,72 +1842,73 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $0 i32.load offset=4 - local.get $1 + local.get $2 i32.const 1 i32.sub - local.tee $1 + local.tee $2 i32.const 2 i32.shl i32.add i32.load drop - local.get $3 - local.get $1 + local.get $0 + local.get $2 i32.store offset=12 - local.get $3 + local.get $0 call $~lib/rt/pure/__release i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc 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 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 i32.const 0 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $2 + local.set $1 + local.get $2 + local.get $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $0 - i32.store - local.get $3 local.get $1 + i32.store + local.get $0 + local.get $2 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 $3 + local.get $0 loop $for-loop|0 - local.get $2 + local.get $4 i32.const 10 i32.lt_s if @@ -1914,47 +1916,48 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $0 i32.const 0 call $~lib/memory/memory.fill - local.get $1 - local.tee $0 - local.get $3 + local.get $0 + local.set $1 + local.get $0 + local.get $2 i32.load local.tee $5 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 + local.set $1 local.get $5 call $~lib/rt/pure/__release end - local.get $3 - local.get $0 - i32.store - local.get $3 + local.get $2 local.get $1 + i32.store + local.get $2 + local.get $0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 @@ -1964,15 +1967,15 @@ i32.const 10 i32.lt_s if - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=12 local.tee $1 i32.const 1 i32.add local.tee $5 call $~lib/array/ensureSize - local.get $3 + local.get $2 i32.load offset=4 local.get $1 i32.const 2 @@ -1981,7 +1984,7 @@ i32.const 1344 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $2 local.get $5 i32.store offset=12 i32.const 1344 @@ -1993,12 +1996,12 @@ br $for-loop|1 end end - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $4 i32.const 1 i32.add - local.set $2 + local.set $4 br $for-loop|0 end end @@ -2006,14 +2009,14 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $2 + local.tee $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 1456 call $~lib/string/String.__concat - local.get $2 + local.get $0 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 @@ -2027,13 +2030,13 @@ i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 local.tee $0 local.get $1 - local.tee $2 + local.tee $3 i32.load local.tee $4 i32.ne @@ -2044,94 +2047,95 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.get $0 i32.store local.get $2 - local.set $0 + local.set $4 + local.get $2 local.get $3 - local.tee $2 - local.get $0 + local.tee $0 i32.load - local.tee $4 + local.tee $3 i32.ne if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 local.get $4 + call $~lib/rt/pure/__retain + local.set $4 + local.get $3 call $~lib/rt/pure/__release end local.get $0 - local.get $2 + local.get $4 i32.store - local.get $0 - local.tee $2 - local.get $3 - local.tee $0 + local.get $1 + local.get $2 + local.tee $3 i32.load local.tee $4 i32.ne if - local.get $2 + local.get $0 call $~lib/rt/pure/__retain - local.set $2 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $2 i32.store local.get $1 - local.tee $2 - local.get $0 + local.tee $0 + local.get $3 i32.load local.tee $4 i32.ne if - local.get $2 + local.get $0 call $~lib/rt/pure/__retain - local.set $2 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $2 i32.store + local.get $1 + local.set $4 local.get $3 + local.tee $0 local.get $1 - local.tee $2 i32.load - local.tee $4 + local.tee $3 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $2 + local.get $4 local.get $0 i32.store local.get $1 - local.get $3 + local.get $2 i32.load local.tee $0 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 + local.set $4 local.get $0 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) @@ -2418,26 +2422,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR + local.tee $2 local.set $0 + global.get $~lib/rt/pure/CUR + local.set $3 loop $for-loop|0 - local.get $4 local.get $0 + local.get $3 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.load offset=4 - local.tee $2 + local.tee $5 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.const 0 @@ -2446,51 +2450,51 @@ i32.const 0 end if - local.get $5 + local.get $4 call $~lib/rt/pure/markGray - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 else i32.const 0 - local.get $2 + local.get $5 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $5 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $5 + local.get $4 call $~lib/rt/tlsf/freeBlock else + local.get $4 local.get $5 - local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end - local.get $3 + local.get $2 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 @@ -2507,18 +2511,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $3 + local.get $2 i32.lt_u if local.get $0 i32.load - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $2 + local.get $3 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 @@ -2547,14 +2551,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 72b4c576f6..da3868a035 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -633,10 +633,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 671366654c..bfe71913a8 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1909,8 +1909,17 @@ i32.load i32.const 32 i32.and - i32.eqz if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else local.get $0 local.get $1 i32.const 1 @@ -1940,16 +1949,6 @@ i32.add global.set $~lib/rt/pure/CUR end - else - local.get $0 - local.get $1 - i32.const 1 - i32.sub - local.get $2 - i32.const -268435456 - i32.and - i32.or - i32.store offset=4 end end ) @@ -2066,25 +2065,25 @@ global.get $~lib/rt/pure/ROOTS local.tee $1 local.tee $3 - local.set $4 - global.get $~lib/rt/pure/CUR local.set $0 + global.get $~lib/rt/pure/CUR + local.set $5 loop $for-loop|0 - local.get $4 local.get $0 + local.get $5 i32.lt_u if - local.get $4 + local.get $0 i32.load - local.tee $5 - i32.load offset=4 local.tee $2 + i32.load offset=4 + local.tee $4 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $2 + local.get $4 i32.const 268435455 i32.and i32.const 0 @@ -2093,10 +2092,10 @@ i32.const 0 end if - local.get $5 + local.get $2 call $~lib/rt/pure/markGray local.get $3 - local.get $5 + local.get $2 i32.store local.get $3 i32.const 4 @@ -2104,29 +2103,29 @@ local.set $3 else i32.const 0 - local.get $2 + local.get $4 i32.const 268435455 i32.and i32.eqz - local.get $2 + local.get $4 i32.const 1879048192 i32.and select if - local.get $5 + local.get $2 call $~lib/rt/pure/finalize else - local.get $5 local.get $2 + local.get $4 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 + local.set $0 br $for-loop|0 end end @@ -2193,14 +2192,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 0a6d9adf60..6b8a723a9a 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index dcb6c1ef2d..554b1e34ef 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -683,10 +683,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 9691d0bf30..503be29503 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -539,7 +539,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -547,11 +547,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1014,10 +1014,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1553,11 +1553,11 @@ i32.and i32.const 24 i32.add - local.tee $3 + local.tee $5 i32.add local.set $1 local.get $2 - local.get $3 + local.get $5 i32.sub local.set $2 local.get $0 @@ -1919,12 +1919,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $5 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $5 + local.set $2 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -1933,23 +1933,23 @@ if local.get $4 local.get $3 - local.get $5 + local.get $2 call $~lib/memory/memory.copy end local.get $4 - local.tee $3 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $5 local.get $2 - local.get $3 i32.store offset=4 - local.get $2 + local.get $5 local.get $1 i32.store offset=8 - local.get $2 + local.get $5 local.get $0 i32.store offset=12 - local.get $2 + local.get $5 ) (func $~lib/array/Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -2384,10 +2384,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 @@ -2603,7 +2603,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 @@ -2611,7 +2611,7 @@ select local.tee $4 i32.add - local.tee $2 + local.tee $3 i32.const 268435452 i32.gt_u if @@ -2622,23 +2622,23 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 2 i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $3 + local.get $2 i32.const 2 i32.shl - local.tee $0 + local.tee $2 call $~lib/memory/memory.copy - local.get $0 + local.get $2 local.get $5 i32.add local.get $1 @@ -2649,7 +2649,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 ) (func $~lib/array/Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -3809,10 +3809,10 @@ (local $7 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $1 + local.set $4 local.get $0 i32.load offset=12 - local.tee $4 + local.tee $1 i32.const 2 i32.const 3 i32.const 0 @@ -3823,11 +3823,11 @@ local.set $6 loop $for-loop|0 local.get $2 - local.get $4 + local.get $1 local.get $0 i32.load offset=12 local.tee $3 - local.get $4 + local.get $1 local.get $3 i32.lt_s select @@ -3850,7 +3850,7 @@ local.get $7 local.get $2 local.get $0 - local.get $1 + local.get $4 i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store @@ -3861,7 +3861,7 @@ br $for-loop|0 end end - local.get $1 + local.get $4 call $~lib/rt/pure/__release local.get $5 ) @@ -6004,7 +6004,7 @@ (local $3 i32) local.get $2 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 local.get $0 i32.load offset=12 @@ -6025,16 +6025,16 @@ local.get $1 i32.const 1 i32.add - local.tee $3 + local.tee $2 i32.const 2 call $~lib/array/ensureSize local.get $0 - local.get $3 + local.get $2 i32.store offset=12 end - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 local.get $0 i32.load offset=4 local.get $1 @@ -6047,16 +6047,16 @@ i32.ne if local.get $0 - local.get $3 + local.get $2 call $~lib/rt/pure/__retain i32.store local.get $1 call $~lib/rt/pure/__release end - local.get $3 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release ) (func $std/array/createReverseOrderedNestedArray (result i32) (local $0 i32) @@ -6264,7 +6264,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 i32.const 1 i32.le_s if @@ -6276,22 +6276,22 @@ end local.get $0 i32.load offset=4 - local.set $2 - local.get $3 + local.set $3 + local.get $2 i32.const 2 i32.eq if - local.get $2 + local.get $3 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.load call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~argumentsLength - local.get $3 + local.get $2 local.get $4 local.get $1 i32.load @@ -6299,16 +6299,16 @@ i32.const 0 i32.lt_s if - local.get $2 + local.get $3 local.get $4 i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store end local.get $0 call $~lib/rt/pure/__retain - local.get $3 + local.get $2 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -6316,13 +6316,13 @@ call $~lib/rt/pure/__release return end - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $4 call $~lib/util/sort/insertionSort<~lib/array/Array> - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -7366,9 +7366,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $0 + local.tee $2 call $~lib/util/number/utoa_dec_simple - local.get $0 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7687,35 +7687,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -7734,117 +7735,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -7852,7 +7849,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -7867,10 +7864,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -7888,7 +7885,7 @@ i32.const 9896 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -7904,19 +7901,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -7927,7 +7924,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -7952,21 +7949,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -7978,7 +7975,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -7994,10 +7991,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -8005,9 +8002,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -8034,13 +8031,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -8049,7 +8046,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -8063,7 +8060,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -8246,7 +8243,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -8254,7 +8251,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -8322,18 +8319,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -8344,67 +8344,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 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 + local.set $2 + local.get $4 i32.const 1 - local.get $6 + local.get $4 select i32.const 1075 i32.sub - local.tee $6 + local.tee $4 i32.const 1 i32.sub - local.get $4 + local.get $2 + i64.const 1 + i64.shl + i64.const 1 + i64.add + local.tee $5 + i64.clz + i32.wrap_i64 + local.tee $3 i32.sub - local.set $4 + local.set $7 + local.get $5 + local.get $3 + i64.extend_i32_s + i64.shl + global.set $~lib/util/number/_frc_plus local.get $2 local.get $2 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8417,8 +8418,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -8427,71 +8428,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 9024 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 9720 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -8500,47 +8521,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -8549,48 +8573,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -8602,13 +8611,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) @@ -8964,22 +8973,23 @@ local.get $8 if local.get $1 - local.tee $2 + local.get $1 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $2 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $2 + local.set $1 end local.get $3 i32.const 1 @@ -9059,132 +9069,133 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $8 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $7 i32.const 0 i32.lt_s if - local.get $5 + local.get $8 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $7 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $3 + local.get $2 select return end i32.const 7840 local.set $1 - local.get $5 + local.get $8 call $~lib/string/String#get:length - local.set $8 + local.set $5 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $7 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $7 - local.tee $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $5 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $8 call $~lib/string/String.__concat - local.tee $7 - local.tee $1 - local.get $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -9192,21 +9203,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -9266,21 +9277,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9422,14 +9433,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9850,10 +9861,10 @@ i64.const 10 i64.lt_u if + local.get $0 local.get $2 i32.const 1 i32.shl - local.get $0 i32.add local.get $1 i64.const 48 @@ -9868,16 +9879,16 @@ i64.const 4294967295 i64.le_u if - local.get $2 local.get $1 i32.wrap_i64 - local.tee $2 + local.tee $3 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $3 + local.set $2 local.get $0 - local.get $2 local.get $3 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -9886,10 +9897,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $3 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $3 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10092,168 +10103,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10280,14 +10292,14 @@ local.get $1 i32.const 255 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -10436,168 +10448,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10619,168 +10632,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10806,70 +10820,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 @@ -10878,67 +10892,68 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -10947,24 +10962,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end 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 $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -11121,21 +11136,21 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $0 + local.set $4 i32.const 16 i32.const 27 call $~lib/rt/tlsf/__alloc - local.tee $4 + local.tee $0 local.get $3 i32.store offset=12 - local.get $4 + local.get $0 local.get $2 i32.store offset=8 - local.get $4 local.get $0 - i32.store offset=4 local.get $4 + i32.store offset=4 local.get $0 + local.get $4 call $~lib/rt/pure/__retain i32.store i32.const 0 @@ -11153,8 +11168,8 @@ i32.load local.tee $5 if - local.get $0 local.get $1 + local.get $4 i32.add local.get $5 i32.load offset=4 @@ -11181,7 +11196,7 @@ local.get $3 i32.lt_s if - local.get $0 + local.get $4 local.get $2 i32.const 2 i32.shl @@ -11196,7 +11211,7 @@ br $for-loop|2 end end - local.get $4 + local.get $0 call $~lib/rt/pure/__retain ) (func $start:std/array @@ -17457,7 +17472,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 @@ -17465,7 +17480,7 @@ select local.tee $4 i32.add - local.tee $2 + local.tee $3 i32.const 268435452 i32.gt_u if @@ -17476,23 +17491,23 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 2 i32.const 7 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $3 + local.get $2 i32.const 2 i32.shl - local.tee $0 + local.tee $2 call $~lib/memory/memory.copy - local.get $0 + local.get $2 local.get $5 i32.add local.get $1 @@ -17503,7 +17518,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19193,14 +19208,14 @@ (local $3 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $1 + local.set $2 local.get $0 local.get $0 i32.load offset=12 local.tee $3 i32.const 1 i32.add - local.tee $2 + local.tee $1 i32.const 2 call $~lib/array/ensureSize local.get $0 @@ -19209,15 +19224,15 @@ i32.const 2 i32.shl i32.add - local.get $1 + local.get $2 call $~lib/rt/pure/__retain i32.store local.get $0 - local.get $2 - i32.store offset=12 local.get $1 - call $~lib/rt/pure/__release + i32.store offset=12 local.get $2 + call $~lib/rt/pure/__release + local.get $1 ) (func $~lib/array/Array<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19236,9 +19251,9 @@ i32.const 0 local.get $1 select - local.tee $5 + local.tee $4 i32.add - local.tee $3 + local.tee $5 i32.const 268435452 i32.gt_u if @@ -19249,15 +19264,15 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 2 i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $5 i32.load offset=4 - local.set $3 + local.set $6 local.get $2 i32.const 2 i32.shl @@ -19266,49 +19281,49 @@ i32.load offset=4 local.set $0 loop $for-loop|0 - local.get $4 + local.get $3 local.get $2 i32.lt_u if local.get $3 - local.get $4 + local.get $6 i32.add local.get $0 - local.get $4 + local.get $3 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $3 i32.const 4 i32.add - local.set $4 + local.set $3 br $for-loop|0 end end local.get $2 - local.get $3 + local.get $6 i32.add - local.set $4 + local.set $3 local.get $1 i32.load offset=4 - local.set $3 - local.get $5 + local.set $2 + local.get $4 i32.const 2 i32.shl - local.set $2 + local.set $4 i32.const 0 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $4 i32.lt_u if local.get $0 - local.get $4 + local.get $3 i32.add local.get $0 - local.get $3 + local.get $2 i32.add i32.load call $~lib/rt/pure/__retain @@ -19322,7 +19337,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $6 + local.get $5 ) (func $~lib/array/Array<~lib/string/String>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -20640,12 +20655,12 @@ local.get $0 local.get $1 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $1 local.get $2 call $~lib/array/Array<~lib/string/String>#indexOf i32.const 0 i32.ge_s - local.get $0 + local.get $1 call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#indexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index b0dafe80b1..84a4ff6fb6 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -645,10 +645,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 1fc37200c5..ce1d4406bd 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index e1e10c778f..f4bf646b69 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -177,7 +177,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -185,11 +185,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -652,10 +652,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1379,55 +1379,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -1435,73 +1435,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -1867,10 +1867,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 @@ -2406,55 +2406,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load8_s offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -2462,73 +2462,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -2751,55 +2751,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load i32.store - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load call $~lib/util/hash/hash32 local.get $1 @@ -2807,73 +2807,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -3611,55 +3611,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -3667,73 +3667,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -3977,55 +3977,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $3 i32.load8_u offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -4033,73 +4033,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -4881,55 +4881,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -4937,73 +4937,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -5305,55 +5305,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load16_s offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -5361,73 +5361,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6178,55 +6178,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6234,73 +6234,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6548,55 +6548,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $3 i32.load16_u offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6604,73 +6604,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=4 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -8631,55 +8631,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i64.load i64.store - local.get $3 local.get $2 + local.get $3 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -8687,73 +8687,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=12 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) @@ -9120,55 +9120,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 i64.load i64.store - local.get $3 local.get $2 + local.get $3 i64.load offset=8 i64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -9176,73 +9176,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=16 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32) (local $3 i32) @@ -10593,55 +10593,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f32.load f32.store - local.get $3 local.get $2 + local.get $3 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -10650,73 +10650,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) @@ -10996,55 +10996,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f32.load f32.store - local.get $3 local.get $2 + local.get $3 f32.load offset=4 f32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -11053,73 +11053,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=8 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32) (local $3 i32) @@ -11829,55 +11829,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f64.load f64.store - local.get $3 local.get $2 + local.get $3 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -11886,73 +11886,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=12 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) @@ -12232,55 +12232,55 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $5 + local.get $4 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 $5 + local.set $4 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $4 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.tee $3 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $3 f64.load f64.store - local.get $3 local.get $2 + local.get $3 f64.load offset=8 f64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $5 + local.get $3 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -12289,73 +12289,73 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $3 i32.load i32.store offset=16 - local.get $2 local.get $3 + local.get $2 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $5 local.tee $2 - i32.load + local.get $0 local.tee $3 + i32.load + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $3 local.get $1 i32.store offset=4 - local.get $2 + local.get $3 local.set $1 - local.get $5 - local.tee $2 + local.get $4 + local.tee $3 local.get $1 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end local.get $1 - local.get $2 + local.get $3 i32.store offset=8 local.get $1 - local.get $7 + local.get $8 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $6 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32) (local $3 i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index e9c68a62b6..13fc48a541 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -1045,7 +1045,9 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i32) + (local $5 f64) + (local $6 f64) + (local $7 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -1087,7 +1089,7 @@ return end i32.const -54 - local.set $5 + local.set $7 local.get $0 f64.const 18014398509481984 f64.mul @@ -1120,6 +1122,7 @@ end end end + f64.const 0.5 local.get $2 i64.const 4294967295 i64.and @@ -1139,27 +1142,27 @@ f64.const 1 f64.sub local.tee $3 + f64.mul + local.get $3 + f64.mul + local.set $4 + local.get $3 f64.const 2 local.get $3 f64.add f64.div - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 + f64.mul + local.tee $6 + local.get $6 f64.mul local.set $0 + local.get $5 local.get $4 - f64.const 0.5 - local.get $3 - f64.mul - local.get $3 - f64.mul - local.tee $4 - local.get $0 + local.get $6 f64.const 0.6666666666666735 local.get $0 - local.get $0 - f64.mul - local.tee $0 f64.const 0.2857142874366239 local.get $0 f64.const 0.1818357216161805 @@ -1186,7 +1189,7 @@ f64.add f64.add f64.mul - local.get $5 + local.get $7 local.get $1 i32.const 20 i32.shr_s @@ -1400,30 +1403,30 @@ local.get $1 f32.add f32.div - local.tee $4 - local.get $4 + local.tee $0 + local.get $0 f32.mul local.tee $6 local.get $6 f32.mul - local.set $0 - local.get $4 + local.set $4 + local.get $0 f32.const 0.5 local.get $1 f32.mul local.get $1 f32.mul - local.tee $4 + local.tee $0 local.get $6 f32.const 0.6666666269302368 - local.get $0 + local.get $4 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $4 f32.const 0.40000972151756287 - local.get $0 + local.get $4 f32.const 0.24279078841209412 f32.mul f32.add @@ -1433,17 +1436,17 @@ f32.mul local.get $3 f32.convert_i32_s - local.tee $0 + local.tee $4 f32.const 9.05800061445916e-06 f32.mul local.get $5 f32.add f32.add - local.get $4 + local.get $0 f32.sub local.get $1 f32.add - local.get $0 + local.get $4 f32.const 0.6931381225585938 f32.mul f32.add @@ -1452,7 +1455,8 @@ (local $1 i32) (local $2 f32) (local $3 f32) - (local $4 i32) + (local $4 f32) + (local $5 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -1490,7 +1494,7 @@ return end i32.const -25 - local.set $4 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -1532,6 +1536,9 @@ local.tee $3 local.get $3 f32.mul + local.tee $4 + local.get $4 + f32.mul local.set $2 local.get $3 f32.const 0.5 @@ -1540,12 +1547,9 @@ local.get $0 f32.mul local.tee $3 - local.get $2 + local.get $4 f32.const 0.6666666269302368 local.get $2 - local.get $2 - f32.mul - local.tee $2 f32.const 0.2849878668785095 f32.mul f32.add @@ -1560,7 +1564,7 @@ f32.add f32.add f32.mul - local.get $4 + local.get $5 local.get $1 i32.const 23 i32.shr_s @@ -2616,7 +2620,7 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $3 local.get $6 i32.wrap_i64 local.get $1 @@ -2625,13 +2629,12 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.set $4 + local.tee $4 + i32.const 1072693248 + i32.sub local.get $6 i32.wrap_i64 local.tee $7 - local.get $4 - i32.const 1072693248 - i32.sub i32.or i32.eqz if @@ -2644,7 +2647,7 @@ i32.shr_u i32.const 2 i32.and - local.get $5 + local.get $3 i32.const 31 i32.shr_u i32.or @@ -2653,7 +2656,7 @@ i32.const 2147483647 i32.and local.set $4 - local.get $5 + local.get $3 i32.const 2147483647 i32.and local.tee $5 @@ -2831,10 +2834,10 @@ end local.get $0 i32.reinterpret_f32 - local.set $3 + local.set $4 local.get $1 i32.reinterpret_f32 - local.tee $4 + local.tee $3 i32.const 1065353216 i32.eq if @@ -2842,24 +2845,24 @@ call $~lib/math/NativeMathf.atan return end - local.get $4 + local.get $3 i32.const 30 i32.shr_u i32.const 2 i32.and - local.get $3 + local.get $4 i32.const 31 i32.shr_u i32.or local.set $2 - local.get $4 + local.get $3 i32.const 2147483647 i32.and - local.set $4 - local.get $3 + local.set $3 + local.get $4 i32.const 2147483647 i32.and - local.tee $3 + local.tee $4 i32.eqz if block $break|0 @@ -2894,10 +2897,10 @@ end end block $folding-inner0 - local.get $4 + local.get $3 i32.eqz br_if $folding-inner0 - local.get $4 + local.get $3 i32.const 2139095040 i32.eq if @@ -2913,7 +2916,7 @@ i32.const 2 i32.and select - local.get $3 + local.get $4 i32.const 2139095040 i32.eq select @@ -2928,20 +2931,20 @@ return end i32.const 1 - local.get $3 + local.get $4 i32.const 2139095040 i32.eq - local.get $4 + local.get $3 i32.const 218103808 i32.add - local.get $3 + local.get $4 i32.lt_u select br_if $folding-inner0 - local.get $3 + local.get $4 i32.const 218103808 i32.add - local.get $4 + local.get $3 i32.lt_u i32.const 0 local.get $2 @@ -3110,20 +3113,20 @@ i64.const -1073741824 i64.and f64.reinterpret_i64 - local.tee $0 - local.get $0 + local.tee $1 + local.get $1 f64.mul f64.div - local.set $1 - local.get $0 - local.get $0 + local.set $0 + local.get $1 local.get $1 local.get $0 + local.get $1 f64.sub f64.const 2 - local.get $0 - f64.mul local.get $1 + f64.mul + local.get $0 f64.add f64.div f64.mul @@ -3281,8 +3284,8 @@ (local $4 i64) (local $5 i64) (local $6 i64) - (local $7 i32) - (local $8 i64) + (local $7 i64) + (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i64) @@ -3294,7 +3297,7 @@ i64.shr_s i64.const 1045 i64.sub - local.tee $2 + local.tee $4 i64.const 6 i64.shr_s i32.wrap_i64 @@ -3302,45 +3305,45 @@ i32.shl i32.const 1064 i32.add - local.tee $7 + local.tee $8 i64.load - local.set $6 - local.get $7 + local.set $5 + local.get $8 i64.load offset=8 - local.set $4 - local.get $7 + local.set $2 + local.get $8 i64.load offset=16 local.set $1 - local.get $2 + local.get $4 i64.const 63 i64.and - local.tee $2 + local.tee $4 i64.const 0 i64.ne if - local.get $6 - local.get $2 - i64.shl + local.get $5 local.get $4 - i64.const 64 + i64.shl local.get $2 + i64.const 64 + local.get $4 i64.sub local.tee $3 i64.shr_u i64.or - local.set $6 - local.get $4 + local.set $5 local.get $2 + local.get $4 i64.shl local.get $1 local.get $3 i64.shr_u i64.or - local.set $4 + local.set $2 local.get $1 - local.get $2 + local.get $4 i64.shl - local.get $7 + local.get $8 i64.load offset=24 local.get $3 i64.shr_u @@ -3352,41 +3355,41 @@ i64.and i64.const 4503599627370496 i64.or - local.tee $2 + local.tee $4 i64.const 4294967295 i64.and local.tee $3 - local.get $4 + local.get $2 i64.const 32 i64.shr_u - local.tee $8 + local.tee $7 i64.mul - local.get $4 + local.get $2 i64.const 4294967295 i64.and - local.tee $5 + local.tee $6 local.get $3 i64.mul local.tee $9 i64.const 32 i64.shr_u i64.add - local.set $4 - local.get $5 - local.get $2 + local.set $2 + local.get $6 + local.get $4 i64.const 32 i64.shr_u - local.tee $5 + local.tee $6 i64.mul - local.get $4 + local.get $2 i64.const 4294967295 i64.and i64.add local.set $3 - local.get $5 - local.get $8 + local.get $6 + local.get $7 i64.mul - local.get $4 + local.get $2 i64.const 32 i64.shr_u i64.add @@ -3395,19 +3398,14 @@ i64.shr_u i64.add global.set $~lib/math/res128_hi - global.get $~lib/math/res128_hi - local.get $2 - local.get $6 - i64.mul - i64.add local.get $1 i64.const 32 i64.shr_u - local.get $2 + local.get $4 i64.const 32 i64.shr_s i64.mul - local.tee $4 + local.tee $2 local.get $9 i64.const 4294967295 i64.and @@ -3416,60 +3414,66 @@ i64.shl i64.add i64.add - local.tee $2 - local.get $4 + local.tee $3 + local.get $2 i64.lt_u i64.extend_i32_u + global.get $~lib/math/res128_hi + local.get $4 + local.get $5 + i64.mul i64.add - local.tee $8 + i64.add + local.tee $9 i64.const 2 i64.shl - local.get $2 + local.get $3 i64.const 62 i64.shr_u i64.or - local.tee $6 + local.tee $4 i64.const 63 i64.shr_s local.tee $1 i64.const 1 i64.shr_s - local.get $6 + local.get $4 i64.xor - local.tee $3 + local.tee $5 i64.clz - local.set $4 - local.get $3 - local.get $4 + local.set $2 + local.get $5 + local.get $2 i64.shl local.get $1 - local.get $2 + local.get $3 i64.const 2 i64.shl i64.xor - local.tee $5 + local.tee $10 i64.const 64 - local.get $4 + local.get $2 i64.sub i64.shr_u i64.or - local.tee $2 - i64.const 4294967295 - i64.and - local.set $3 - local.get $2 + local.tee $5 i64.const 32 i64.shr_u - local.tee $9 + local.set $3 + local.get $5 + i64.const 4294967295 + i64.and + local.tee $6 i64.const 560513588 i64.mul - local.get $3 - i64.const 3373259426 - i64.mul + local.set $7 local.get $3 i64.const 560513588 i64.mul - local.tee $10 + local.get $6 + i64.const 3373259426 + i64.mul + local.get $7 i64.const 32 i64.shr_u i64.add @@ -3477,52 +3481,52 @@ i64.const 4294967295 i64.and i64.add - local.set $3 - local.get $9 + local.set $6 + local.get $3 i64.const 3373259426 i64.mul local.get $11 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $6 i64.const 32 i64.shr_u i64.add global.set $~lib/math/res128_hi - local.get $10 + local.get $7 i64.const 4294967295 i64.and - local.get $3 + local.get $6 i64.const 32 i64.shl i64.add local.tee $3 f64.const 3.753184150245214e-04 - local.get $2 + local.get $5 f64.convert_i64_u f64.mul f64.const 3.834951969714103e-04 - local.get $5 - local.get $4 + local.get $10 + local.get $2 i64.shl f64.convert_i64_u f64.mul f64.add i64.trunc_f64_u - local.tee $2 + local.tee $5 i64.lt_u i64.extend_i32_u global.get $~lib/math/res128_hi - local.tee $5 + local.tee $7 i64.const 11 i64.shr_u i64.add f64.convert_i64_u global.set $~lib/math/rempio2_y0 f64.const 5.421010862427522e-20 - local.get $2 local.get $5 + local.get $7 i64.const 53 i64.shl local.get $3 @@ -3535,12 +3539,12 @@ global.set $~lib/math/rempio2_y1 global.get $~lib/math/rempio2_y0 i64.const 4372995238176751616 - local.get $4 + 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 @@ -3553,7 +3557,7 @@ local.get $12 f64.mul global.set $~lib/math/rempio2_y1 - local.get $8 + local.get $9 i64.const 62 i64.shr_s local.get $1 @@ -3562,73 +3566,75 @@ ) (func $~lib/math/NativeMath.cos (param $0 f64) (result f64) (local $1 f64) - (local $2 i64) - (local $3 f64) + (local $2 f64) + (local $3 i64) (local $4 f64) - (local $5 i32) + (local $5 f64) (local $6 i32) (local $7 f64) + (local $8 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 $6 i32.const 31 i32.shr_u - local.set $6 - local.get $5 + local.set $8 + local.get $6 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1072243195 i32.le_u if - local.get $5 + local.get $6 i32.const 1044816030 i32.lt_u if f64.const 1 return end - f64.const 1 - f64.const 0.5 local.get $0 local.get $0 f64.mul - local.tee $3 - f64.mul local.tee $4 + local.get $4 + f64.mul + local.set $5 + f64.const 1 + f64.const 0.5 + local.get $4 + f64.mul + local.tee $2 f64.sub local.tee $1 f64.const 1 local.get $1 f64.sub - local.get $4 + local.get $2 f64.sub - local.get $3 - local.get $3 + local.get $4 + local.get $4 f64.const 0.0416666666666666 - local.get $3 + local.get $4 f64.const -0.001388888888887411 - local.get $3 + local.get $4 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $3 - local.get $3 - f64.mul - local.tee $4 - local.get $4 + local.get $5 + local.get $5 f64.mul f64.const -2.7557314351390663e-07 - local.get $3 + local.get $4 f64.const 2.087572321298175e-09 - local.get $3 + local.get $4 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3645,7 +3651,7 @@ f64.add return end - local.get $5 + local.get $6 i32.const 2146435072 i32.ge_u if @@ -3655,34 +3661,34 @@ return end block $~lib/math/rempio2|inlined.0 (result i32) - local.get $2 + local.get $3 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1094263291 i32.lt_u if - local.get $5 + local.get $6 i32.const 20 i32.shr_u - local.tee $6 + local.tee $8 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $3 + local.tee $5 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $3 + local.get $5 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3697,25 +3703,25 @@ i32.const 16 i32.gt_u if - local.get $3 + local.get $5 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $5 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $2 f64.sub f64.sub - local.set $4 - local.get $6 + local.set $2 + local.get $8 local.get $0 - local.get $4 + local.get $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3730,24 +3736,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $3 + local.get $5 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $5 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $2 f64.sub f64.sub - local.set $4 + local.set $2 local.get $0 - local.get $4 + local.get $2 f64.sub else local.get $1 @@ -3759,113 +3765,116 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $2 f64.sub global.set $~lib/math/rempio2_y1 - local.get $3 + local.get $5 i32.trunc_f64_s br $~lib/math/rempio2|inlined.0 end i32.const 0 - local.get $2 + local.get $3 call $~lib/math/pio2_large_quot - local.tee $5 + local.tee $6 i32.sub - local.get $5 local.get $6 + local.get $8 select end - local.set $6 + local.set $8 global.get $~lib/math/rempio2_y0 - local.set $3 + local.set $2 global.get $~lib/math/rempio2_y1 - local.set $4 - local.get $6 + local.set $1 + local.get $8 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 - local.get $0 - f64.const 0.5 - local.get $4 - f64.mul - local.get $1 f64.const 0.00833333333332249 - local.get $0 + local.get $2 + local.get $2 + f64.mul + local.tee $4 f64.const -1.984126982985795e-04 - local.get $0 + local.get $4 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $4 + local.get $4 + local.get $4 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $4 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - f64.mul - f64.sub + local.set $5 + local.get $2 + local.tee $0 + local.get $4 + f64.const 0.5 + local.get $1 f64.mul local.get $4 + local.get $0 + f64.mul + local.tee $2 + local.get $5 + f64.mul f64.sub + f64.mul local.get $1 + f64.sub + local.get $2 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub else + local.get $2 + local.get $2 + f64.mul + local.tee $7 + local.get $7 + f64.mul + local.set $4 f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $7 f64.mul - local.tee $1 + local.tee $5 f64.sub - local.tee $7 + local.tee $0 f64.const 1 - local.get $7 + local.get $0 f64.sub - local.get $1 + local.get $5 f64.sub - local.get $0 - local.get $0 + local.get $7 + local.get $7 f64.const 0.0416666666666666 - local.get $0 + local.get $7 f64.const -0.001388888888887411 - local.get $0 + local.get $7 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 + local.get $4 + local.get $4 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $7 f64.const 2.087572321298175e-09 - local.get $0 + local.get $7 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3874,8 +3883,8 @@ f64.mul f64.add f64.mul - local.get $3 - local.get $4 + local.get $2 + local.get $1 f64.mul f64.sub f64.add @@ -3885,7 +3894,7 @@ local.get $0 f64.neg local.get $0 - local.get $6 + local.get $8 i32.const 1 i32.add i32.const 2 @@ -3915,17 +3924,14 @@ (local $4 f64) (local $5 i64) (local $6 i64) - (local $7 i64) + (local $7 i32) (local $8 i64) - (local $9 i32) - (local $10 i32) - (local $11 i64) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 31 i32.shr_u - local.set $10 + local.set $7 local.get $1 i32.const 2147483647 i32.and @@ -3945,24 +3951,24 @@ local.tee $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4011,46 +4017,10 @@ 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 + local.set $5 f64.const 8.515303950216386e-20 local.get $0 f64.promote_f32 @@ -4062,34 +4032,66 @@ i32.or i64.extend_i32_s local.tee $8 - local.get $6 + local.get $1 + i32.const 6 + i32.shr_s + i32.const 3 + i32.shl + i32.const 1256 + i32.add + local.tee $1 + i64.load local.get $5 i64.shl - local.get $7 + local.get $1 + i64.load offset=8 + local.tee $6 i64.const 64 local.get $5 i64.sub i64.shr_u i64.or i64.mul + local.get $5 + i64.const 32 + i64.gt_u + if (result i64) + local.get $6 + local.get $5 + i64.const 32 + i64.sub + i64.shl + local.get $1 + i64.load offset=16 + i64.const 96 + local.get $5 + i64.sub + i64.shr_u + i64.or + else + local.get $6 + i64.const 32 + local.get $5 + i64.sub + i64.shr_u + end local.get $8 - local.get $11 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $6 + local.tee $5 i64.const 2 i64.shl - local.tee $8 + local.tee $6 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $6 + local.get $5 i64.const 62 i64.shr_u - local.get $8 + local.get $6 i64.const 63 i64.shr_u i64.add @@ -4097,7 +4099,7 @@ local.tee $1 i32.sub local.get $1 - local.get $10 + local.get $7 select end local.set $1 @@ -4139,24 +4141,24 @@ local.get $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4184,27 +4186,28 @@ ) (func $~lib/math/NativeMath.expm1 (param $0 f64) (result f64) (local $1 f64) - (local $2 i32) - (local $3 f64) + (local $2 f64) + (local $3 i32) (local $4 f64) - (local $5 f64) - (local $6 i32) + (local $5 i32) + (local $6 f64) (local $7 i32) (local $8 i64) local.get $0 i64.reinterpret_f64 local.tee $8 - i64.const 63 - i64.shr_u - i32.wrap_i64 - local.set $7 - local.get $8 i64.const 32 i64.shr_u i64.const 2147483647 i64.and i32.wrap_i64 - local.tee $6 + local.set $5 + local.get $8 + i64.const 63 + i64.shr_u + i32.wrap_i64 + local.set $7 + local.get $5 i32.const 1078159482 i32.ge_u if @@ -4230,7 +4233,7 @@ return end end - local.get $6 + local.get $5 i32.const 1071001154 i32.gt_u if @@ -4248,18 +4251,18 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $6 + local.get $5 i32.const 1072734898 i32.lt_u select - local.tee $2 + local.tee $3 f64.convert_i32_s local.tee $1 f64.const 0.6931471803691238 f64.mul f64.sub - local.tee $0 - local.get $0 + local.tee $4 + local.get $4 local.get $1 f64.const 1.9082149292705877e-10 f64.mul @@ -4269,9 +4272,9 @@ f64.sub local.get $1 f64.sub - local.set $3 + local.set $4 else - local.get $6 + local.get $5 i32.const 1016070144 i32.lt_u if @@ -4283,27 +4286,27 @@ f64.const 0.5 local.get $0 f64.mul - local.tee $4 + local.tee $2 f64.mul - local.tee $5 - local.get $5 + local.tee $1 + local.get $1 f64.mul - local.set $1 + local.set $6 f64.const 3 f64.const 1 - local.get $5 + local.get $1 f64.const -0.03333333333333313 f64.mul f64.add - local.get $1 + local.get $6 f64.const 1.5873015872548146e-03 - local.get $5 + local.get $1 f64.const -7.93650757867488e-05 f64.mul f64.add - local.get $1 + local.get $6 f64.const 4.008217827329362e-06 - local.get $5 + local.get $1 f64.const -2.0109921818362437e-07 f64.mul f64.add @@ -4311,59 +4314,59 @@ f64.add f64.mul f64.add - local.tee $1 - local.get $4 + local.tee $6 + local.get $2 f64.mul f64.sub - local.set $4 - local.get $5 + local.set $2 local.get $1 - local.get $4 + local.get $6 + local.get $2 f64.sub f64.const 6 local.get $0 - local.get $4 + local.get $2 f64.mul f64.sub f64.div f64.mul - local.set $1 - local.get $2 + local.set $2 + local.get $3 i32.eqz if local.get $0 local.get $0 - local.get $1 + local.get $2 f64.mul - local.get $5 + local.get $1 f64.sub f64.sub return end local.get $0 - local.get $1 - local.get $3 + local.get $2 + local.get $4 f64.sub f64.mul - local.get $3 + local.get $4 f64.sub - local.get $5 + local.get $1 f64.sub - local.set $3 - local.get $2 + local.set $1 + local.get $3 i32.const -1 i32.eq if f64.const 0.5 local.get $0 - local.get $3 + local.get $1 f64.sub f64.mul f64.const 0.5 f64.sub return end - local.get $2 + local.get $3 i32.const 1 i32.eq if @@ -4372,7 +4375,7 @@ f64.lt if f64.const -2 - local.get $3 + local.get $1 local.get $0 f64.const 0.5 f64.add @@ -4383,13 +4386,13 @@ f64.const 1 f64.const 2 local.get $0 - local.get $3 + local.get $1 f64.sub f64.mul f64.add return end - local.get $2 + local.get $3 i64.extend_i32_s i64.const 1023 i64.add @@ -4398,16 +4401,16 @@ f64.reinterpret_i64 local.set $4 i32.const 1 - local.get $2 + local.get $3 i32.const 56 i32.gt_s - local.get $2 + local.get $3 i32.const 0 i32.lt_s select if local.get $0 - local.get $3 + local.get $1 f64.sub f64.const 1 f64.add @@ -4419,7 +4422,7 @@ local.get $0 local.get $4 f64.mul - local.get $2 + local.get $3 i32.const 1024 i32.eq select @@ -4430,22 +4433,22 @@ local.get $0 f64.const 1 i64.const 1023 - local.get $2 + local.get $3 i64.extend_i32_s i64.sub i64.const 52 i64.shl f64.reinterpret_i64 - local.tee $1 + local.tee $2 f64.sub - local.get $3 + local.get $1 f64.sub f64.const 1 - local.get $3 local.get $1 + local.get $2 f64.add f64.sub - local.get $2 + local.get $3 i32.const 20 i32.lt_s select @@ -4455,8 +4458,8 @@ ) (func $~lib/math/NativeMath.exp (param $0 f64) (result f64) (local $1 f64) - (local $2 i32) - (local $3 f64) + (local $2 f64) + (local $3 i32) (local $4 i32) (local $5 f64) (local $6 i32) @@ -4466,14 +4469,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $2 + local.tee $3 i32.const 31 i32.shr_u local.set $6 - local.get $2 + local.get $3 i32.const 2147483647 i32.and - local.tee $2 + local.tee $3 i32.const 1082532651 i32.ge_u if @@ -4501,12 +4504,12 @@ return end end - local.get $2 + local.get $3 i32.const 1071001154 i32.gt_u if local.get $0 - local.get $2 + local.get $3 i32.const 1072734898 i32.ge_u if (result i32) @@ -4539,7 +4542,7 @@ f64.sub local.set $0 else - local.get $2 + local.get $3 i32.const 1043333120 i32.gt_u if (result f64) @@ -4555,25 +4558,25 @@ local.get $0 local.get $0 f64.mul - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f64.mul local.set $5 f64.const 1 local.get $0 local.get $0 - local.get $3 + local.get $2 f64.const 0.16666666666666602 f64.mul local.get $5 f64.const -2.7777777777015593e-03 - local.get $3 + local.get $2 f64.const 6.613756321437934e-05 f64.mul f64.add local.get $5 f64.const -1.6533902205465252e-06 - local.get $3 + local.get $2 f64.const 4.1381367970572385e-08 f64.mul f64.add @@ -4582,10 +4585,10 @@ f64.mul f64.add f64.sub - local.tee $0 + local.tee $2 f64.mul f64.const 2 - local.get $0 + local.get $2 f64.sub f64.div local.get $7 @@ -4685,24 +4688,25 @@ (local $1 f32) (local $2 f32) (local $3 i32) - (local $4 i32) - (local $5 f32) + (local $4 f32) + (local $5 i32) (local $6 i32) (local $7 f32) local.get $0 i32.reinterpret_f32 - local.tee $4 + local.tee $6 + i32.const 2147483647 + i32.and + local.set $5 + local.get $6 i32.const 31 i32.shr_u local.set $6 - local.get $4 - i32.const 2147483647 - i32.and - local.tee $4 + local.get $5 i32.const 1100331076 i32.ge_u if - local.get $4 + local.get $5 i32.const 2139095040 i32.gt_u if @@ -4724,7 +4728,7 @@ return end end - local.get $4 + local.get $5 i32.const 1051816472 i32.gt_u if @@ -4742,19 +4746,19 @@ f32.copysign f32.add i32.trunc_f32_s - local.get $4 + local.get $5 i32.const 1065686418 i32.lt_u select local.tee $3 f32.convert_i32_s - local.tee $0 + local.tee $1 f32.const 0.6931381225585938 f32.mul f32.sub - local.tee $1 + local.tee $4 + local.get $4 local.get $1 - local.get $0 f32.const 9.05800061445916e-06 f32.mul local.tee $1 @@ -4763,9 +4767,9 @@ f32.sub local.get $1 f32.sub - local.set $5 + local.set $4 else - local.get $4 + local.get $5 i32.const 855638016 i32.lt_u if @@ -4820,10 +4824,10 @@ end local.get $0 local.get $2 - local.get $5 + local.get $4 f32.sub f32.mul - local.get $5 + local.get $4 f32.sub local.get $1 f32.sub @@ -4873,7 +4877,7 @@ i32.const 23 i32.shl f32.reinterpret_i32 - local.set $5 + local.set $4 i32.const 1 local.get $3 i32.const 56 @@ -4894,7 +4898,7 @@ f32.const 1701411834604692317316873e14 f32.mul local.get $0 - local.get $5 + local.get $4 f32.mul local.get $3 i32.const 128 @@ -4926,7 +4930,7 @@ i32.lt_s select f32.add - local.get $5 + local.get $4 f32.mul ) (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32) @@ -5392,27 +5396,27 @@ ) (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32) (local $1 f64) - (local $2 i32) + (local $2 i64) (local $3 i32) - (local $4 f64) - (local $5 i64) + (local $4 i32) + (local $5 f64) block $~lib/util/math/exp2f_lut|inlined.0 (result f32) local.get $0 f64.promote_f32 local.set $1 local.get $0 i32.reinterpret_f32 - local.tee $2 + local.tee $3 i32.const 20 i32.shr_u i32.const 2047 i32.and - local.tee $3 + local.tee $4 i32.const 1072 i32.ge_u if f32.const 0 - local.get $2 + local.get $3 i32.const -8388608 i32.eq br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5420,7 +5424,7 @@ local.get $0 local.get $0 f32.add - local.get $3 + local.get $4 i32.const 2040 i32.ge_u br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5440,12 +5444,15 @@ br_if $~lib/util/math/exp2f_lut|inlined.0 drop end - f64.const 0.6931471806916203 - local.get $1 local.get $1 f64.const 211106232532992 f64.add - local.tee $4 + local.tee $5 + i64.reinterpret_f64 + local.set $2 + f64.const 0.6931471806916203 + local.get $1 + local.get $5 f64.const 211106232532992 f64.sub f64.sub @@ -5463,9 +5470,7 @@ f64.mul f64.mul f64.add - local.get $4 - i64.reinterpret_f64 - local.tee $5 + local.get $2 i32.wrap_i64 i32.const 31 i32.and @@ -5474,7 +5479,7 @@ i32.const 3336 i32.add i64.load - local.get $5 + local.get $2 i64.const 47 i64.shl i64.add @@ -5518,12 +5523,13 @@ (local $3 i64) (local $4 i64) (local $5 f64) - (local $6 i32) - (local $7 f64) + (local $6 f64) + (local $7 i32) (local $8 f64) (local $9 f64) - (local $10 i32) - (local $11 f64) + (local $10 f64) + (local $11 i32) + (local $12 f64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -5548,7 +5554,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $7 i32.const 2047 i32.eq if @@ -5565,7 +5571,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $10 + local.tee $11 i32.const 2047 i32.eq select @@ -5573,8 +5579,8 @@ local.get $0 return end - local.get $10 - local.get $6 + local.get $11 + local.get $7 i32.sub i32.const 64 i32.gt_s @@ -5585,13 +5591,13 @@ return end f64.const 1 - local.set $9 - local.get $10 + local.set $10 + local.get $11 i32.const 1533 i32.gt_s if (result f64) f64.const 5260135901548373507240989e186 - local.set $9 + local.set $10 local.get $1 f64.const 1.90109156629516e-211 f64.mul @@ -5600,12 +5606,12 @@ f64.const 1.90109156629516e-211 f64.mul else - local.get $6 + local.get $7 i32.const 573 i32.lt_s if (result f64) f64.const 1.90109156629516e-211 - local.set $9 + local.set $10 local.get $1 f64.const 5260135901548373507240989e186 f64.mul @@ -5617,69 +5623,69 @@ local.get $0 end end - local.set $0 - local.get $1 - local.get $1 - local.get $1 + local.tee $0 + local.get $0 + local.get $0 f64.const 134217729 f64.mul - local.tee $11 + local.tee $12 f64.sub - local.get $11 + local.get $12 f64.add - local.tee $8 + local.tee $9 f64.sub - local.set $5 - local.get $0 + local.set $6 local.get $0 local.get $0 + f64.mul + local.set $5 + local.get $1 + local.get $1 + local.get $1 f64.const 134217729 f64.mul - local.tee $11 + local.tee $0 f64.sub - local.get $11 + local.get $0 f64.add - local.tee $7 + local.tee $8 f64.sub - local.set $11 - local.get $9 + local.set $12 + local.get $10 local.get $8 local.get $8 f64.mul local.get $1 local.get $1 f64.mul - local.tee $1 + local.tee $0 f64.sub f64.const 2 local.get $8 f64.mul - local.get $5 + local.get $12 f64.add - local.get $5 + local.get $12 f64.mul f64.add - local.get $7 - local.get $7 - f64.mul - local.get $0 - local.get $0 + local.get $9 + local.get $9 f64.mul - local.tee $0 + local.get $5 f64.sub f64.const 2 - local.get $7 + local.get $9 f64.mul - local.get $11 + local.get $6 f64.add - local.get $11 + local.get $6 f64.mul f64.add f64.add - local.get $1 - f64.add local.get $0 f64.add + local.get $5 + f64.add f64.sqrt f64.mul ) @@ -5829,19 +5835,16 @@ ) (func $~lib/math/NativeMath.log10 (param $0 f64) (result f64) (local $1 i32) - (local $2 i64) + (local $2 f64) (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i64) (local $6 f64) (local $7 f64) (local $8 i32) - (local $9 f64) - (local $10 f64) - (local $11 f64) local.get $0 i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5856,7 +5859,7 @@ i32.shr_u end if - local.get $2 + local.get $5 i64.const 1 i64.shl i64.eqz @@ -5885,7 +5888,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5898,7 +5901,7 @@ local.get $0 return else - local.get $2 + local.get $5 i64.const 32 i64.shl i64.eqz @@ -5913,7 +5916,8 @@ end end end - local.get $2 + f64.const 0.5 + local.get $5 i64.const 4294967295 i64.and local.get $1 @@ -5932,64 +5936,43 @@ f64.const 1 f64.sub local.tee $0 + f64.mul + local.get $0 + f64.mul + local.set $3 + local.get $0 f64.const 2 local.get $0 f64.add f64.div + local.tee $6 + local.get $6 + f64.mul local.tee $4 local.get $4 f64.mul - local.set $3 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $9 - f64.const 0.30102999566361177 - f64.mul - local.tee $10 - local.get $0 - f64.const 0.5 + local.set $2 local.get $0 - f64.mul local.get $0 - f64.mul - local.tee $5 + local.get $3 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 - f64.const 0.4342944818781689 - f64.mul - local.tee $11 - f64.add - local.set $7 - local.get $9 - f64.const 3.694239077158931e-13 - f64.mul - local.get $0 - local.get $6 + local.tee $7 f64.sub - local.get $5 + local.get $3 f64.sub - local.get $4 - local.get $5 + local.get $6 local.get $3 + local.get $4 f64.const 0.6666666666666735 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $2 f64.const 0.2857142874366239 - local.get $0 + local.get $2 f64.const 0.1818357216161805 - local.get $0 + local.get $2 f64.const 0.14798198605116586 f64.mul f64.add @@ -5998,11 +5981,11 @@ f64.mul f64.add f64.mul - local.get $0 + local.get $2 f64.const 0.3999999999940942 - local.get $0 + local.get $2 f64.const 0.22222198432149784 - local.get $0 + local.get $2 f64.const 0.15313837699209373 f64.mul f64.add @@ -6013,8 +5996,30 @@ f64.add f64.mul f64.add - local.tee $0 - local.get $6 + local.set $0 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $3 + f64.const 0.30102999566361177 + f64.mul + local.tee $6 + local.get $7 + f64.const 0.4342944818781689 + f64.mul + local.tee $2 + f64.add + local.set $4 + local.get $3 + f64.const 3.694239077158931e-13 + f64.mul + local.get $0 + local.get $7 f64.add f64.const 2.5082946711645275e-11 f64.mul @@ -6023,13 +6028,13 @@ f64.const 0.4342944818781689 f64.mul f64.add - local.get $10 - local.get $7 + local.get $6 + local.get $4 f64.sub - local.get $11 + local.get $2 f64.add f64.add - local.get $7 + local.get $4 f64.add ) (func $std/math/test_log10 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6053,8 +6058,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 i32) - (local $6 f32) + (local $5 f32) + (local $6 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6092,7 +6097,7 @@ return end i32.const -25 - local.set $5 + local.set $6 local.get $0 f32.const 33554432 f32.mul @@ -6131,21 +6136,13 @@ local.get $0 f32.add f32.div - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 f32.mul - local.set $2 - local.get $5 - local.get $1 - i32.const 23 - i32.shr_u - i32.const 127 - i32.sub - i32.add - f32.convert_i32_s - local.tee $6 - f32.const 7.903415166765626e-07 + local.tee $4 + local.get $4 f32.mul + local.set $3 local.get $0 local.get $0 f32.const 0.5 @@ -6159,25 +6156,22 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $4 + local.tee $5 f32.sub local.get $0 f32.sub - local.get $3 - local.get $0 local.get $2 + local.get $0 + local.get $4 f32.const 0.6666666269302368 - local.get $2 - local.get $2 - f32.mul - local.tee $0 + local.get $3 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $3 f32.const 0.40000972151756287 - local.get $0 + local.get $3 f32.const 0.24279078841209412 f32.mul f32.add @@ -6186,8 +6180,20 @@ f32.add f32.mul f32.add - local.tee $0 - local.get $4 + local.set $0 + local.get $6 + local.get $1 + i32.const 23 + i32.shr_u + i32.const 127 + i32.sub + i32.add + f32.convert_i32_s + local.tee $2 + f32.const 7.903415166765626e-07 + f32.mul + local.get $0 + local.get $5 f32.add f32.const -3.168997136526741e-05 f32.mul @@ -6196,11 +6202,11 @@ f32.const 0.434326171875 f32.mul f32.add - local.get $4 + local.get $5 f32.const 0.434326171875 f32.mul f32.add - local.get $6 + local.get $2 f32.const 0.3010292053222656 f32.mul f32.add @@ -6237,18 +6243,16 @@ ) (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64) (local $1 i32) - (local $2 i64) + (local $2 f64) (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i64) (local $6 f64) (local $7 f64) (local $8 i32) - (local $9 f64) - (local $10 f64) local.get $0 i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6263,7 +6267,7 @@ i32.shr_u end if - local.get $2 + local.get $5 i64.const 1 i64.shl i64.eqz @@ -6292,7 +6296,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $2 + local.tee $5 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6305,7 +6309,7 @@ local.get $0 return else - local.get $2 + local.get $5 i64.const 32 i64.shl i64.eqz @@ -6320,7 +6324,8 @@ end end end - local.get $2 + f64.const 0.5 + local.get $5 i64.const 4294967295 i64.and local.get $1 @@ -6339,6 +6344,11 @@ f64.const 1 f64.sub local.tee $0 + f64.mul + local.get $0 + f64.mul + local.set $3 + local.get $0 f64.const 2 local.get $0 f64.add @@ -6346,51 +6356,31 @@ local.tee $4 local.get $4 f64.mul - local.set $3 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $9 - local.get $0 - f64.const 0.5 - local.get $0 + local.tee $6 + local.get $6 f64.mul + local.set $2 local.get $0 - f64.mul - local.tee $5 + local.get $0 + local.get $3 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 - f64.const 1.4426950407214463 - f64.mul - local.tee $10 - f64.add - local.set $7 - local.get $0 - local.get $6 + local.tee $7 f64.sub - local.get $5 + local.get $3 f64.sub local.get $4 - local.get $5 local.get $3 + local.get $6 f64.const 0.6666666666666735 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $2 f64.const 0.2857142874366239 - local.get $0 + local.get $2 f64.const 0.1818357216161805 - local.get $0 + local.get $2 f64.const 0.14798198605116586 f64.mul f64.add @@ -6399,11 +6389,11 @@ f64.mul f64.add f64.mul - local.get $0 + local.get $2 f64.const 0.3999999999940942 - local.get $0 + local.get $2 f64.const 0.22222198432149784 - local.get $0 + local.get $2 f64.const 0.15313837699209373 f64.mul f64.add @@ -6414,8 +6404,24 @@ f64.add f64.mul f64.add - local.tee $0 - local.get $6 + local.set $0 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $3 + local.get $7 + f64.const 1.4426950407214463 + f64.mul + local.tee $2 + f64.add + local.set $4 + local.get $0 + local.get $7 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -6423,13 +6429,13 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $9 - local.get $7 + local.get $3 + local.get $4 f64.sub - local.get $10 + local.get $2 f64.add f64.add - local.get $7 + local.get $4 f64.add ) (func $std/math/test_log2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6453,7 +6459,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 i32) + (local $5 f32) + (local $6 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6491,7 +6498,7 @@ return end i32.const -25 - local.set $5 + local.set $6 local.get $0 f32.const 33554432 f32.mul @@ -6533,6 +6540,9 @@ local.tee $3 local.get $3 f32.mul + local.tee $4 + local.get $4 + f32.mul local.set $2 local.get $0 local.get $0 @@ -6547,25 +6557,22 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $4 + local.tee $5 f32.sub local.get $0 f32.sub local.get $3 local.get $0 - local.get $2 + local.get $4 f32.const 0.6666666269302368 local.get $2 - local.get $2 - f32.mul - local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $0 + local.get $2 f32.const 0.40000972151756287 - local.get $0 + local.get $2 f32.const 0.24279078841209412 f32.mul f32.add @@ -6575,7 +6582,7 @@ f32.mul f32.add local.tee $0 - local.get $4 + local.get $5 f32.add f32.const -1.7605285393074155e-04 f32.mul @@ -6583,11 +6590,11 @@ f32.const 1.44287109375 f32.mul f32.add - local.get $4 + local.get $5 f32.const 1.44287109375 f32.mul f32.add - local.get $5 + local.get $6 local.get $1 i32.const 23 i32.shr_u @@ -6804,6 +6811,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i64.ge_u @@ -6818,39 +6826,36 @@ local.set $2 end local.get $2 - local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 + i64.sub + local.set $4 + local.get $7 + i64.const 63 i64.shl - local.set $2 - local.get $4 + local.get $2 local.get $3 + i64.shl + local.tee $2 + i64.const 4503599627370496 i64.sub - local.tee $4 + local.get $4 + i64.const 52 + i64.shl + i64.or + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + local.get $4 i64.const 0 i64.gt_s - if (result i64) - local.get $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - else - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shr_u - end - local.get $7 - i64.const 63 - i64.shl + select i64.or f64.reinterpret_i64 return @@ -7018,6 +7023,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i32.ge_u @@ -7032,34 +7038,31 @@ local.set $2 end local.get $2 - local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 + i32.sub + local.set $4 + local.get $2 + local.get $3 i32.shl - local.set $2 + local.tee $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + local.get $2 + i32.const 1 local.get $4 - local.get $3 i32.sub - local.tee $4 + i32.shr_u + local.get $4 i32.const 0 i32.gt_s - if (result i32) - local.get $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 - i32.shl - i32.or - else - local.get $2 - i32.const 1 - local.get $4 - i32.sub - i32.shr_u - end + select local.get $7 i32.or f32.reinterpret_i32 @@ -7079,23 +7082,22 @@ ) (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64) (local $2 f64) - (local $3 f64) + (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 f64) + (local $6 f64) + (local $7 i32) (local $8 i32) (local $9 i32) (local $10 f64) - (local $11 i32) + (local $11 f64) (local $12 i32) (local $13 f64) - (local $14 i64) - (local $15 f64) + (local $14 f64) + (local $15 i64) (local $16 i32) (local $17 f64) (local $18 i32) - (local $19 f64) local.get $1 f64.abs f64.const 2 @@ -7150,30 +7152,31 @@ end local.get $0 i64.reinterpret_f64 - local.tee $14 - i32.wrap_i64 - local.set $18 - local.get $14 + local.tee $15 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $16 + local.set $16 + local.get $15 + i32.wrap_i64 + local.set $5 + local.get $16 i32.const 2147483647 i32.and local.set $4 local.get $1 i64.reinterpret_f64 - local.tee $14 + local.tee $15 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $8 + local.tee $7 i32.const 2147483647 i32.and - local.tee $9 - local.get $14 + local.tee $8 + local.get $15 i32.wrap_i64 - local.tee $6 + local.tee $18 i32.or i32.eqz if @@ -7181,18 +7184,18 @@ return end i32.const 1 - local.get $6 + local.get $18 i32.const 0 - local.get $9 + local.get $8 i32.const 2146435072 i32.eq select i32.const 1 - local.get $9 + local.get $8 i32.const 2146435072 i32.gt_s i32.const 1 - local.get $18 + local.get $5 i32.const 0 local.get $4 i32.const 2146435072 @@ -7214,47 +7217,47 @@ i32.const 0 i32.lt_s if (result i32) - local.get $9 + local.get $8 i32.const 1128267776 i32.ge_s if (result i32) i32.const 2 else - local.get $9 + local.get $8 i32.const 1072693248 i32.ge_s if (result i32) i32.const 52 i32.const 20 - local.get $9 + local.get $8 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $11 + local.tee $12 i32.const 20 i32.gt_s - local.tee $5 + local.tee $3 select - local.get $11 + local.get $12 i32.sub - local.set $12 + local.set $9 i32.const 2 - local.get $6 - local.get $9 - local.get $5 + local.get $18 + local.get $8 + local.get $3 select - local.tee $5 - local.get $12 + local.tee $12 + local.get $9 i32.shr_u - local.tee $11 + local.tee $3 i32.const 1 i32.and i32.sub i32.const 0 - local.get $5 - local.get $11 local.get $12 + local.get $3 + local.get $9 i32.shl i32.eq select @@ -7265,15 +7268,15 @@ else i32.const 0 end - local.set $5 - local.get $6 + local.set $3 + local.get $18 i32.eqz if - local.get $9 + local.get $8 i32.const 2146435072 i32.eq if - local.get $18 + local.get $5 local.get $4 i32.const 1072693248 i32.sub @@ -7285,7 +7288,7 @@ if f64.const 0 local.get $1 - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7294,7 +7297,7 @@ f64.const 0 local.get $1 f64.neg - local.get $8 + local.get $7 i32.const 0 i32.ge_s select @@ -7307,11 +7310,11 @@ end unreachable end - local.get $9 + local.get $8 i32.const 1072693248 i32.eq if - local.get $8 + local.get $7 i32.const 0 i32.ge_s if @@ -7323,7 +7326,7 @@ f64.div return end - local.get $8 + local.get $7 i32.const 1073741824 i32.eq if @@ -7332,7 +7335,7 @@ f64.mul return end - local.get $8 + local.get $7 i32.const 1071644672 i32.eq if @@ -7348,8 +7351,8 @@ end local.get $0 f64.abs - local.set $3 - local.get $18 + local.set $2 + local.get $5 i32.eqz if i32.const 1 @@ -7365,41 +7368,41 @@ select if f64.const 1 - local.get $3 + local.get $2 f64.div - local.get $3 - local.get $8 + local.get $2 + local.get $7 i32.const 0 i32.lt_s select - local.set $3 + local.set $2 local.get $16 i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $3 local.get $4 i32.const 1072693248 i32.sub i32.or if (result f64) - local.get $3 + local.get $2 f64.neg + local.get $2 local.get $3 - local.get $5 i32.const 1 i32.eq select else - local.get $3 - local.get $3 + local.get $2 + local.get $2 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $3 + local.get $2 end return end @@ -7408,7 +7411,7 @@ i32.const 0 i32.lt_s if (result f64) - local.get $5 + local.get $3 i32.eqz if local.get $0 @@ -7421,7 +7424,7 @@ end f64.const -1 f64.const 1 - local.get $5 + local.get $3 i32.const 1 i32.eq select @@ -7429,11 +7432,11 @@ f64.const 1 end local.set $10 - local.get $9 + local.get $8 i32.const 1105199104 i32.gt_s if (result f64) - local.get $9 + local.get $8 i32.const 1139802112 i32.gt_s if @@ -7443,7 +7446,7 @@ if f64.const inf f64.const 0 - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7455,7 +7458,7 @@ if f64.const inf f64.const 0 - local.get $8 + local.get $7 i32.const 0 i32.gt_s select @@ -7476,7 +7479,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $8 + local.get $7 i32.const 0 i32.lt_s select @@ -7496,19 +7499,19 @@ f64.mul f64.const 1e-300 f64.mul - local.get $8 + local.get $7 i32.const 0 i32.gt_s select return end f64.const 1.4426950216293335 - local.get $3 + local.get $2 f64.const 1 f64.sub local.tee $0 f64.mul - local.tee $3 + local.tee $2 local.get $0 f64.const 1.9259629911266175e-08 f64.mul @@ -7534,10 +7537,10 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $7 + local.set $11 local.get $0 - local.get $7 - local.get $3 + local.get $11 + local.get $2 f64.sub f64.sub else @@ -7545,10 +7548,10 @@ i32.const 1048576 i32.lt_s if (result i32) - local.get $3 + local.get $2 f64.const 9007199254740992 f64.mul - local.tee $3 + local.tee $2 i64.reinterpret_f64 i64.const 32 i64.shr_u @@ -7564,30 +7567,30 @@ i32.const 1023 i32.sub i32.add - local.set $6 + local.set $5 local.get $4 i32.const 1048575 i32.and - local.tee $5 + local.tee $3 i32.const 1072693248 i32.or local.set $4 - local.get $5 + local.get $3 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $5 + local.get $3 i32.const 767610 i32.lt_s if (result i32) i32.const 1 else - local.get $6 + local.get $5 i32.const 1 i32.add - local.set $6 + local.set $5 local.get $4 i32.const -1048576 i32.add @@ -7595,9 +7598,8 @@ i32.const 0 end end - local.set $5 - f64.const 0.9617967009544373 - local.get $3 + local.set $3 + local.get $2 i64.reinterpret_f64 i64.const 4294967295 i64.and @@ -7607,64 +7609,30 @@ i64.shl i64.or f64.reinterpret_i64 - local.tee $7 + local.tee $11 f64.const 1.5 f64.const 1 - local.get $5 + local.get $3 select - local.tee $2 + local.tee $13 f64.sub - local.tee $3 + local.tee $6 f64.const 1 - local.get $7 - local.get $2 + local.get $11 + local.get $13 f64.add f64.div - local.tee $0 + local.tee $2 f64.mul local.tee $17 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $15 - f64.const 3 - local.get $15 - local.get $15 - f64.mul - local.tee $19 - f64.add - local.get $17 - local.get $17 - f64.mul - local.tee $13 - local.get $13 - f64.mul - f64.const 0.5999999999999946 - local.get $13 - f64.const 0.4285714285785502 - local.get $13 - f64.const 0.33333332981837743 - local.get $13 - f64.const 0.272728123808534 - local.get $13 - f64.const 0.23066074577556175 - local.get $13 - f64.const 0.20697501780033842 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $0 - local.get $3 - local.get $15 + local.set $14 + local.get $2 + local.get $6 + local.get $14 local.get $4 i32.const 1 i32.shr_s @@ -7672,7 +7640,7 @@ i32.or i32.const 524288 i32.add - local.get $5 + local.get $3 i32.const 18 i32.shl i32.add @@ -7683,38 +7651,76 @@ local.tee $0 f64.mul f64.sub - local.get $15 - local.get $7 + local.get $14 + local.get $11 local.get $0 - local.get $2 + local.get $13 f64.sub f64.sub f64.mul f64.sub f64.mul - local.tee $2 - local.get $15 + local.set $13 local.get $17 + local.get $17 + f64.mul + local.tee $0 + local.get $0 + f64.mul + f64.const 0.5999999999999946 + local.get $0 + f64.const 0.4285714285785502 + local.get $0 + f64.const 0.33333332981837743 + local.get $0 + f64.const 0.272728123808534 + local.get $0 + f64.const 0.23066074577556175 + local.get $0 + f64.const 0.20697501780033842 + f64.mul f64.add f64.mul f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $13 + local.get $14 + local.get $17 + f64.add + f64.mul + f64.add + local.set $6 + f64.const 0.9617967009544373 + local.get $14 + f64.const 3 + local.get $14 + local.get $14 + f64.mul local.tee $0 f64.add + local.get $6 + f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $11 f64.mul - local.tee $3 - local.get $2 - local.get $7 + local.tee $2 + local.get $13 + local.get $11 f64.mul - local.get $0 - local.get $7 + local.get $6 + local.get $11 f64.const 3 f64.sub - local.get $19 + local.get $0 f64.sub f64.sub local.get $17 @@ -7726,15 +7732,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $2 + local.tee $6 f64.mul - local.tee $19 + local.set $13 f64.const -7.028461650952758e-09 - local.get $2 + local.get $6 f64.mul local.get $0 + local.get $6 local.get $2 - local.get $3 f64.sub f64.sub f64.const 0.9617966939259756 @@ -7742,37 +7748,37 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $5 + local.get $3 select f64.add - local.tee $2 + local.tee $6 + local.get $13 + local.get $6 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $5 + local.get $3 select - local.tee $3 + local.tee $0 f64.add - local.get $6 + local.get $5 f64.convert_i32_s - local.tee $0 + local.tee $2 f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $7 + local.tee $11 local.get $2 - local.get $7 - local.get $0 f64.sub - local.get $3 + local.get $0 f64.sub - local.get $19 + local.get $13 f64.sub f64.sub end - local.set $3 + local.set $2 local.get $1 local.get $1 i64.reinterpret_f64 @@ -7781,134 +7787,133 @@ f64.reinterpret_i64 local.tee $0 f64.sub - local.get $7 + local.get $11 f64.mul local.get $1 - local.get $3 + local.get $2 f64.mul f64.add - local.tee $1 + local.tee $2 local.get $0 - local.get $7 + local.get $11 f64.mul - local.tee $2 + local.tee $6 f64.add local.tee $0 i64.reinterpret_f64 - local.tee $14 + local.tee $15 + i64.const 32 + i64.shr_u i32.wrap_i64 - local.set $5 + local.set $9 + local.get $15 + i32.wrap_i64 + local.set $3 block $folding-inner1 block $folding-inner0 - local.get $14 - i64.const 32 - i64.shr_u - i32.wrap_i64 - local.tee $12 + local.get $9 i32.const 1083179008 i32.ge_s if - local.get $5 - local.get $12 + local.get $3 + local.get $9 i32.const 1083179008 i32.sub i32.or - local.get $1 + local.get $2 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $2 + local.get $6 f64.sub f64.gt i32.or br_if $folding-inner0 else - local.get $12 + local.get $9 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $5 - local.get $12 + local.get $3 + local.get $9 i32.const -1064252416 i32.sub i32.or - local.get $1 - local.get $0 local.get $2 + local.get $0 + local.get $6 f64.sub f64.le i32.or select br_if $folding-inner1 end - local.get $12 + local.get $9 i32.const 2147483647 i32.and - local.tee $11 + local.tee $12 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.set $5 - i32.const 0 - local.set $6 - local.get $1 - local.get $11 + local.set $3 + local.get $12 i32.const 1071644672 i32.gt_s - if + if (result i32) + local.get $6 i32.const 1048575 - local.get $12 + local.get $9 i32.const 1048576 - local.get $5 + local.get $3 i32.const 1 i32.add i32.shr_s i32.add - local.tee $11 + local.tee $12 i32.const 2147483647 i32.and i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $5 + local.tee $3 i32.shr_s i32.const -1 i32.xor - local.get $11 + local.get $12 i32.and i64.extend_i32_s i64.const 32 i64.shl f64.reinterpret_i64 - local.set $0 + f64.sub + local.set $6 i32.const 0 - local.get $11 + local.get $12 i32.const 1048575 i32.and i32.const 1048576 i32.or i32.const 20 - local.get $5 + local.get $3 i32.sub i32.shr_s - local.tee $6 + local.tee $5 i32.sub - local.get $6 - local.get $12 + local.get $5 + local.get $9 i32.const 0 i32.lt_s select - local.set $6 - local.get $2 - local.get $0 - f64.sub - local.set $2 + else + i32.const 0 end + local.set $5 local.get $2 + local.get $6 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -7917,10 +7922,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $3 - local.get $1 - local.get $0 + local.tee $1 local.get $2 + local.get $0 + local.get $6 f64.sub f64.sub f64.const 0.6931471805599453 @@ -7929,17 +7934,23 @@ f64.const -1.904654299957768e-09 f64.mul f64.add - local.tee $1 + local.tee $0 f64.add - local.tee $2 + local.set $2 + local.get $0 local.get $2 - f64.mul - local.set $0 + local.get $1 + f64.sub + f64.sub + local.set $1 local.get $10 f64.const 1 local.get $2 local.get $2 - local.get $0 + local.get $2 + local.get $2 + f64.mul + local.tee $0 f64.const 0.16666666666666602 local.get $0 f64.const -2.7777777777015593e-03 @@ -7967,12 +7978,7 @@ f64.div local.get $1 local.get $2 - local.get $3 - f64.sub - f64.sub - local.tee $0 - local.get $2 - local.get $0 + local.get $1 f64.mul f64.add f64.sub @@ -7984,25 +7990,25 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.get $6 + local.get $5 i32.const 20 i32.shl i32.add - local.tee $5 + local.tee $3 i32.const 20 i32.shr_s i32.const 0 i32.le_s if (result f64) local.get $0 - local.get $6 + local.get $5 call $~lib/math/NativeMath.scalbn else local.get $0 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $5 + local.get $3 i64.extend_i32_s i64.const 32 i64.shl @@ -8122,29 +8128,28 @@ i32.or if f32.const nan:0x400000 - return - end - local.get $0 - i32.reinterpret_f32 - local.tee $4 - i32.const 2147483647 - i32.and - local.set $6 - local.get $4 - i32.const 31 - i32.shr_u - local.tee $4 - if (result i32) - local.get $1 - f32.nearest - local.get $1 - f32.eq - else - i32.const 0 + return end + local.get $0 + i32.reinterpret_f32 + local.tee $4 + i32.const 31 + i32.shr_u + local.set $5 + local.get $4 + i32.const 2147483647 + i32.and + local.set $4 + local.get $1 + f32.nearest + local.get $1 + f32.eq + i32.const 0 + local.get $5 + select if i32.const 0 - local.set $4 + local.set $5 local.get $1 f32.const 0.5 f32.mul @@ -8161,15 +8166,15 @@ end local.get $1 i32.reinterpret_f32 - local.set $5 - local.get $6 + local.set $6 + local.get $4 i32.const 1065353216 i32.eq if (result i32) i32.const 2143289344 i32.const 1065353216 - local.get $4 local.get $5 + local.get $6 i32.const 2147483647 i32.and i32.const 2139095040 @@ -8177,20 +8182,20 @@ i32.or select else - local.get $6 + local.get $4 if (result i32) - local.get $6 + local.get $4 i32.const 2139095040 i32.eq if (result i32) i32.const 0 i32.const 2139095040 - local.get $5 + local.get $6 i32.const 31 i32.shr_u select else - local.get $4 + local.get $5 if (result i32) i32.const 2143289344 else @@ -8313,7 +8318,7 @@ else i32.const 2139095040 i32.const 0 - local.get $5 + local.get $6 i32.const 31 i32.shr_u select @@ -8996,73 +9001,76 @@ ) (func $~lib/math/NativeMath.sin (param $0 f64) (result f64) (local $1 f64) - (local $2 i64) - (local $3 f64) + (local $2 f64) + (local $3 i64) (local $4 f64) - (local $5 i32) + (local $5 f64) (local $6 i32) (local $7 f64) + (local $8 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 $6 i32.const 31 i32.shr_u - local.set $6 - local.get $5 + local.set $8 + local.get $6 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1072243195 i32.le_u if - local.get $5 + local.get $6 i32.const 1045430272 i32.lt_u if local.get $0 return end + f64.const 0.00833333333332249 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 + local.tee $4 f64.const -1.984126982985795e-04 - local.get $3 + local.get $4 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $3 - local.get $3 + local.get $4 + local.get $4 + local.get $4 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $4 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $2 + local.get $0 + local.get $4 + local.get $0 + f64.mul + f64.const -0.16666666666666632 + local.get $4 + local.get $2 f64.mul f64.add f64.mul f64.add return end - local.get $5 + local.get $6 i32.const 2146435072 i32.ge_u if @@ -9072,34 +9080,34 @@ return end block $~lib/math/rempio2|inlined.1 (result i32) - local.get $2 + local.get $3 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1094263291 i32.lt_u if - local.get $5 + local.get $6 i32.const 20 i32.shr_u - local.tee $6 + local.tee $8 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $3 + local.tee $4 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $3 + local.get $4 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9114,25 +9122,25 @@ i32.const 16 i32.gt_u if - local.get $3 + local.get $4 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $4 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $2 f64.sub f64.sub - local.set $4 - local.get $6 + local.set $2 + local.get $8 local.get $0 - local.get $4 + local.get $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9147,24 +9155,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $3 + local.get $4 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $4 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $2 f64.sub f64.sub - local.set $4 + local.set $2 local.get $0 - local.get $4 + local.get $2 f64.sub else local.get $1 @@ -9176,68 +9184,69 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $2 f64.sub global.set $~lib/math/rempio2_y1 - local.get $3 + local.get $4 i32.trunc_f64_s br $~lib/math/rempio2|inlined.1 end i32.const 0 - local.get $2 + local.get $3 call $~lib/math/pio2_large_quot - local.tee $5 + local.tee $6 i32.sub - local.get $5 local.get $6 + local.get $8 select end - local.set $6 + local.set $8 global.get $~lib/math/rempio2_y0 - local.set $3 + local.set $2 global.get $~lib/math/rempio2_y1 - local.set $4 - local.get $6 + local.set $1 + local.get $8 i32.const 1 i32.and if (result f64) + local.get $2 + local.get $2 + f64.mul + local.tee $7 + local.get $7 + f64.mul + local.set $5 f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 - f64.mul - local.tee $0 + local.get $7 f64.mul - local.tee $1 + local.tee $4 f64.sub - local.tee $7 + local.tee $0 f64.const 1 - local.get $7 + local.get $0 f64.sub - local.get $1 + local.get $4 f64.sub - local.get $0 - local.get $0 + local.get $7 + local.get $7 f64.const 0.0416666666666666 - local.get $0 + local.get $7 f64.const -0.001388888888887411 - local.get $0 + local.get $7 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 + local.get $5 + local.get $5 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $7 f64.const 2.087572321298175e-09 - local.get $0 + local.get $7 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -9246,53 +9255,55 @@ f64.mul f64.add f64.mul - local.get $3 - local.get $4 + local.get $2 + local.get $1 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 + local.get $2 + local.get $2 + f64.mul + local.tee $5 f64.const -1.984126982985795e-04 - local.get $0 + local.get $5 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $5 + local.get $5 + local.get $5 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $5 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $4 + local.get $2 + local.tee $0 + local.get $5 + f64.const 0.5 + local.get $1 f64.mul - f64.sub + local.get $5 + local.get $0 f64.mul + local.tee $2 local.get $4 + f64.mul f64.sub + f64.mul local.get $1 + f64.sub + local.get $2 f64.const -0.16666666666666632 f64.mul f64.sub @@ -9302,7 +9313,7 @@ local.get $0 f64.neg local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.and select @@ -9331,17 +9342,14 @@ (local $5 i64) (local $6 f64) (local $7 i64) - (local $8 i64) + (local $8 i32) (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.set $8 local.get $1 i32.const 2147483647 i32.and @@ -9361,26 +9369,26 @@ local.tee $4 local.get $4 f64.mul - local.tee $6 + local.tee $3 local.get $4 f64.mul - local.set $3 + local.set $6 local.get $4 - local.get $3 - f64.const -0.16666666641626524 local.get $6 + f64.const -0.16666666641626524 + local.get $3 f64.const 0.008333329385889463 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $6 local.get $6 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -1.9839334836096632e-04 - local.get $6 + local.get $3 f64.const 2.718311493989822e-06 f64.mul f64.add @@ -9424,37 +9432,56 @@ 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 23 + i32.shr_s + i32.const 152 + i32.sub + local.tee $1 + i32.const 63 + i32.and + i64.extend_i32_s + local.set $5 + 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $10 + local.tee $1 i64.load - local.set $7 - local.get $10 - i64.load offset=8 - local.set $8 + local.get $5 + i64.shl local.get $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.tee $5 + i64.load offset=8 + local.tee $7 + i64.const 64 + local.get $5 + i64.sub + i64.shr_u + i64.or + i64.mul + local.get $5 i64.const 32 i64.gt_u if (result i64) - local.get $8 + local.get $7 local.get $5 i64.const 32 i64.sub i64.shl - local.get $10 + local.get $1 i64.load offset=16 i64.const 96 local.get $5 @@ -9462,52 +9489,29 @@ i64.shr_u i64.or else - local.get $8 + local.get $7 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 + local.tee $5 i64.const 2 i64.shl - local.tee $9 + local.tee $7 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $7 + local.get $5 i64.const 62 i64.shr_u - local.get $9 + local.get $7 i64.const 63 i64.shr_u i64.add @@ -9515,7 +9519,7 @@ local.tee $1 i32.sub local.get $1 - local.get $11 + local.get $8 select end local.set $1 @@ -9528,24 +9532,24 @@ local.get $3 local.get $3 f64.mul - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.mul - local.set $3 + local.set $4 f64.const 1 - local.get $4 + local.get $3 f64.const -0.499999997251031 f64.mul f64.add - local.get $3 + local.get $4 f64.const 0.04166662332373906 f64.mul f64.add - local.get $3 local.get $4 + local.get $3 f64.mul f64.const -0.001388676377460993 - local.get $4 + local.get $3 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -9560,7 +9564,7 @@ local.tee $4 local.get $3 f64.mul - local.tee $3 + local.tee $6 f64.const -0.16666666641626524 local.get $4 f64.const 0.008333329385889463 @@ -9568,7 +9572,7 @@ f64.add f64.mul f64.add - local.get $3 + local.get $6 local.get $4 local.get $4 f64.mul @@ -9837,18 +9841,18 @@ local.get $0 f64.mul local.tee $4 - local.get $0 + local.get $4 f64.mul - local.set $5 + local.set $3 local.get $0 local.get $1 local.get $4 - local.get $5 - f64.const 0.13333333333320124 - local.get $4 local.get $4 + local.get $0 f64.mul - local.tee $3 + local.tee $5 + f64.const 0.13333333333320124 + local.get $3 f64.const 0.021869488294859542 local.get $3 f64.const 3.5920791075913124e-03 @@ -9941,29 +9945,30 @@ local.get $1 return end - f64.const -1 local.get $1 - f64.div - local.tee $5 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $4 - local.get $5 - f64.const 1 - local.get $4 + local.set $4 + f64.const -1 local.get $1 + f64.div + local.tee $5 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 local.tee $1 + local.get $5 + f64.const 1 + local.get $1 + local.get $4 f64.mul f64.add - local.get $4 - local.get $3 local.get $1 + local.get $3 + local.get $4 local.get $0 f64.sub f64.sub @@ -10172,20 +10177,17 @@ (local $2 i32) (local $3 i32) (local $4 f64) - (local $5 f64) - (local $6 i64) + (local $5 i64) + (local $6 f64) (local $7 i64) - (local $8 i64) + (local $8 i32) (local $9 i64) - (local $10 i32) - (local $11 i32) - (local $12 i64) local.get $0 i32.reinterpret_f32 local.tee $2 i32.const 31 i32.shr_u - local.set $11 + local.set $8 local.get $2 i32.const 2147483647 i32.and @@ -10202,36 +10204,36 @@ end local.get $0 f64.promote_f32 - local.tee $5 - local.get $5 - f64.mul local.tee $4 - local.get $5 + local.get $4 f64.mul - local.set $1 - local.get $5 + local.tee $1 + local.get $1 + f64.mul + local.set $6 + local.get $4 local.get $1 - f64.const 0.3333313950307914 local.get $4 + f64.mul + local.tee $4 + f64.const 0.3333313950307914 + local.get $1 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add - local.get $1 - local.get $4 local.get $4 - f64.mul - local.tee $1 + local.get $6 f64.mul f64.const 0.05338123784456704 - local.get $4 + local.get $1 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $6 f64.const 0.002974357433599673 - local.get $4 + local.get $1 f64.const 0.009465647849436732 f64.mul f64.add @@ -10282,85 +10284,81 @@ i32.const 152 i32.sub local.tee $2 + i32.const 63 + i32.and + i64.extend_i32_s + local.set $5 + f64.const 8.515303950216386e-20 + local.get $0 + f64.promote_f32 + f64.copysign + local.get $3 + i32.const 8388607 + i32.and + i32.const 8388608 + i32.or + i64.extend_i32_s + local.tee $9 + local.get $2 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $10 + local.tee $2 i64.load - local.set $7 - local.get $10 - i64.load offset=8 - local.set $8 + local.get $5 + i64.shl local.get $2 - i32.const 63 - i32.and - i64.extend_i32_s - local.tee $6 + i64.load offset=8 + local.tee $7 + i64.const 64 + local.get $5 + i64.sub + i64.shr_u + i64.or + i64.mul + local.get $5 i64.const 32 i64.gt_u if (result i64) - local.get $8 - local.get $6 + local.get $7 + local.get $5 i64.const 32 i64.sub i64.shl - local.get $10 + local.get $2 i64.load offset=16 i64.const 96 - local.get $6 + local.get $5 i64.sub i64.shr_u i64.or else - local.get $8 + local.get $7 i64.const 32 - local.get $6 + 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 $3 - 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 + local.tee $5 i64.const 2 i64.shl - local.tee $9 + local.tee $7 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $7 + local.get $5 i64.const 62 i64.shr_u - local.get $9 + local.get $7 i64.const 63 i64.shr_u i64.add @@ -10368,41 +10366,41 @@ local.tee $2 i32.sub local.get $2 - local.get $11 + local.get $8 select end local.set $2 global.get $~lib/math/rempio2f_y - local.tee $5 - local.get $5 - f64.mul local.tee $4 - local.get $5 + local.get $4 f64.mul - local.set $1 - local.get $5 + local.tee $1 + local.get $1 + f64.mul + local.set $6 + local.get $4 local.get $1 - f64.const 0.3333313950307914 local.get $4 - f64.const 0.13339200271297674 f64.mul - f64.add + local.tee $4 + f64.const 0.3333313950307914 + local.get $1 + f64.const 0.13339200271297674 f64.mul f64.add - local.get $1 - local.get $4 - local.get $4 f64.mul - local.tee $1 + f64.add + local.get $4 + local.get $6 f64.mul f64.const 0.05338123784456704 - local.get $4 + local.get $1 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $6 f64.const 0.002974357433599673 - local.get $4 + local.get $1 f64.const 0.009465647849436732 f64.mul f64.add @@ -10622,31 +10620,31 @@ (func $~lib/math/NativeMath.sincos (param $0 f64) (local $1 f64) (local $2 f64) - (local $3 i64) - (local $4 f64) - (local $5 i32) + (local $3 f64) + (local $4 i64) + (local $5 f64) (local $6 i32) - (local $7 f64) + (local $7 i32) (local $8 f64) (local $9 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 $6 i32.const 31 i32.shr_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1072243195 i32.le_u if - local.get $5 + local.get $6 i32.const 1044816030 i32.lt_u if @@ -10656,78 +10654,82 @@ global.set $~lib/math/NativeMath.sincos_cos return end + f64.const 0.00833333333332249 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 + local.tee $3 f64.const -1.984126982985795e-04 - local.get $2 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $2 - local.get $2 - local.get $2 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $2 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $1 + local.get $0 + local.tee $2 + local.get $3 + local.get $0 + f64.mul + f64.const -0.16666666666666632 + local.get $3 + local.get $1 f64.mul f64.add f64.mul f64.add 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 + local.tee $0 + local.get $0 + f64.mul + local.set $3 + f64.const 1 + f64.const 0.5 + local.get $0 f64.mul - local.tee $4 - f64.sub local.tee $1 + f64.sub + local.tee $5 f64.const 1 - local.get $1 + local.get $5 f64.sub - local.get $4 + local.get $1 f64.sub - local.get $2 - local.get $2 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $2 + local.get $0 f64.const -0.001388888888887411 - local.get $2 + local.get $0 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 + local.get $3 + local.get $3 f64.mul f64.const -2.7557314351390663e-07 - local.get $2 + local.get $0 f64.const 2.087572321298175e-09 - local.get $2 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10736,7 +10738,7 @@ f64.mul f64.add f64.mul - local.get $0 + local.get $2 f64.const 0 f64.mul f64.sub @@ -10745,7 +10747,7 @@ global.set $~lib/math/NativeMath.sincos_cos return end - local.get $5 + local.get $6 i32.const 2139095040 i32.ge_u if @@ -10759,34 +10761,34 @@ return end block $~lib/math/rempio2|inlined.3 (result i32) - local.get $3 + local.get $4 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $5 + local.tee $6 i32.const 1094263291 i32.lt_u if - local.get $5 + local.get $6 i32.const 20 i32.shr_u - local.tee $6 + local.tee $7 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $2 + local.tee $3 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $2 + local.get $3 f64.const 6.077100506506192e-11 f64.mul - local.tee $4 + local.tee $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10801,25 +10803,25 @@ i32.const 16 i32.gt_u if - local.get $2 + local.get $3 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $2 + local.get $3 f64.const 6.077100506303966e-11 f64.mul - local.tee $4 + local.tee $1 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $1 f64.sub f64.sub - local.set $4 - local.get $6 + local.set $2 + local.get $7 local.get $0 - local.get $4 + local.get $2 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10834,24 +10836,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $2 + local.get $3 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $2 + local.get $3 f64.const 2.0222662487111665e-21 f64.mul - local.tee $4 + local.tee $1 f64.sub local.tee $0 f64.sub - local.get $4 + local.get $1 f64.sub f64.sub - local.set $4 + local.set $2 local.get $0 - local.get $4 + local.get $2 f64.sub else local.get $1 @@ -10863,108 +10865,109 @@ local.get $0 local.get $1 f64.sub - local.get $4 + local.get $2 f64.sub global.set $~lib/math/rempio2_y1 - local.get $2 + local.get $3 i32.trunc_f64_s br $~lib/math/rempio2|inlined.3 end i32.const 0 - local.get $3 + local.get $4 call $~lib/math/pio2_large_quot - local.tee $5 + local.tee $6 i32.sub - local.get $5 local.get $6 + local.get $7 select end - local.set $6 + local.set $7 global.get $~lib/math/rempio2_y0 - local.tee $4 - local.get $4 - f64.mul local.tee $0 - local.get $4 - f64.mul - local.set $2 - local.get $4 - local.get $0 - f64.const 0.5 - global.get $~lib/math/rempio2_y1 - local.tee $1 - f64.mul - local.get $2 f64.const 0.00833333333332249 local.get $0 - f64.const -1.984126982985795e-04 local.get $0 + f64.mul + local.tee $5 + f64.const -1.984126982985795e-04 + local.get $5 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $5 + local.get $5 + local.get $5 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $5 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.set $8 + local.get $5 + f64.const 0.5 + global.get $~lib/math/rempio2_y1 + local.tee $3 + local.tee $2 f64.mul - f64.sub + local.get $5 + local.get $0 + f64.mul + local.tee $9 + local.get $8 f64.mul - local.get $1 f64.sub + f64.mul local.get $2 + f64.sub + local.get $9 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub - local.tee $8 - local.set $0 + local.get $0 + local.get $0 + f64.mul + local.tee $1 + local.get $1 + f64.mul + local.set $5 f64.const 1 f64.const 0.5 - local.get $4 - local.get $4 - f64.mul - local.tee $2 + local.get $1 f64.mul - local.tee $7 - f64.sub local.tee $9 + f64.sub + local.tee $8 f64.const 1 - local.get $9 + local.get $8 f64.sub - local.get $7 + local.get $9 f64.sub - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.const 0.0416666666666666 - local.get $2 + local.get $1 f64.const -0.001388888888887411 - local.get $2 + local.get $1 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 + local.get $5 + local.get $5 f64.mul f64.const -2.7557314351390663e-07 - local.get $2 + local.get $1 f64.const 2.087572321298175e-09 - local.get $2 + local.get $1 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10973,38 +10976,40 @@ f64.mul f64.add f64.mul - local.get $4 - local.get $1 + local.get $0 + local.get $3 f64.mul f64.sub f64.add f64.add - local.tee $2 - local.set $4 - local.get $6 + local.set $3 + local.set $0 + local.get $3 + local.set $1 + local.get $7 i32.const 1 i32.and if - local.get $8 + local.get $0 f64.neg - local.set $4 - local.get $2 + local.set $1 + local.get $3 local.set $0 end - local.get $6 + local.get $7 i32.const 2 i32.and if (result f64) - local.get $4 + local.get $1 f64.neg - local.set $4 + local.set $1 local.get $0 f64.neg else local.get $0 end global.set $~lib/math/NativeMath.sincos_sin - local.get $4 + local.get $1 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) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 1ab531e51f..a6227fce6e 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -161,6 +161,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i64.ge_u @@ -175,39 +176,36 @@ local.set $2 end local.get $2 - local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 + i64.sub + local.set $4 + local.get $7 + i64.const 63 i64.shl - local.set $2 - local.get $4 + local.get $2 local.get $3 + i64.shl + local.tee $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + local.get $2 + i64.const 0 + local.get $4 i64.sub - local.tee $4 + i64.const 1 + i64.add + i64.shr_u + local.get $4 i64.const 0 i64.gt_s - if (result i64) - local.get $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - else - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shr_u - end - local.get $7 - i64.const 63 - i64.shl + select i64.or f64.reinterpret_i64 return @@ -400,6 +398,7 @@ br $while-continue|0 end end + local.get $4 local.get $2 local.get $3 i32.ge_u @@ -414,34 +413,31 @@ local.set $2 end local.get $2 - local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 + i32.sub + local.set $4 + local.get $2 + local.get $3 i32.shl - local.set $2 + local.tee $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + local.get $2 + i32.const 1 local.get $4 - local.get $3 i32.sub - local.tee $4 + i32.shr_u + local.get $4 i32.const 0 i32.gt_s - if (result i32) - local.get $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 - i32.shl - i32.or - else - local.get $2 - i32.const 1 - local.get $4 - i32.sub - i32.shr_u - end + select local.get $7 i32.or f32.reinterpret_i32 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 27157c4e65..910f11b7fd 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -174,7 +174,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -182,11 +182,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -649,10 +649,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1574,11 +1574,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -1853,10 +1853,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 @@ -2810,11 +2810,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -3629,11 +3629,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -4452,11 +4452,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -5283,11 +5283,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $4 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $4 + local.get $2 i32.const 3 i32.shl i32.add @@ -6597,7 +6597,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 @@ -6635,11 +6635,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 4 i32.shl i32.add @@ -6655,7 +6655,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and @@ -7922,7 +7922,7 @@ local.get $1 i32.reinterpret_f32 call $~lib/util/hash/hash32 - local.tee $4 + local.tee $3 call $~lib/set/Set#find i32.eqz if @@ -7960,11 +7960,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 3 i32.shl i32.add @@ -7980,7 +7980,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and @@ -8752,7 +8752,7 @@ local.get $1 i64.reinterpret_f64 call $~lib/util/hash/hash64 - local.tee $4 + local.tee $3 call $~lib/set/Set#find i32.eqz if @@ -8790,11 +8790,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $3 + local.tee $2 i32.const 1 i32.add i32.store offset=16 - local.get $3 + local.get $2 i32.const 4 i32.shl i32.add @@ -8810,7 +8810,7 @@ local.get $2 local.get $0 i32.load - local.get $4 + local.get $3 local.get $0 i32.load offset=4 i32.and diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 1566c00a87..6e09d8c8f9 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -683,10 +683,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 84d97b0c7c..573bf8ac4b 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -500,7 +500,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -508,11 +508,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -975,10 +975,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1435,107 +1435,119 @@ i32.add i32.load local.tee $2 + i32.const 255 + i32.and + local.set $4 + local.get $2 i32.const 8 i32.shr_s local.set $3 - block $folding-inner0 - local.get $2 - i32.const 255 - i32.and - local.tee $2 - i32.const 2 - i32.lt_u - br_if $folding-inner0 + local.get $4 + i32.const 2 + i32.lt_u + if + local.get $0 local.get $3 - i32.const 255 + i32.const 0 + local.get $1 + local.get $4 + i32.xor + i32.sub i32.and - local.set $2 - local.get $3 - i32.const 8 - i32.shr_u - local.set $4 - loop $while-continue|0 + i32.add + return + end + local.get $3 + i32.const 255 + i32.and + local.set $2 + local.get $3 + i32.const 8 + i32.shr_u + local.set $4 + loop $while-continue|0 + local.get $2 + if + local.get $5 local.get $2 - if - local.get $5 - local.get $2 - i32.const 1 - i32.shr_u - local.tee $3 + i32.const 1 + i32.shr_u + local.tee $3 + local.get $4 + i32.add + i32.const 1 + i32.shl + i32.const 6184 + i32.add + i32.load8_u + local.tee $6 + i32.eq + if (result i32) + local.get $3 local.get $4 i32.add i32.const 1 i32.shl i32.const 6184 i32.add - i32.load8_u - local.tee $6 - i32.eq + i32.load8_u offset=1 + i32.const 2 + i32.shl + i32.const 4712 + i32.add + i32.load + local.tee $2 + i32.const 255 + i32.and + local.set $3 + local.get $2 + i32.const 8 + i32.shr_s + local.set $2 + local.get $3 + i32.const 2 + i32.lt_u + if + local.get $0 + local.get $2 + i32.const 0 + local.get $1 + local.get $3 + i32.xor + i32.sub + i32.and + i32.add + return + end + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.const 1 + i32.shl + i32.sub + return + else + local.get $6 + local.get $5 + i32.gt_u if (result i32) local.get $3 + else + local.get $3 local.get $4 i32.add - i32.const 1 - i32.shl - i32.const 6184 - i32.add - i32.load8_u offset=1 - i32.const 2 - i32.shl - i32.const 4712 - i32.add - i32.load - local.tee $2 - i32.const 8 - i32.shr_s - local.set $3 + local.set $4 local.get $2 - i32.const 255 - i32.and - local.tee $2 - i32.const 2 - i32.lt_u - br_if $folding-inner0 - local.get $0 - i32.const 1 - i32.add - local.get $1 - i32.const 1 - i32.shl + local.get $3 i32.sub - return - else - local.get $6 - local.get $5 - i32.gt_u - if (result i32) - local.get $3 - else - local.get $3 - local.get $4 - i32.add - local.set $4 - local.get $2 - local.get $3 - i32.sub - end end - local.set $2 - br $while-continue|0 end + local.set $2 + br $while-continue|0 end - local.get $0 - return end local.get $0 - local.get $3 - i32.const 0 - local.get $1 - local.get $2 - i32.xor - i32.sub - i32.and - i32.add ) (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -1779,10 +1791,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 @@ -1909,10 +1921,10 @@ local.get $6 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 @@ -1933,10 +1945,10 @@ 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 @@ -1965,15 +1977,15 @@ i32.const 131072 i32.ge_u if + local.get $8 local.get $10 i32.const 1 i32.shl - local.get $8 i32.add + local.get $1 local.get $9 i32.const 16 i32.shl - local.get $1 i32.or i32.store local.get $10 @@ -1990,10 +2002,10 @@ i32.const 25 i32.le_u if + local.get $8 local.get $10 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.const 26 @@ -2083,12 +2095,12 @@ local.get $9 local.get $2 i32.store16 offset=4 + local.get $10 local.get $2 i32.const 0 i32.ne i32.const 1 i32.add - local.get $10 i32.add local.set $10 else @@ -2101,18 +2113,18 @@ i32.const 65536 i32.lt_s if + local.get $8 local.get $10 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.store16 else + local.get $8 local.get $10 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.const 65536 @@ -2140,12 +2152,13 @@ end end else + local.get $8 local.get $10 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 + local.get $2 i32.const 97 i32.sub i32.const 26 @@ -2156,7 +2169,6 @@ i32.shl i32.const -1 i32.xor - local.get $2 i32.and i32.store16 end @@ -2366,23 +2378,24 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/string/String#get:length - local.tee $8 + local.tee $12 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $8 + local.get $12 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc - local.set $10 + local.set $9 loop $for-loop|0 local.get $4 - local.get $8 + local.get $12 i32.lt_u if local.get $0 @@ -2391,20 +2404,20 @@ i32.shl i32.add i32.load16_u - local.tee $2 - local.set $1 - local.get $2 + local.tee $7 + local.set $5 + local.get $7 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $8 + local.get $12 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $2 + local.get $7 i32.const 55295 i32.sub i32.const 1025 @@ -2417,7 +2430,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $5 + local.tee $3 i32.const 56319 i32.sub i32.const 1025 @@ -2427,11 +2440,11 @@ i32.const 1 i32.add local.set $4 - local.get $5 + local.get $3 i32.const 1023 i32.and - local.get $2 - local.tee $1 + local.get $7 + local.tee $5 i32.const 1023 i32.and i32.const 10 @@ -2439,55 +2452,55 @@ i32.or i32.const 65536 i32.add - local.tee $2 + local.tee $7 i32.const 131072 i32.ge_u if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $1 local.get $5 + local.get $3 i32.const 16 i32.shl i32.or i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 br $for-continue|0 end end end - local.get $2 + local.get $7 i32.const 304 i32.eq if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 else - local.get $2 + local.get $7 i32.const 931 i32.eq if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.const 1 i32.gt_u if (result i32) @@ -2496,46 +2509,45 @@ local.set $5 local.get $4 i32.const 0 - local.set $3 + local.set $1 i32.const 0 local.get $4 - local.tee $2 + local.tee $3 i32.const 30 i32.sub - local.tee $1 + local.tee $7 i32.const 0 - local.get $1 + local.get $7 i32.gt_s select local.set $11 loop $while-continue|1 - local.get $2 + local.get $3 local.get $11 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 + local.get $3 + local.tee $2 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 drop local.get $5 - local.get $1 + local.get $2 i32.const 1 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $7 + local.tee $10 i32.const 64512 i32.and i32.const 56320 i32.eq - local.get $1 + local.get $2 i32.const 2 i32.sub i32.const 0 @@ -2543,23 +2555,23 @@ i32.and if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $1 + local.tee $7 i32.const 64512 i32.and i32.const 55296 i32.eq if - local.get $7 + local.get $10 i32.const 1023 i32.and - local.get $1 + local.get $7 i32.const 1023 i32.and i32.const 10 @@ -2571,22 +2583,22 @@ end end i32.const 65533 - local.get $7 - local.get $7 + local.get $10 + local.get $10 i32.const 63488 i32.and i32.const 55296 i32.eq select end - local.tee $1 - local.set $7 - local.get $1 + local.tee $7 + local.set $2 + local.get $7 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $7 + local.get $2 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2594,12 +2606,12 @@ i32.eqz if i32.const 0 - local.get $1 + local.get $7 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $1 + local.get $7 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2608,61 +2620,61 @@ br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 - local.set $3 + local.set $1 end - local.get $2 - local.get $1 + local.get $3 + local.get $7 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $2 + local.set $3 br $while-continue|1 end end i32.const 0 - local.get $3 + local.get $1 i32.eqz br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 i32.add - local.tee $2 + local.tee $3 i32.const 30 i32.add - local.tee $1 - local.get $8 - local.get $1 - local.get $8 + local.tee $7 + local.get $12 + local.get $7 + local.get $12 i32.lt_s select local.set $6 loop $while-continue|2 - local.get $2 + local.get $3 local.get $6 i32.lt_s if local.get $5 - local.get $2 + local.get $3 i32.const 1 i32.shl i32.add i32.load16_u - local.tee $1 + local.tee $2 i32.const 64512 i32.and i32.const 55296 i32.eq - local.get $8 - local.get $2 + local.get $12 + local.get $3 i32.const 1 i32.add i32.ne i32.and if (result i32) local.get $5 - local.get $2 + local.get $3 i32.const 1 i32.shl i32.add @@ -2673,7 +2685,7 @@ i32.const 56320 i32.eq if (result i32) - local.get $1 + local.get $2 i32.const 10 i32.shl local.get $7 @@ -2681,10 +2693,10 @@ i32.const -56613888 i32.add else - local.get $1 + local.get $2 end else - local.get $1 + local.get $2 end local.tee $7 i32.const 918000 @@ -2711,14 +2723,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $2 + local.get $3 local.get $7 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $2 + local.set $3 br $while-continue|2 end end @@ -2734,53 +2746,53 @@ end i32.store16 else - local.get $2 + local.get $7 i32.const 9398 i32.sub i32.const 25 i32.le_u if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 26 i32.add i32.store16 else - local.get $2 + local.get $7 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $2 + local.tee $7 i32.const 65536 i32.lt_s if - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.store16 else - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65536 i32.sub - local.tee $2 + local.tee $7 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $2 + local.get $7 i32.const 1023 i32.and i32.const 56320 @@ -2789,23 +2801,23 @@ i32.shl i32.or i32.store - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 end end end end end else - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl i32.add - local.get $1 - local.get $1 + local.get $5 + local.get $5 i32.const 65 i32.sub i32.const 26 @@ -2821,15 +2833,15 @@ i32.const 1 i32.add local.set $4 - local.get $9 + local.get $8 i32.const 1 i32.add - local.set $9 + local.set $8 br $for-loop|0 end end - local.get $10 local.get $9 + local.get $8 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index dc5826a290..2941f44258 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -241,7 +241,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -249,11 +249,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -716,10 +716,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -2466,10 +2466,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 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 35a7728eb5..8c37b4be1a 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -828,7 +828,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -836,11 +836,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -1303,10 +1303,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -2080,6 +2080,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2088,23 +2089,21 @@ i32.const 1 i32.shl local.set $5 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl local.set $3 - local.get $1 + i32.const 1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl - local.tee $4 + local.tee $1 + i32.eqz + local.get $3 local.get $5 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $3 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2112,51 +2111,53 @@ call $~lib/rt/pure/__release return end - local.get $4 - i32.const 1 - call $~lib/rt/tlsf/__alloc - local.set $1 - local.get $4 + local.get $3 local.get $5 i32.sub - local.tee $4 + local.set $4 local.get $3 + i32.const 1 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $4 + local.get $1 i32.gt_u if local.get $1 - local.get $2 - local.get $3 local.get $4 i32.const 2 i32.sub - local.get $3 + local.get $1 i32.div_u - local.tee $6 - call $~lib/memory/memory.repeat + local.tee $7 + i32.mul + local.set $6 + local.get $3 + local.get $2 local.get $1 + local.get $7 + call $~lib/memory/memory.repeat local.get $3 local.get $6 - i32.mul - local.tee $3 i32.add local.get $2 local.get $4 - local.get $3 + local.get $6 i32.sub call $~lib/memory/memory.copy else - local.get $1 + local.get $3 local.get $2 local.get $4 call $~lib/memory/memory.copy end - local.get $1 + local.get $3 local.get $4 i32.add local.get $0 local.get $5 call $~lib/memory/memory.copy - local.get $1 + local.get $3 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2165,6 +2166,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2173,23 +2175,21 @@ i32.const 1 i32.shl local.set $3 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl local.set $4 - local.get $1 + i32.const 1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl - local.tee $5 + local.tee $1 + i32.eqz + local.get $4 local.get $3 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $4 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2197,53 +2197,55 @@ call $~lib/rt/pure/__release return end - local.get $5 + local.get $4 + local.get $3 + i32.sub + local.set $5 + local.get $4 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $4 local.get $0 local.get $3 call $~lib/memory/memory.copy local.get $5 - local.get $3 - i32.sub - local.tee $0 - local.get $4 + local.get $1 i32.gt_u if local.get $1 + local.get $5 + i32.const 2 + i32.sub + local.get $1 + i32.div_u + local.tee $0 + i32.mul + local.set $6 local.get $3 + local.get $4 i32.add local.tee $3 local.get $2 - local.get $4 + local.get $1 local.get $0 - i32.const 2 - i32.sub - local.get $4 - i32.div_u - local.tee $5 call $~lib/memory/memory.repeat - local.get $4 - local.get $5 - i32.mul - local.tee $4 local.get $3 + local.get $6 i32.add local.get $2 - local.get $0 - local.get $4 + local.get $5 + local.get $6 i32.sub call $~lib/memory/memory.copy else - local.get $1 local.get $3 + local.get $4 i32.add local.get $2 - local.get $0 + local.get $5 call $~lib/memory/memory.copy end - local.get $1 + local.get $4 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2638,34 +2640,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $4 call $~lib/string/String#get:length - local.tee $0 + local.tee $3 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $4 + local.get $4 + local.tee $0 i32.load16_u local.set $2 loop $while-continue|0 local.get $2 call $~lib/util/string/isSpace if - local.get $4 + local.get $0 i32.const 2 i32.add - local.tee $4 + local.tee $0 i32.load16_u local.set $2 - local.get $0 + local.get $3 i32.const 1 i32.sub - local.set $0 + local.set $3 br $while-continue|0 end end f64.const 1 - local.set $5 + local.set $6 i32.const 1 local.get $2 i32.const 43 @@ -2675,10 +2677,10 @@ i32.eq select if - local.get $0 + local.get $3 i32.const 1 i32.sub - local.tee $0 + local.tee $3 i32.eqz br_if $folding-inner0 f64.const -1 @@ -2687,11 +2689,11 @@ i32.const 45 i32.eq select - local.set $5 - local.get $4 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $4 + local.tee $0 i32.load16_u local.set $2 end @@ -2714,12 +2716,12 @@ i32.const 48 i32.eq i32.const 0 - local.get $0 + local.get $3 i32.const 2 i32.gt_s select if (result i32) - local.get $4 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -2729,18 +2731,18 @@ i32.const 0 end if - local.get $4 - i32.const 4 - i32.add - local.set $4 - local.get $0 + local.get $3 i32.const 2 i32.sub + local.set $3 + local.get $0 + i32.const 4 + i32.add local.set $0 end end else - local.get $0 + local.get $3 i32.const 2 i32.gt_s i32.const 0 @@ -2752,7 +2754,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $4 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -2770,38 +2772,38 @@ br_if $case2|1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 2 local.set $1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 8 local.set $1 br $break|1 end - local.get $4 + local.get $0 i32.const 4 i32.add - local.set $4 - local.get $0 + local.set $0 + local.get $3 i32.const 2 i32.sub - local.set $0 + local.set $3 i32.const 16 local.set $1 end @@ -2814,14 +2816,14 @@ end loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $3 local.tee $2 i32.const 1 i32.sub - local.set $0 + local.set $3 local.get $2 if - local.get $4 + local.get $0 i32.load16_u local.tee $2 i32.const 48 @@ -2857,10 +2859,10 @@ local.get $1 i32.ge_u if - local.get $6 - local.get $6 + local.get $5 + local.get $5 f64.eq - local.get $6 + local.get $5 f64.const 0 f64.ne i32.and @@ -2868,30 +2870,30 @@ br_if $folding-inner0 br $while-break|2 end - local.get $6 + local.get $5 local.get $1 f64.convert_i32_s f64.mul local.get $2 f64.convert_i32_u f64.add - local.set $6 - local.get $4 + local.set $5 + local.get $0 i32.const 2 i32.add - local.set $4 + local.set $0 br $while-continue|2 end end end - local.get $3 + local.get $4 call $~lib/rt/pure/__release - local.get $5 local.get $6 + local.get $5 f64.mul return end - local.get $3 + local.get $4 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -2915,34 +2917,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 call $~lib/string/String#get:length - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 - local.get $2 - local.tee $3 + local.get $3 + local.tee $0 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $3 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 - local.get $0 + local.get $2 i32.const 1 i32.sub - local.set $0 + local.set $2 br $while-continue|0 end end i32.const 1 - local.set $4 + local.set $6 i32.const 1 local.get $1 i32.const 43 @@ -2952,10 +2954,10 @@ i32.eq select if - local.get $0 + local.get $2 i32.const 1 i32.sub - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 i32.const -1 @@ -2964,15 +2966,15 @@ i32.const 45 i32.eq select - local.set $4 - local.get $3 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 end - local.get $0 + local.get $2 i32.const 2 i32.gt_s i32.const 0 @@ -2984,7 +2986,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $3 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -3002,57 +3004,57 @@ br_if $case2|1 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 2 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 8 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 16 - local.set $6 + local.set $4 end end - local.get $6 + local.get $4 i32.const 10 - local.get $6 + local.get $4 select - local.set $6 + local.set $4 loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $2 local.tee $1 i32.const 1 i32.sub - local.set $0 + local.set $2 local.get $1 if - local.get $3 + local.get $0 i32.load16_u local.tee $1 i32.const 48 @@ -3085,7 +3087,7 @@ select end local.tee $1 - local.get $6 + local.get $4 i32.ge_u if local.get $5 @@ -3094,27 +3096,27 @@ br $while-break|2 end local.get $1 + local.get $4 local.get $5 - local.get $6 i32.mul i32.add local.set $5 - local.get $3 + local.get $0 i32.const 2 i32.add - local.set $3 + local.set $0 br $while-continue|2 end end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 local.get $5 + local.get $6 i32.mul return end - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 0 ) @@ -3122,40 +3124,40 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i64) + (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 call $~lib/string/String#get:length - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 - local.get $2 - local.tee $3 + local.get $3 + local.tee $0 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $3 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 - local.get $0 + local.get $2 i32.const 1 i32.sub - local.set $0 + local.set $2 br $while-continue|0 end end i64.const 1 - local.set $4 + local.set $6 i32.const 1 local.get $1 i32.const 43 @@ -3165,10 +3167,10 @@ i32.eq select if - local.get $0 + local.get $2 i32.const 1 i32.sub - local.tee $0 + local.tee $2 i32.eqz br_if $folding-inner0 i64.const -1 @@ -3177,15 +3179,15 @@ i32.const 45 i32.eq select - local.set $4 - local.get $3 + local.set $6 + local.get $0 i32.const 2 i32.add - local.tee $3 + local.tee $0 i32.load16_u local.set $1 end - local.get $0 + local.get $2 i32.const 2 i32.gt_s i32.const 0 @@ -3197,7 +3199,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $3 + local.get $0 i32.load16_u offset=2 i32.const 32 i32.or @@ -3215,57 +3217,57 @@ br_if $case2|1 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 2 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 8 - local.set $6 + local.set $4 br $break|1 end - local.get $3 + local.get $0 i32.const 4 i32.add - local.set $3 - local.get $0 + local.set $0 + local.get $2 i32.const 2 i32.sub - local.set $0 + local.set $2 i32.const 16 - local.set $6 + local.set $4 end end - local.get $6 + local.get $4 i32.const 10 - local.get $6 + local.get $4 select - local.set $6 + local.set $4 loop $while-continue|2 block $while-break|2 - local.get $0 + local.get $2 local.tee $1 i32.const 1 i32.sub - local.set $0 + local.set $2 local.get $1 if - local.get $3 + local.get $0 i32.load16_u local.tee $1 i32.const 48 @@ -3298,7 +3300,7 @@ select end local.tee $1 - local.get $6 + local.get $4 i32.ge_u if local.get $5 @@ -3309,27 +3311,27 @@ local.get $1 i64.extend_i32_u local.get $5 - local.get $6 + local.get $4 i64.extend_i32_s i64.mul i64.add local.set $5 - local.get $3 + local.get $0 i32.const 2 i32.add - local.set $3 + local.set $0 br $while-continue|2 end end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 local.get $5 + local.get $6 i64.mul return end - local.get $2 + local.get $3 call $~lib/rt/pure/__release i64.const 0 ) @@ -4033,32 +4035,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $13 + local.tee $11 i64.div_u local.tee $16 i64.clz - local.set $11 + local.set $13 local.get $7 - local.get $13 + local.get $11 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $11 + local.get $13 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $13 + local.get $11 f64.convert_i64_u f64.div i64.trunc_f64_u local.get $16 - local.get $11 + local.get $13 i64.shl i64.add f64.convert_i64_u local.get $10 - local.get $11 + local.get $13 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4091,11 +4093,11 @@ i64.and i64.const 1220703125 i64.mul - local.tee $7 + local.tee $10 i64.const 32 i64.shr_u i64.add - local.tee $10 + local.tee $7 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4107,7 +4109,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $7 + local.get $10 local.get $0 i64.extend_i32_u i64.shl @@ -4115,11 +4117,11 @@ i64.shr_u i64.const 1 i64.and - local.get $10 + local.get $7 local.get $0 i64.extend_i32_u i64.shl - local.get $7 + local.get $10 i64.const 4294967295 i64.and local.get $11 @@ -4747,10 +4749,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 @@ -4817,7 +4819,7 @@ local.set $7 local.get $2 call $~lib/rt/pure/__retain - local.set $5 + local.set $6 block $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -4834,7 +4836,7 @@ local.get $0 call $~lib/rt/pure/__retain else - local.get $5 + local.get $6 local.get $0 local.get $7 local.get $0 @@ -4845,7 +4847,7 @@ local.set $0 br $folding-inner0 end - local.get $5 + local.get $6 call $~lib/string/String#get:length local.set $2 local.get $10 @@ -4871,7 +4873,7 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl @@ -4899,17 +4901,17 @@ local.get $1 i32.const 1 i32.add - local.tee $1 + local.tee $5 i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $1 local.get $2 + local.get $5 i32.add local.set $1 local.get $9 @@ -4941,7 +4943,7 @@ loop $while-continue|1 local.get $0 local.get $7 - local.get $6 + local.get $5 call $~lib/string/String#indexOf local.tee $4 i32.const -1 @@ -4952,7 +4954,7 @@ i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl @@ -4960,7 +4962,7 @@ local.get $4 local.get $10 i32.add - local.set $6 + local.set $5 br $while-continue|1 end end @@ -4974,7 +4976,7 @@ loop $while-continue|2 local.get $0 local.get $7 - local.get $6 + local.get $5 call $~lib/string/String#indexOf local.tee $9 i32.const -1 @@ -5010,38 +5012,38 @@ i32.shl i32.add local.get $0 - local.get $6 + local.get $5 i32.const 1 i32.shl i32.add local.get $9 - local.get $6 + local.get $5 i32.sub - local.tee $6 + local.tee $5 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $3 - local.get $6 + local.get $5 local.get $8 i32.add - local.tee $6 + local.tee $5 i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $6 + local.get $5 i32.add local.set $8 local.get $9 local.get $10 i32.add - local.set $6 + local.set $5 br $while-continue|2 end end @@ -5062,7 +5064,7 @@ local.set $3 end local.get $4 - local.get $6 + local.get $5 i32.sub local.tee $2 if @@ -5072,7 +5074,7 @@ i32.shl i32.add local.get $0 - local.get $6 + local.get $5 i32.const 1 i32.shl i32.add @@ -5104,13 +5106,13 @@ call $~lib/rt/pure/__retain local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release return end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release local.get $0 ) @@ -5254,15 +5256,15 @@ i32.const 0 i32.gt_s select - local.tee $3 + local.tee $1 local.get $0 call $~lib/string/String#get:length - local.tee $1 - local.get $3 + local.tee $3 local.get $1 + local.get $3 i32.lt_s select - local.tee $3 + local.tee $1 local.get $2 i32.const 0 local.get $2 @@ -5270,58 +5272,59 @@ i32.gt_s select local.tee $2 - local.get $1 + local.get $3 local.get $2 - local.get $1 + local.get $3 i32.lt_s select local.tee $2 - local.get $3 + local.get $1 local.get $2 - i32.gt_s + i32.lt_s select i32.const 1 i32.shl - local.tee $4 - local.get $3 + local.set $4 + local.get $1 local.get $2 - local.get $3 + local.get $1 local.get $2 - i32.lt_s + i32.gt_s select i32.const 1 i32.shl local.tee $2 + local.get $4 i32.sub - local.tee $3 + local.tee $1 i32.eqz if i32.const 1280 return end i32.const 0 - local.get $4 - local.get $1 + local.get $2 + local.get $3 i32.const 1 i32.shl i32.eq - local.get $2 + local.get $4 select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $3 + local.get $1 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $2 + local.get $4 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $2 call $~lib/rt/pure/__retain ) (func $~lib/rt/__allocArray (param $0 i32) (result i32) @@ -5677,17 +5680,17 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 + local.get $0 local.get $3 i32.const 1 i32.shl - local.get $0 i32.add i32.load16_u i32.store16 + local.get $6 local.get $3 i32.const 2 i32.shl - local.get $6 i32.add local.get $2 i32.store @@ -5733,10 +5736,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $9 + local.get $0 local.get $5 i32.const 1 i32.shl - local.get $0 i32.add local.get $7 call $~lib/memory/memory.copy @@ -5792,10 +5795,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $4 + local.get $0 local.get $5 i32.const 1 i32.shl - local.get $0 i32.add local.get $2 call $~lib/memory/memory.copy @@ -6025,7 +6028,7 @@ (local $5 i64) local.get $3 i64.extend_i32_s - local.set $4 + local.set $5 local.get $3 local.get $3 i32.const 1 @@ -6042,11 +6045,11 @@ i32.shl i32.add local.get $1 - local.get $4 + local.get $5 local.get $1 - local.get $4 + local.get $5 i64.div_u - local.tee $1 + local.tee $4 i64.mul i64.sub i32.wrap_i64 @@ -6056,7 +6059,8 @@ i32.add i32.load16_u i32.store16 - local.get $1 + local.get $4 + local.tee $1 i64.const 0 i64.ne br_if $do-continue|1 @@ -6067,11 +6071,11 @@ i32.const 7 i32.and i64.extend_i32_s - local.set $5 - local.get $4 + local.set $4 + local.get $5 i64.const 1 i64.sub - local.set $4 + local.set $5 loop $do-continue|0 local.get $0 local.get $2 @@ -6082,7 +6086,7 @@ i32.shl i32.add local.get $1 - local.get $4 + local.get $5 i64.and i32.wrap_i64 i32.const 1 @@ -6092,7 +6096,7 @@ i32.load16_u i32.store16 local.get $1 - local.get $5 + local.get $4 i64.shr_u local.tee $1 i64.const 0 @@ -6581,6 +6585,7 @@ i32.const 16 i32.eq if + local.get $2 i32.const 63 local.get $0 i64.clz @@ -6590,7 +6595,6 @@ i32.shr_s i32.const 1 i32.add - local.get $2 i32.add local.tee $1 i32.const 1 @@ -6631,35 +6635,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -6678,117 +6683,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -6796,7 +6797,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -6811,10 +6812,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -6832,7 +6833,7 @@ i32.const 20280 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -6848,19 +6849,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -6871,7 +6872,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -6896,21 +6897,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -6922,7 +6923,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -6938,10 +6939,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -6949,9 +6950,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -6978,13 +6979,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -6993,7 +6994,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -7007,7 +7008,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -7190,7 +7191,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -7198,7 +7199,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -7266,18 +7267,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -7288,67 +7292,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7361,8 +7366,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -7371,71 +7376,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 19408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 20104 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -7444,47 +7469,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -7493,48 +7521,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -7546,13 +7559,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index edee9d2672..37f2e0823a 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1364,14 +1364,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $0 - i32.const 1 - i32.ne - if + block $case0|0 local.get $0 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 end i32.const 1408 br $break|0 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index ca6e5e8be3..2a12313555 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -473,7 +473,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -481,11 +481,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -948,10 +948,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1487,11 +1487,11 @@ i32.and i32.const 24 i32.add - local.tee $3 + local.tee $5 i32.add local.set $1 local.get $2 - local.get $3 + local.get $5 i32.sub local.set $2 local.get $0 @@ -3328,12 +3328,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $5 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $5 + local.set $2 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -3342,23 +3342,23 @@ if local.get $4 local.get $3 - local.get $5 + local.get $2 call $~lib/memory/memory.copy end local.get $4 - local.tee $3 + local.tee $2 call $~lib/rt/pure/__retain i32.store + local.get $5 local.get $2 - local.get $3 i32.store offset=4 - local.get $2 + local.get $5 local.get $1 i32.store offset=8 - local.get $2 + local.get $5 local.get $0 i32.store offset=12 - local.get $2 + local.get $5 ) (func $~lib/typedarray/Int8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -5590,10 +5590,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 @@ -9535,6 +9535,7 @@ br $while-continue|0 end end + local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -9553,31 +9554,27 @@ i32.const 8 i32.shl i32.clz - local.tee $3 + local.tee $1 i32.shl - local.set $1 + local.tee $3 + i32.const 8388608 + i32.sub local.get $2 + local.get $1 + i32.sub + local.tee $1 + i32.const 23 + i32.shl + i32.or local.get $3 + i32.const 1 + local.get $1 i32.sub - local.tee $2 + i32.shr_u + local.get $1 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 + select i32.or f32.reinterpret_i32 return @@ -9676,7 +9673,12 @@ i64.shr_u i64.const 2047 i64.and - local.tee $2 + local.set $2 + local.get $1 + i64.const 63 + i64.shr_u + local.set $3 + local.get $2 i64.const 2047 i64.eq if @@ -9688,19 +9690,15 @@ 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 + local.tee $4 i64.const -9223372036854775808 i64.le_u if - local.get $3 + local.get $4 i64.const -9223372036854775808 i64.eq br_if $folding-inner0 @@ -9760,6 +9758,9 @@ br $while-continue|0 end end + local.get $3 + i64.const 63 + i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -9778,35 +9779,29 @@ i64.const 11 i64.shl i64.clz - local.tee $3 + local.tee $1 i64.shl - local.set $1 + local.tee $3 + i64.const 4503599627370496 + i64.sub local.get $2 + local.get $1 + i64.sub + local.tee $1 + i64.const 52 + i64.shl + i64.or local.get $3 + i64.const 0 + local.get $1 i64.sub - local.tee $2 + i64.const 1 + i64.add + i64.shr_u + local.get $1 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 + select i64.or f64.reinterpret_i64 return @@ -9914,8 +9909,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -9925,8 +9920,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -10015,8 +10010,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10026,8 +10021,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -10061,8 +10056,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10072,8 +10067,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -10149,11 +10144,11 @@ local.get $2 call $~lib/rt/pure/__retain local.set $2 - local.get $0 i32.const 6256 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s + local.get $0 i64.ne if i32.const 0 @@ -10163,8 +10158,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10174,8 +10169,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -10265,8 +10260,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10276,8 +10271,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -10312,8 +10307,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10323,8 +10318,8 @@ call $~lib/builtins/abort unreachable end - local.get $2 global.get $std/typedarray/forEachSelf + local.get $2 i32.ne if i32.const 0 @@ -18856,21 +18851,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19258,14 +19253,14 @@ local.get $1 i32.const 255 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19440,21 +19435,21 @@ i32.add return end - local.get $2 local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19611,14 +19606,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $2 + local.tee $1 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 - local.get $2 local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19793,9 +19788,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $0 + local.tee $2 call $~lib/util/number/utoa_dec_simple - local.get $0 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20182,10 +20177,10 @@ i64.const 10 i64.lt_u if + local.get $0 local.get $2 i32.const 1 i32.shl - local.get $0 i32.add local.get $1 i64.const 48 @@ -20200,16 +20195,16 @@ i64.const 4294967295 i64.le_u if - local.get $2 local.get $1 i32.wrap_i64 - local.tee $2 + local.tee $3 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $3 + local.set $2 local.get $0 - local.get $2 local.get $3 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -20218,10 +20213,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $3 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $3 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20633,35 +20628,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -20680,117 +20676,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -20798,7 +20790,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -20813,10 +20805,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -20834,7 +20826,7 @@ i32.const 8248 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -20850,19 +20842,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -20873,7 +20865,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -20898,21 +20890,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -20924,7 +20916,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -20940,10 +20932,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -20951,9 +20943,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -20980,13 +20972,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -20995,7 +20987,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -21009,7 +21001,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -21192,7 +21184,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -21200,7 +21192,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -21268,18 +21260,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -21290,67 +21285,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21363,8 +21359,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -21373,71 +21369,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 7376 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $3 i32.const 1 i32.shl i32.const 8072 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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -21446,47 +21462,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -21495,48 +21514,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -21548,13 +21552,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/unary.optimized.wat b/tests/compiler/unary.optimized.wat index 495e5af382..07a9b1fbb9 100644 --- a/tests/compiler/unary.optimized.wat +++ b/tests/compiler/unary.optimized.wat @@ -10,8 +10,6 @@ (func $start:unary (local $0 i32) (local $1 i64) - (local $2 f32) - (local $3 f64) global.get $unary/i i32.const 1 i32.add @@ -144,12 +142,9 @@ global.set $unary/f f32.const 1.25 global.set $unary/f - f32.const 1.25 - local.tee $2 - f32.const 1 - f32.sub + f32.const 0.25 global.set $unary/f - local.get $2 + f32.const 1.25 global.set $unary/f global.get $unary/F f64.const 1 @@ -187,12 +182,9 @@ global.set $unary/F f64.const 1.25 global.set $unary/F - f64.const 1.25 - local.tee $3 - f64.const 1 - f64.sub + f64.const 0.25 global.set $unary/F - local.get $3 + f64.const 1.25 global.set $unary/F ) (func $~start diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 52c13126ca..71c01220f9 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -418,35 +418,36 @@ (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 i32) + (local $9 i32) + (local $10 i64) (local $11 i64) (local $12 i64) - (local $13 i64) - local.get $3 - 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 + local.tee $9 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub - local.tee $12 - i64.and + local.set $11 + local.get $3 + local.get $1 + i64.sub local.set $8 local.get $3 - local.get $10 + local.get $9 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.set $2 + local.get $3 + local.get $11 + i64.and + local.set $3 + local.get $2 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -465,117 +466,113 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $4 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $7 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 - i32.const 0 + local.get $2 local.set $7 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $7 end - local.get $2 local.get $6 + local.get $7 i32.or if local.get $0 @@ -583,7 +580,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $7 i32.const 65535 i32.and i32.const 48 @@ -598,10 +595,10 @@ i32.const 1 i32.sub local.set $4 - local.get $8 - local.get $7 + local.get $3 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl i64.add @@ -619,7 +616,7 @@ i32.const 1936 i32.add i64.load32_u - local.get $10 + local.get $9 i64.extend_i32_s i64.shl local.set $3 @@ -635,19 +632,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 @@ -658,7 +655,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select @@ -683,21 +680,21 @@ br $while-continue|0 end end - local.get $10 + local.get $9 i64.extend_i32_s - local.set $13 + local.set $1 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $3 i64.const 10 i64.mul - local.tee $3 - local.get $13 + local.tee $12 + local.get $1 i64.shr_u - local.tee $1 + local.tee $3 local.get $6 i64.extend_i32_s i64.or @@ -709,7 +706,7 @@ i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 i32.wrap_i64 i32.const 65535 i32.and @@ -725,10 +722,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 + local.get $11 local.get $12 i64.and - local.tee $8 + local.tee $3 local.get $5 i64.ge_u br_if $while-continue|4 @@ -736,9 +733,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $3 local.set $1 - local.get $9 + local.get $8 i32.const 0 local.get $4 i32.sub @@ -765,13 +762,13 @@ local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $11 + local.get $10 i64.add local.get $3 i64.lt_u @@ -780,7 +777,7 @@ local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 @@ -794,7 +791,7 @@ i32.sub local.set $4 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 @@ -1177,7 +1174,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1185,7 +1182,7 @@ local.get $2 select i32.store16 offset=4 - local.get $0 + local.get $3 i32.const 2 i32.add else @@ -1253,18 +1250,21 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i64) + (local $3 i32) (local $4 i32) (local $5 i64) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) + (local $6 i64) + (local $7 i32) + (local $8 i64) + (local $9 i64) (local $10 i64) + (local $11 i32) + (local $12 i64) + (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $11 if (result f64) local.get $0 i32.const 45 @@ -1275,67 +1275,68 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $4 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.set $2 + local.get $4 + i32.const 1 + local.get $4 + select + i32.const 1075 + i32.sub + local.tee $4 + i32.const 1 + i32.sub + local.get $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $5 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $3 + i32.sub + local.set $7 + local.get $5 + local.get $3 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 + local.tee $3 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub local.get $4 + local.get $3 + i32.sub + local.get $7 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $7 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1349,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $3 + local.get $3 f64.convert_i32_s local.get $1 f64.ne @@ -1358,71 +1359,91 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $3 i32.const 3 i32.shl - local.tee $9 + local.tee $7 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $7 i32.const 1064 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + 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/_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 $4 local.get $2 i64.clz i32.wrap_i64 - local.tee $0 + local.tee $3 + i32.sub + local.set $7 + local.get $2 + local.get $3 i64.extend_i32_s i64.shl + local.tee $5 + i64.const 4294967295 + i64.and + local.set $13 + global.get $~lib/util/number/_frc_pow local.tee $2 + i64.const 4294967295 + i64.and + local.tee $12 + local.get $5 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 - i64.const 32 - i64.shr_u - local.tee $10 + local.tee $5 i64.mul - local.get $5 - local.get $7 + local.get $12 + local.get $13 i64.mul + i64.const 32 + i64.shr_u + i64.add + local.set $12 + global.get $~lib/util/number/_frc_plus + local.tee $8 + i64.const 4294967295 + i64.and + local.set $9 local.get $2 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $6 + local.get $8 + i64.const 32 + i64.shr_u + local.tee $8 + i64.mul + local.get $6 + local.get $9 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.set $6 + local.get $8 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $10 + i64.mul + local.get $6 i64.const 32 i64.shr_u i64.add - local.get $2 + local.get $9 local.get $10 i64.mul - local.get $5 + local.get $6 i64.const 4294967295 i64.and i64.add @@ -1431,47 +1452,50 @@ 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 1 + i64.sub + local.set $8 + global.get $~lib/util/number/_frc_minus + local.tee $9 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 - i64.mul + local.set $6 local.get $2 i64.const 4294967295 i64.and - local.tee $2 + local.tee $10 + local.get $9 + i64.const 32 + i64.shr_u + local.tee $9 + i64.mul + local.get $6 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add + local.set $10 + local.get $0 + local.get $11 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $5 + local.get $2 + i64.const 32 + i64.shr_u local.tee $5 + i64.mul + local.get $12 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 - i64.mul local.get $5 + local.get $13 + i64.mul + local.get $12 i64.const 4294967295 i64.and i64.add @@ -1480,48 +1504,33 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $7 + i32.add + i32.const -64 + i32.sub + local.get $8 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub + local.get $8 + local.get $9 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 + local.get $10 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul - local.get $3 + local.get $10 i64.const 4294967295 i64.and i64.add @@ -1533,13 +1542,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $11 call $~lib/util/number/genDigits - local.get $8 + local.get $11 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $11 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 56323337fc..49b1224008 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $4 + local.tee $1 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $1 - local.get $4 + local.set $2 local.get $1 + local.get $2 i32.store offset=4 - local.get $1 + local.get $2 i32.eqz if local.get $0 @@ -718,10 +718,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1184,11 +1184,13 @@ i32.const 1 i32.add local.tee $2 + local.set $0 + local.get $2 i32.const 10 i32.ne br_if $while-continue|002 end - local.get $2 + local.get $0 i32.const 10 i32.ne if From 112160a6cd96d133a5ab63c830becd5bace7d635 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 03:58:37 +0300 Subject: [PATCH 08/13] Revert "what if..." This reverts commit a05e3e12ddb6171e6dc129b6d7480704da0d74de. --- src/module.ts | 12 +- tests/compiler/binary.optimized.wat | 93 +- tests/compiler/comma.optimized.wat | 11 + tests/compiler/do.optimized.wat | 14 +- .../extends-baseaggregate.optimized.wat | 71 +- tests/compiler/for.optimized.wat | 10 +- .../implicit-getter-setter.optimized.wat | 10 +- tests/compiler/issues/1095.optimized.wat | 10 +- tests/compiler/issues/1225.optimized.wat | 10 +- tests/compiler/logical.optimized.wat | 10 +- tests/compiler/managed-cast.optimized.wat | 10 +- tests/compiler/memcpy.optimized.wat | 63 +- tests/compiler/memory.optimized.wat | 11 + tests/compiler/number.optimized.wat | 218 +- tests/compiler/object-literal.optimized.wat | 10 +- tests/compiler/rc/local-init.optimized.wat | 10 +- .../rc/logical-and-mismatch.optimized.wat | 10 +- .../rc/logical-or-mismatch.optimized.wat | 10 +- tests/compiler/rc/optimize.optimized.wat | 24 +- tests/compiler/rc/rereturn.optimized.wat | 10 +- .../rc/ternary-mismatch.optimized.wat | 10 +- tests/compiler/resolve-binary.optimized.wat | 220 +- .../resolve-elementaccess.optimized.wat | 419 ++- tests/compiler/resolve-ternary.optimized.wat | 228 +- .../retain-release-sanity.optimized.wat | 287 +- tests/compiler/retain-return.optimized.wat | 10 +- tests/compiler/rt/finalize.optimized.wat | 70 +- tests/compiler/runtime-full.optimized.wat | 10 +- .../compiler/std/array-literal.optimized.wat | 10 +- tests/compiler/std/array.optimized.wat | 1163 ++++---- tests/compiler/std/arraybuffer.optimized.wat | 10 +- tests/compiler/std/dataview.optimized.wat | 10 +- tests/compiler/std/map.optimized.wat | 1302 ++++----- tests/compiler/std/math.optimized.wat | 2543 ++++++++--------- tests/compiler/std/mod.optimized.wat | 82 +- tests/compiler/std/set.optimized.wat | 56 +- tests/compiler/std/staticarray.optimized.wat | 10 +- .../std/string-casemapping.optimized.wat | 376 ++- .../std/string-encoding.optimized.wat | 12 +- tests/compiler/std/string.optimized.wat | 969 ++++--- tests/compiler/std/symbol.optimized.wat | 9 +- tests/compiler/std/typedarray.optimized.wat | 624 ++-- tests/compiler/unary.optimized.wat | 16 +- tests/compiler/wasi/trace.optimized.wat | 419 ++- tests/compiler/while.optimized.wat | 14 +- 45 files changed, 4742 insertions(+), 4764 deletions(-) diff --git a/src/module.ts b/src/module.ts index 9b83d01fac..96b0ebf6d2 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1536,13 +1536,6 @@ export class Module { passes.push("remove-unused-brs"); passes.push("remove-unused-names"); passes.push("inlining-optimizing"); - - if (optimizeLevel >= 3 && shrinkLevel <= 1) { - passes.push("licm"); - } - passes.push("simplify-locals-notee-nostructure"); - passes.push("vacuum"); - if (optimizeLevel >= 2 || shrinkLevel >= 1) { passes.push("pick-load-signs"); passes.push("simplify-globals-optimizing"); @@ -1553,6 +1546,11 @@ export class Module { passes.push("precompute"); } passes.push("vacuum"); + if (optimizeLevel >= 3 && shrinkLevel <= 1) { + passes.push("licm"); + } + passes.push("simplify-locals-nostructure"); + passes.push("vacuum"); passes.push("reorder-locals"); passes.push("remove-unused-brs"); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 17cee2e52b..12db290bd5 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -132,7 +132,6 @@ br $while-continue|0 end end - local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -151,27 +150,31 @@ i32.const 8 i32.shl i32.clz - local.tee $1 - i32.shl local.tee $3 - i32.const 8388608 - i32.sub - local.get $2 - local.get $1 - i32.sub - local.tee $1 - i32.const 23 i32.shl - i32.or + local.set $1 + local.get $2 local.get $3 - i32.const 1 - local.get $1 i32.sub - i32.shr_u - local.get $1 + local.tee $2 i32.const 0 i32.gt_s - select + 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 @@ -192,12 +195,7 @@ i64.shr_u i64.const 2047 i64.and - local.set $2 - local.get $1 - i64.const 63 - i64.shr_u - local.set $3 - local.get $2 + local.tee $2 i64.const 2047 i64.eq if @@ -206,15 +204,19 @@ 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 $4 + local.tee $3 i64.const 9214364837600034816 i64.le_u if - local.get $4 + local.get $3 i64.const 9214364837600034816 i64.eq br_if $folding-inner0 @@ -274,9 +276,6 @@ br $while-continue|0 end end - local.get $3 - i64.const 63 - i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -295,29 +294,35 @@ i64.const 11 i64.shl i64.clz - local.tee $1 - i64.shl local.tee $3 - i64.const 4503599627370496 - i64.sub - local.get $2 - local.get $1 - i64.sub - local.tee $1 - i64.const 52 i64.shl - i64.or + local.set $1 + local.get $2 local.get $3 - i64.const 0 - local.get $1 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $1 + local.tee $2 i64.const 0 i64.gt_s - select + 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 diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index b8197dbcf8..212f05ac19 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -80,6 +80,17 @@ global.set $comma/b i32.const 2 global.set $comma/a + global.get $comma/b + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 19 + i32.const 1 + call $~lib/builtins/abort + unreachable + end loop $for-loop|0 local.get $0 global.get $comma/a diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 67ffe2fb8d..13ee0d6c52 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -238,7 +238,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -246,11 +246,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -713,10 +713,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1158,13 +1158,11 @@ i32.const 1 i32.add local.tee $0 - local.set $1 - local.get $0 i32.const 10 i32.ne br_if $do-continue|02 end - local.get $1 + local.get $0 i32.const 10 i32.ne if diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index bb1ae1f8c0..304b4904b7 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -163,7 +163,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -171,11 +171,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -638,10 +638,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1379,10 +1379,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 @@ -1820,26 +1820,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $2 - local.set $0 + local.tee $3 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $3 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $3 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $4 - i32.load offset=4 local.tee $5 + i32.load offset=4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -1848,51 +1848,51 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray - local.get $2 - local.get $4 + local.get $3 + local.get $5 i32.store - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 else i32.const 0 - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $5 + local.get $2 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end - local.get $2 + local.get $3 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 @@ -1909,18 +1909,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 i32.load - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $3 + local.get $2 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 @@ -2106,11 +2106,14 @@ block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if local.get $1 - i32.const 1 + i32.const 2 i32.sub - br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 3093c267a7..579428fa82 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -235,7 +235,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -243,11 +243,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -710,10 +710,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index abf3658563..779ea253f5 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -645,10 +645,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index d92c305328..2c23f79404 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -630,10 +630,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index d8027676ba..37e44e8191 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 682fad3efb..e59eaa06b5 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index ec0fb8a13b..41383bad90 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -633,10 +633,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 48c7ddd585..8952f746c9 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -160,13 +160,22 @@ block $break|2 block $case2|2 block $case1|2 - block $case0|2 - local.get $0 + local.get $0 + i32.const 3 + i32.and + local.tee $3 + i32.const 1 + i32.ne + if + local.get $3 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $3 i32.const 3 - i32.and - i32.const 1 - i32.sub - br_table $case0|2 $case1|2 $case2|2 $break|2 + i32.eq + br_if $case2|2 + br $break|2 end local.get $1 i32.load @@ -220,25 +229,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 24 + i32.shr_u local.get $1 i32.load offset=5 - local.tee $4 + local.tee $3 i32.const 8 i32.shl - local.get $3 - i32.const 24 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 24 + i32.shr_u local.get $1 i32.load offset=9 local.tee $3 i32.const 8 i32.shl - local.get $4 - i32.const 24 - i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -311,25 +320,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 16 + i32.shr_u local.get $1 i32.load offset=6 - local.tee $4 + local.tee $3 i32.const 16 i32.shl - local.get $3 - i32.const 16 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 16 + i32.shr_u local.get $1 i32.load offset=10 local.tee $3 i32.const 16 i32.shl - local.get $4 - i32.const 16 - i32.shr_u i32.or i32.store offset=8 local.get $0 @@ -398,25 +407,25 @@ i32.or i32.store local.get $0 + local.get $3 + i32.const 8 + i32.shr_u local.get $1 i32.load offset=7 - local.tee $4 + local.tee $3 i32.const 24 i32.shl - local.get $3 - i32.const 8 - i32.shr_u i32.or i32.store offset=4 local.get $0 + local.get $3 + i32.const 8 + i32.shr_u local.get $1 i32.load offset=11 local.tee $3 i32.const 24 i32.shl - local.get $4 - i32.const 8 - i32.shr_u i32.or i32.store offset=8 local.get $0 diff --git a/tests/compiler/memory.optimized.wat b/tests/compiler/memory.optimized.wat index bf670ac375..b9acc22e85 100644 --- a/tests/compiler/memory.optimized.wat +++ b/tests/compiler/memory.optimized.wat @@ -158,6 +158,17 @@ global.set $memory/ptr i32.const 1167 global.set $memory/ptr + global.get $memory/ptr + i32.const 1167 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 39 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 1169 global.set $memory/ptr i32.const 1169 diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 5ff5fba74d..3fd153cc6e 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -355,6 +355,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -362,25 +367,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -399,113 +397,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -513,7 +514,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -528,8 +529,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -565,18 +566,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -587,7 +588,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -620,13 +621,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -638,7 +639,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -655,9 +656,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -666,9 +667,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -695,7 +696,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -709,7 +710,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -723,7 +724,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1078,7 +1079,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1086,7 +1087,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1156,8 +1157,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 f64) + (local $4 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 1920 @@ -1166,79 +1166,77 @@ i32.const 2352 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 $4 - i64.const 4294967295 - i64.and - local.set $2 - local.get $4 + local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - local.get $4 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $1 - local.get $0 - local.get $0 - local.get $4 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 2 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 $1 + i64.const 1 + i64.sub + local.tee $1 local.get $0 i32.const 2 i32.add local.get $1 - local.get $4 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -1254,7 +1252,7 @@ i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $3 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 67ce4a87be..9fb5ce8199 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -162,7 +162,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -170,11 +170,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -637,10 +637,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 2f72376819..d25ba45aa4 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 25eb8062b8..bcfd706103 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index b95566396a..0ee135fd09 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -153,7 +153,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -161,11 +161,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -628,10 +628,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index 66af931863..a655fd3623 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -718,10 +718,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1091,23 +1091,23 @@ (local $2 i32) local.get $0 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $0 local.get $1 call $~lib/rt/pure/__retain + local.tee $2 local.tee $1 - local.tee $0 i32.ne if - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $2 + local.set $1 + local.get $0 call $~lib/rt/pure/__release 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 ) (func $rc/optimize/OptimizeARC.keeps.partialRetains (param $0 i32) (param $1 i32) local.get $1 diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 941e7b0233..04e6d6ae71 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 28e4de31cb..5c66d5b631 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -155,7 +155,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -163,11 +163,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -630,10 +630,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 7cfb5a6905..78726945aa 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -370,6 +370,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -377,25 +382,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -414,113 +412,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -528,7 +529,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -543,8 +544,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -580,18 +581,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -602,7 +603,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -635,13 +636,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -653,7 +654,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -670,9 +671,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -681,9 +682,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -710,7 +711,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -724,7 +725,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -738,7 +739,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1093,7 +1094,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1101,7 +1102,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1171,7 +1172,6 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2064 @@ -1180,79 +1180,77 @@ i32.const 2496 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 $1 - i64.const 4294967295 - i64.and - local.set $2 - local.get $1 + local.tee $2 i64.const 32 i64.shr_u - local.tee $1 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $4 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $1 i64.const 4294967295 i64.and - local.get $1 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $3 - local.get $0 - local.get $0 - local.get $1 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 3 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $4 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 1 + i64.sub + local.tee $1 local.get $0 i32.const 3 i32.add - local.get $3 local.get $1 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -1264,14 +1262,14 @@ i64.const 32 i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $3 i64.const 4294966784 i64.mul - local.get $3 + local.get $1 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index 43839dd3cf..b6e217bab8 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -437,36 +437,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -485,113 +484,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -599,7 +602,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -614,10 +617,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -635,7 +638,7 @@ i32.const 2280 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -651,19 +654,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -674,7 +677,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -699,21 +702,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -725,7 +728,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -741,10 +744,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -752,9 +755,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -781,13 +784,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -796,7 +799,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -810,7 +813,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1193,7 +1196,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1201,7 +1204,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1269,21 +1272,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -1294,68 +1294,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1368,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1378,91 +1377,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 1408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 2104 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1471,50 +1450,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1523,33 +1499,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -1561,13 +1552,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index 54dc6c4497..08c31d502b 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -182,7 +182,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -190,11 +190,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -657,10 +657,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1347,6 +1347,11 @@ (local $10 i32) (local $11 i64) (local $12 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 @@ -1354,25 +1359,18 @@ local.tee $10 i64.extend_i32_s i64.shl - local.set $9 - local.get $3 - local.get $1 + local.tee $11 + i64.const 1 i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $9 - i64.const 1 - i64.sub - local.tee $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -1391,113 +1389,116 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 + local.get $4 + i32.const 10 + i32.ne + if local.get $4 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -1505,7 +1506,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -1520,8 +1521,8 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -1557,18 +1558,18 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.tee $9 - local.get $8 + local.tee $8 + local.get $9 i64.sub i64.gt_u - local.get $9 local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -1579,7 +1580,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -1612,13 +1613,13 @@ i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $12 + local.tee $8 local.get $6 i64.extend_i32_s i64.or @@ -1630,7 +1631,7 @@ i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.wrap_i64 i32.const 65535 i32.and @@ -1647,9 +1648,9 @@ i32.sub local.set $4 local.get $3 - local.get $11 + local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -1658,9 +1659,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -1687,7 +1688,7 @@ local.get $1 i64.sub local.get $1 - local.get $9 + local.get $11 i64.add local.tee $8 local.get $3 @@ -1701,7 +1702,7 @@ local.get $5 local.get $1 i64.sub - local.get $9 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -1715,7 +1716,7 @@ i32.sub local.set $4 local.get $1 - local.get $9 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -2070,7 +2071,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -2078,7 +2079,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -2148,8 +2149,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 f64) + (local $4 f64) i32.const -4 global.set $~lib/util/number/_K i32.const 2096 @@ -2158,79 +2158,77 @@ i32.const 2528 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 $4 - i64.const 4294967295 - i64.and - local.set $2 - local.get $4 + local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $3 i64.const 31 i64.shl local.get $2 + i64.const 4294967295 + i64.and + local.tee $2 i64.const 31 i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u + i64.const 0 i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - local.get $4 - i64.const 10 - i64.shl + i64.const 0 i64.add i64.const 2147483647 i64.add i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $1 - local.get $0 - local.get $0 - local.get $4 + global.get $~lib/util/number/_exp_pow + local.tee $0 + i32.const 1 + i32.add + local.get $3 i64.const 31 i64.shl local.get $2 i64.const 31 i64.shl - i64.const 0 + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u i64.add - local.tee $3 + local.tee $1 i64.const 32 i64.shr_u i64.add - local.get $3 + local.get $1 i64.const 4294967295 i64.and - i64.const 0 + local.get $3 + i64.const 10 + i64.shl 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 $1 + i64.const 1 + i64.sub + local.tee $1 local.get $0 i32.const 1 i32.add local.get $1 - local.get $4 + local.get $3 i64.const 2147483647 i64.mul local.get $2 @@ -2246,7 +2244,7 @@ i64.const 32 i64.shr_u i64.add - local.get $4 + local.get $3 i64.const 4294966784 i64.mul local.get $1 diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 84a4d6dc9f..4c99175311 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -180,7 +180,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -188,11 +188,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -655,10 +655,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1560,10 +1560,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 @@ -1781,57 +1781,56 @@ i32.const 3 call $~lib/rt/tlsf/__alloc 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 i32.const 12 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 12 call $~lib/memory/memory.fill - local.get $2 - local.set $1 - local.get $2 - local.get $0 + local.get $1 + local.tee $0 + local.get $3 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 - local.get $3 + local.set $0 + local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $1 i32.store - local.get $0 - local.get $2 + local.get $3 + local.get $1 i32.store offset=4 - local.get $0 + local.get $3 i32.const 12 i32.store offset=8 - local.get $0 + local.get $3 i32.const 3 i32.store offset=12 - local.get $0 + local.get $3 call $~lib/array/Array#push - local.get $0 + local.get $3 call $~lib/array/Array#push - local.get $0 + local.get $3 i32.load offset=12 - local.tee $2 + local.tee $1 i32.const 1 i32.lt_s if @@ -1842,73 +1841,72 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.load offset=4 - local.get $2 + local.get $1 i32.const 1 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.shl i32.add i32.load drop - local.get $0 - local.get $2 + local.get $3 + local.get $1 i32.store offset=12 - local.get $0 + local.get $3 call $~lib/rt/pure/__release i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc 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 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $2 - local.set $1 - local.get $2 - local.get $0 + local.get $1 + local.tee $0 + local.get $3 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 - local.get $3 + local.set $0 + local.get $4 call $~lib/rt/pure/__release end + local.get $3 local.get $0 - local.get $1 i32.store - local.get $0 - local.get $2 + local.get $3 + local.get $1 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 $0 + local.get $3 loop $for-loop|0 - local.get $4 + local.get $2 i32.const 10 i32.lt_s if @@ -1916,48 +1914,47 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.const 0 i32.store - local.get $2 + local.get $3 i32.const 0 i32.store offset=4 - local.get $2 + local.get $3 i32.const 0 i32.store offset=8 - local.get $2 + local.get $3 i32.const 0 i32.store offset=12 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $0 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $0 - local.set $1 - local.get $0 - local.get $2 + local.get $1 + local.tee $0 + local.get $3 i32.load local.tee $5 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $5 call $~lib/rt/pure/__release end - local.get $2 - local.get $1 - i32.store - local.get $2 + local.get $3 local.get $0 + i32.store + local.get $3 + local.get $1 i32.store offset=4 - local.get $2 + local.get $3 i32.const 0 i32.store offset=8 - local.get $2 + local.get $3 i32.const 0 i32.store offset=12 i32.const 0 @@ -1967,15 +1964,15 @@ i32.const 10 i32.lt_s if - local.get $2 - local.get $2 + local.get $3 + local.get $3 i32.load offset=12 local.tee $1 i32.const 1 i32.add local.tee $5 call $~lib/array/ensureSize - local.get $2 + local.get $3 i32.load offset=4 local.get $1 i32.const 2 @@ -1984,7 +1981,7 @@ i32.const 1344 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $3 local.get $5 i32.store offset=12 i32.const 1344 @@ -1996,12 +1993,12 @@ br $for-loop|1 end end - local.get $2 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $2 i32.const 1 i32.add - local.set $4 + local.set $2 br $for-loop|0 end end @@ -2009,15 +2006,15 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $0 - call $~lib/rt/pure/__retain local.tee $2 + call $~lib/rt/pure/__retain + local.tee $3 i32.const 1456 call $~lib/string/String.__concat - local.get $0 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 i32.const 6 @@ -2030,13 +2027,13 @@ i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.const 0 i32.store - local.get $2 + local.get $3 local.tee $0 local.get $1 - local.tee $3 + local.tee $2 i32.load local.tee $4 i32.ne @@ -2047,95 +2044,94 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.get $0 i32.store local.get $2 - local.set $4 - local.get $2 + local.set $0 local.get $3 - local.tee $0 + local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $4 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $4 - i32.store - local.get $1 local.get $2 - local.tee $3 + i32.store + local.get $0 + local.tee $2 + local.get $3 + local.tee $0 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 local.get $0 + local.get $2 i32.store local.get $1 - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 local.get $0 + local.get $2 i32.store - local.get $1 - local.set $4 local.get $3 - local.tee $0 local.get $1 + local.tee $2 i32.load - local.tee $3 + local.tee $4 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $3 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $2 local.get $0 i32.store local.get $1 - local.get $2 + local.get $3 i32.load local.tee $0 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 + local.set $2 local.get $0 call $~lib/rt/pure/__release end + local.get $3 local.get $2 - local.get $4 i32.store local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) @@ -2422,26 +2418,26 @@ (local $5 i32) global.get $~lib/rt/pure/ROOTS local.tee $1 - local.tee $2 - local.set $0 + local.tee $3 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $3 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $3 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $4 - i32.load offset=4 local.tee $5 + i32.load offset=4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -2450,51 +2446,51 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray - local.get $2 - local.get $4 + local.get $3 + local.get $5 i32.store - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 else i32.const 0 - local.get $5 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $5 + local.get $2 i32.const 1879048192 i32.and select if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $2 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end - local.get $2 + local.get $3 global.set $~lib/rt/pure/CUR local.get $1 local.set $0 loop $for-loop|1 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 @@ -2511,18 +2507,18 @@ local.set $0 loop $for-loop|2 local.get $0 - local.get $2 + local.get $3 i32.lt_u if local.get $0 i32.load - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i32.load offset=4 i32.const 2147483647 i32.and i32.store offset=4 - local.get $3 + local.get $2 call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 @@ -2551,11 +2547,14 @@ block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if local.get $1 - i32.const 1 + i32.const 2 i32.sub - br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index da3868a035..72b4c576f6 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -158,7 +158,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -166,11 +166,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -633,10 +633,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index bfe71913a8..671366654c 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1909,17 +1909,8 @@ i32.load i32.const 32 i32.and + i32.eqz if - local.get $0 - local.get $1 - i32.const 1 - i32.sub - local.get $2 - i32.const -268435456 - i32.and - i32.or - i32.store offset=4 - else local.get $0 local.get $1 i32.const 1 @@ -1949,6 +1940,16 @@ i32.add global.set $~lib/rt/pure/CUR end + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 end end ) @@ -2065,25 +2066,25 @@ global.get $~lib/rt/pure/ROOTS local.tee $1 local.tee $3 - local.set $0 + local.set $4 global.get $~lib/rt/pure/CUR - local.set $5 + local.set $0 loop $for-loop|0 + local.get $4 local.get $0 - local.get $5 i32.lt_u if - local.get $0 + local.get $4 i32.load - local.tee $2 + local.tee $5 i32.load offset=4 - local.tee $4 + local.tee $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $4 + local.get $2 i32.const 268435455 i32.and i32.const 0 @@ -2092,10 +2093,10 @@ i32.const 0 end if - local.get $2 + local.get $5 call $~lib/rt/pure/markGray local.get $3 - local.get $2 + local.get $5 i32.store local.get $3 i32.const 4 @@ -2103,29 +2104,29 @@ local.set $3 else i32.const 0 - local.get $4 + local.get $2 i32.const 268435455 i32.and i32.eqz - local.get $4 + local.get $2 i32.const 1879048192 i32.and select if - local.get $2 + local.get $5 call $~lib/rt/pure/finalize else + local.get $5 local.get $2 - local.get $4 i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 + local.set $4 br $for-loop|0 end end @@ -2192,11 +2193,14 @@ block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if local.get $1 - i32.const 1 + i32.const 2 i32.sub - br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 6b8a723a9a..0a6d9adf60 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -156,7 +156,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -164,11 +164,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 554b1e34ef..dcb6c1ef2d 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -683,10 +683,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 503be29503..9691d0bf30 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -539,7 +539,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -547,11 +547,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1014,10 +1014,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1553,11 +1553,11 @@ i32.and i32.const 24 i32.add - local.tee $5 + local.tee $3 i32.add local.set $1 local.get $2 - local.get $5 + local.get $3 i32.sub local.set $2 local.get $0 @@ -1919,12 +1919,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $2 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $2 + local.set $5 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -1933,23 +1933,23 @@ if local.get $4 local.get $3 - local.get $2 + local.get $5 call $~lib/memory/memory.copy end local.get $4 - local.tee $2 + local.tee $3 call $~lib/rt/pure/__retain i32.store - local.get $5 local.get $2 + local.get $3 i32.store offset=4 - local.get $5 + local.get $2 local.get $1 i32.store offset=8 - local.get $5 + local.get $2 local.get $0 i32.store offset=12 - local.get $5 + local.get $2 ) (func $~lib/array/Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -2384,10 +2384,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 @@ -2603,7 +2603,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 local.get $1 i32.load offset=12 i32.const 0 @@ -2611,7 +2611,7 @@ select local.tee $4 i32.add - local.tee $3 + local.tee $2 i32.const 268435452 i32.gt_u if @@ -2622,23 +2622,23 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 2 i32.const 3 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $2 + local.get $3 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/memory/memory.copy - local.get $2 + local.get $0 local.get $5 i32.add local.get $1 @@ -2649,7 +2649,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $3 + 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) @@ -3809,10 +3809,10 @@ (local $7 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $4 + local.set $1 local.get $0 i32.load offset=12 - local.tee $1 + local.tee $4 i32.const 2 i32.const 3 i32.const 0 @@ -3823,11 +3823,11 @@ local.set $6 loop $for-loop|0 local.get $2 - local.get $1 + local.get $4 local.get $0 i32.load offset=12 local.tee $3 - local.get $1 + local.get $4 local.get $3 i32.lt_s select @@ -3850,7 +3850,7 @@ local.get $7 local.get $2 local.get $0 - local.get $4 + local.get $1 i32.load call_indirect (type $i32_i32_i32_=>_i32) i32.store @@ -3861,7 +3861,7 @@ br $for-loop|0 end end - local.get $4 + local.get $1 call $~lib/rt/pure/__release local.get $5 ) @@ -6004,7 +6004,7 @@ (local $3 i32) local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 local.get $0 i32.load offset=12 @@ -6025,16 +6025,16 @@ 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 $3 + local.get $2 call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 local.get $0 i32.load offset=4 local.get $1 @@ -6047,16 +6047,16 @@ i32.ne if local.get $0 - local.get $2 + local.get $3 call $~lib/rt/pure/__retain i32.store local.get $1 call $~lib/rt/pure/__release end - local.get $2 - call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release ) (func $std/array/createReverseOrderedNestedArray (result i32) (local $0 i32) @@ -6264,7 +6264,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 i32.const 1 i32.le_s if @@ -6276,22 +6276,22 @@ end local.get $0 i32.load offset=4 - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 2 i32.eq if - local.get $3 + local.get $2 i32.load offset=4 call $~lib/rt/pure/__retain - local.set $2 - local.get $3 + local.set $3 + local.get $2 i32.load call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~argumentsLength - local.get $2 + local.get $3 local.get $4 local.get $1 i32.load @@ -6299,16 +6299,16 @@ i32.const 0 i32.lt_s if - local.get $3 + local.get $2 local.get $4 i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store end local.get $0 call $~lib/rt/pure/__retain - local.get $2 + local.get $3 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -6316,13 +6316,13 @@ call $~lib/rt/pure/__release return end - local.get $3 local.get $2 + local.get $3 local.get $1 call $~lib/rt/pure/__retain - local.tee $4 + local.tee $2 call $~lib/util/sort/insertionSort<~lib/array/Array> - local.get $4 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain @@ -7366,9 +7366,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $0 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7687,36 +7687,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -7735,113 +7734,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -7849,7 +7852,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -7864,10 +7867,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -7885,7 +7888,7 @@ i32.const 9896 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -7901,19 +7904,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -7924,7 +7927,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -7949,21 +7952,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -7975,7 +7978,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -7991,10 +7994,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -8002,9 +8005,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -8031,13 +8034,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -8046,7 +8049,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -8060,7 +8063,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -8243,7 +8246,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -8251,7 +8254,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -8319,21 +8322,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -8344,68 +8344,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8418,8 +8417,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -8428,91 +8427,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 9024 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 9720 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8521,50 +8500,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8573,33 +8549,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -8611,13 +8602,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) @@ -8973,23 +8964,22 @@ local.get $8 if local.get $1 - local.get $1 + local.tee $2 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $2 + local.tee $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/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $2 - local.set $1 end local.get $3 i32.const 1 @@ -9069,133 +9059,132 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $8 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $7 + local.tee $6 i32.const 0 i32.lt_s if - local.get $8 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $7 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $2 + local.get $3 select return end i32.const 7840 local.set $1 - local.get $8 + local.get $5 call $~lib/string/String#get:length - local.set $5 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $5 + local.get $8 if local.get $1 - local.get $1 - local.get $8 + local.tee $2 + local.get $5 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $7 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -9203,21 +9192,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -9277,21 +9266,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9433,14 +9422,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9861,10 +9850,10 @@ i64.const 10 i64.lt_u if - local.get $0 local.get $2 i32.const 1 i32.shl + local.get $0 i32.add local.get $1 i64.const 48 @@ -9879,16 +9868,16 @@ i64.const 4294967295 i64.le_u if + local.get $2 local.get $1 i32.wrap_i64 - local.tee $3 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $3 local.get $0 - local.get $3 local.get $2 + local.get $3 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -9897,10 +9886,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $2 + local.tee $3 call $~lib/util/number/utoa_dec_simple end - local.get $2 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -10103,169 +10092,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10292,14 +10280,14 @@ local.get $1 i32.const 255 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -10448,169 +10436,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10632,169 +10619,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10820,70 +10806,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 @@ -10892,68 +10878,67 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -10962,24 +10947,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -11136,21 +11121,21 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $4 + local.set $0 i32.const 16 i32.const 27 call $~lib/rt/tlsf/__alloc - local.tee $0 + local.tee $4 local.get $3 i32.store offset=12 - local.get $0 + local.get $4 local.get $2 i32.store offset=8 - local.get $0 local.get $4 - i32.store offset=4 local.get $0 + i32.store offset=4 local.get $4 + local.get $0 call $~lib/rt/pure/__retain i32.store i32.const 0 @@ -11168,8 +11153,8 @@ i32.load local.tee $5 if + local.get $0 local.get $1 - local.get $4 i32.add local.get $5 i32.load offset=4 @@ -11196,7 +11181,7 @@ local.get $3 i32.lt_s if - local.get $4 + local.get $0 local.get $2 i32.const 2 i32.shl @@ -11211,7 +11196,7 @@ br $for-loop|2 end end - local.get $0 + local.get $4 call $~lib/rt/pure/__retain ) (func $start:std/array @@ -17472,7 +17457,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 local.get $1 i32.load offset=12 i32.const 0 @@ -17480,7 +17465,7 @@ select local.tee $4 i32.add - local.tee $3 + local.tee $2 i32.const 268435452 i32.gt_u if @@ -17491,23 +17476,23 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 2 i32.const 7 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $2 + local.get $3 i32.const 2 i32.shl - local.tee $2 + local.tee $0 call $~lib/memory/memory.copy - local.get $2 + local.get $0 local.get $5 i32.add local.get $1 @@ -17518,7 +17503,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 ) (func $~lib/array/Array#filter (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19208,14 +19193,14 @@ (local $3 i32) local.get $1 call $~lib/rt/pure/__retain - local.set $2 + local.set $1 local.get $0 local.get $0 i32.load offset=12 local.tee $3 i32.const 1 i32.add - local.tee $1 + local.tee $2 i32.const 2 call $~lib/array/ensureSize local.get $0 @@ -19224,15 +19209,15 @@ i32.const 2 i32.shl i32.add - local.get $2 + local.get $1 call $~lib/rt/pure/__retain i32.store local.get $0 - local.get $1 - i32.store offset=12 local.get $2 - call $~lib/rt/pure/__release + i32.store offset=12 local.get $1 + call $~lib/rt/pure/__release + local.get $2 ) (func $~lib/array/Array<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19251,9 +19236,9 @@ i32.const 0 local.get $1 select - local.tee $4 - i32.add local.tee $5 + i32.add + local.tee $3 i32.const 268435452 i32.gt_u if @@ -19264,15 +19249,15 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 i32.const 2 i32.const 29 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $6 i32.load offset=4 - local.set $6 + local.set $3 local.get $2 i32.const 2 i32.shl @@ -19281,49 +19266,49 @@ i32.load offset=4 local.set $0 loop $for-loop|0 - local.get $3 + local.get $4 local.get $2 i32.lt_u if local.get $3 - local.get $6 + local.get $4 i32.add local.get $0 - local.get $3 + local.get $4 i32.add i32.load call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $4 i32.const 4 i32.add - local.set $3 + local.set $4 br $for-loop|0 end end local.get $2 - local.get $6 + local.get $3 i32.add - local.set $3 + local.set $4 local.get $1 i32.load offset=4 - local.set $2 - local.get $4 + local.set $3 + local.get $5 i32.const 2 i32.shl - local.set $4 + local.set $2 i32.const 0 local.set $0 loop $for-loop|1 local.get $0 - local.get $4 + local.get $2 i32.lt_u if local.get $0 - local.get $3 + local.get $4 i32.add local.get $0 - local.get $2 + local.get $3 i32.add i32.load call $~lib/rt/pure/__retain @@ -19337,7 +19322,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $6 ) (func $~lib/array/Array<~lib/string/String>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -20655,12 +20640,12 @@ local.get $0 local.get $1 call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 local.get $2 call $~lib/array/Array<~lib/string/String>#indexOf i32.const 0 i32.ge_s - local.get $1 + local.get $0 call $~lib/rt/pure/__release ) (func $~lib/array/Array<~lib/string/String>#indexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 84a4ff6fb6..b0dafe80b1 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -170,7 +170,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -178,11 +178,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -645,10 +645,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index ce1d4406bd..1fc37200c5 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -178,7 +178,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -186,11 +186,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index f4bf646b69..e1e10c778f 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -177,7 +177,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -185,11 +185,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -652,10 +652,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1379,55 +1379,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_s i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -1435,72 +1435,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -1867,10 +1867,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 @@ -2406,55 +2406,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_s i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load8_s offset=1 i32.store8 offset=1 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -2462,72 +2462,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -2751,55 +2751,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load i32.store - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load call $~lib/util/hash/hash32 local.get $1 @@ -2807,72 +2807,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3611,55 +3611,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_u i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -3667,72 +3667,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3977,55 +3977,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load8_u i32.store8 - local.get $2 local.get $3 + local.get $2 i32.load8_u offset=1 i32.store8 offset=1 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -4033,72 +4033,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -4881,55 +4881,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_s i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -4937,72 +4937,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -5305,55 +5305,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_s i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load16_s offset=2 i32.store16 offset=2 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -5361,72 +5361,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6178,55 +6178,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_u i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6234,72 +6234,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6548,55 +6548,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i32.load16_u i32.store16 - local.get $2 local.get $3 + local.get $2 i32.load16_u offset=2 i32.store16 offset=2 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6604,72 +6604,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=4 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 8 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 8 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -8631,55 +8631,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i64.load i64.store - local.get $2 local.get $3 + local.get $2 i32.load offset=8 i32.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -8687,72 +8687,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=12 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 16 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 16 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32) @@ -9120,55 +9120,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 i64.load i64.store - local.get $2 local.get $3 + local.get $2 i64.load offset=8 i64.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -9176,72 +9176,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=16 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 24 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 24 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32) @@ -10593,55 +10593,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f32.load f32.store - local.get $2 local.get $3 + local.get $2 i32.load offset=4 i32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -10650,72 +10650,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32) @@ -10996,55 +10996,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 12 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f32.load f32.store - local.get $2 local.get $3 + local.get $2 f32.load offset=4 f32.store offset=4 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -11053,72 +11053,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=8 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 12 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 12 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32) @@ -11829,55 +11829,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 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 $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f64.load f64.store - local.get $2 local.get $3 + local.get $2 i32.load offset=8 i32.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -11886,72 +11886,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=12 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 16 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 16 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32) @@ -12232,55 +12232,55 @@ local.get $1 i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $4 + local.set $6 + local.get $5 i32.const 3 i32.shl i32.const 3 i32.div_s - local.tee $8 + local.tee $7 i32.const 24 i32.mul call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $4 + local.set $5 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $4 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $7 - local.get $4 - local.set $2 + local.set $8 + local.get $5 + local.set $3 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $4 + local.get $8 i32.ne if - local.get $6 - local.tee $3 + local.get $4 + local.tee $2 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $2 local.get $3 + local.get $2 f64.load f64.store - local.get $2 local.get $3 + local.get $2 f64.load offset=8 f64.store offset=8 - local.get $2 - local.get $5 local.get $3 + local.get $6 + local.get $2 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -12289,72 +12289,72 @@ i32.const 2 i32.shl i32.add - local.tee $3 + local.tee $2 i32.load i32.store offset=16 - local.get $3 local.get $2 + local.get $3 i32.store - local.get $2 + local.get $3 i32.const 24 i32.add - local.set $2 + local.set $3 end - local.get $6 + local.get $4 i32.const 24 i32.add - local.set $6 + local.set $4 br $while-continue|0 end end - local.get $5 - local.tee $2 + local.get $6 + local.tee $4 local.get $0 - local.tee $3 + local.tee $2 i32.load - local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $4 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $4 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 local.set $1 - local.get $4 - local.tee $3 + local.get $5 + local.tee $2 local.get $1 i32.load offset=8 - local.tee $2 + local.tee $4 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end local.get $1 - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $8 + local.get $7 i32.store offset=12 local.get $1 local.get $1 i32.load offset=20 i32.store offset=16 - local.get $5 + local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 13fc48a541..e9c68a62b6 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -1045,9 +1045,7 @@ (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 f64) - (local $6 f64) - (local $7 i32) + (local $5 i32) local.get $0 i64.reinterpret_f64 local.tee $2 @@ -1089,7 +1087,7 @@ return end i32.const -54 - local.set $7 + local.set $5 local.get $0 f64.const 18014398509481984 f64.mul @@ -1122,7 +1120,6 @@ end end end - f64.const 0.5 local.get $2 i64.const 4294967295 i64.and @@ -1142,27 +1139,27 @@ f64.const 1 f64.sub local.tee $3 - f64.mul - local.get $3 - f64.mul - local.set $4 - local.get $3 f64.const 2 local.get $3 f64.add f64.div - local.tee $5 - local.get $5 - f64.mul - local.tee $6 - local.get $6 + local.tee $4 + local.get $4 f64.mul local.set $0 - local.get $5 local.get $4 - local.get $6 + f64.const 0.5 + local.get $3 + f64.mul + local.get $3 + f64.mul + local.tee $4 + local.get $0 f64.const 0.6666666666666735 local.get $0 + local.get $0 + f64.mul + local.tee $0 f64.const 0.2857142874366239 local.get $0 f64.const 0.1818357216161805 @@ -1189,7 +1186,7 @@ f64.add f64.add f64.mul - local.get $7 + local.get $5 local.get $1 i32.const 20 i32.shr_s @@ -1403,30 +1400,30 @@ local.get $1 f32.add f32.div - local.tee $0 - local.get $0 + local.tee $4 + local.get $4 f32.mul local.tee $6 local.get $6 f32.mul - local.set $4 - local.get $0 + local.set $0 + local.get $4 f32.const 0.5 local.get $1 f32.mul local.get $1 f32.mul - local.tee $0 + local.tee $4 local.get $6 f32.const 0.6666666269302368 - local.get $4 + local.get $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $4 + local.get $0 f32.const 0.40000972151756287 - local.get $4 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -1436,17 +1433,17 @@ f32.mul local.get $3 f32.convert_i32_s - local.tee $4 + local.tee $0 f32.const 9.05800061445916e-06 f32.mul local.get $5 f32.add f32.add - local.get $0 + local.get $4 f32.sub local.get $1 f32.add - local.get $4 + local.get $0 f32.const 0.6931381225585938 f32.mul f32.add @@ -1455,8 +1452,7 @@ (local $1 i32) (local $2 f32) (local $3 f32) - (local $4 f32) - (local $5 i32) + (local $4 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -1494,7 +1490,7 @@ return end i32.const -25 - local.set $5 + local.set $4 local.get $0 f32.const 33554432 f32.mul @@ -1536,9 +1532,6 @@ local.tee $3 local.get $3 f32.mul - local.tee $4 - local.get $4 - f32.mul local.set $2 local.get $3 f32.const 0.5 @@ -1547,9 +1540,12 @@ local.get $0 f32.mul local.tee $3 - local.get $4 + local.get $2 f32.const 0.6666666269302368 local.get $2 + local.get $2 + f32.mul + local.tee $2 f32.const 0.2849878668785095 f32.mul f32.add @@ -1564,7 +1560,7 @@ f32.add f32.add f32.mul - local.get $5 + local.get $4 local.get $1 i32.const 23 i32.shr_s @@ -2620,7 +2616,7 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.set $3 + local.set $5 local.get $6 i32.wrap_i64 local.get $1 @@ -2629,12 +2625,13 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $4 - i32.const 1072693248 - i32.sub + local.set $4 local.get $6 i32.wrap_i64 local.tee $7 + local.get $4 + i32.const 1072693248 + i32.sub i32.or i32.eqz if @@ -2647,7 +2644,7 @@ i32.shr_u i32.const 2 i32.and - local.get $3 + local.get $5 i32.const 31 i32.shr_u i32.or @@ -2656,7 +2653,7 @@ i32.const 2147483647 i32.and local.set $4 - local.get $3 + local.get $5 i32.const 2147483647 i32.and local.tee $5 @@ -2834,10 +2831,10 @@ end local.get $0 i32.reinterpret_f32 - local.set $4 + local.set $3 local.get $1 i32.reinterpret_f32 - local.tee $3 + local.tee $4 i32.const 1065353216 i32.eq if @@ -2845,24 +2842,24 @@ call $~lib/math/NativeMathf.atan return end - local.get $3 + local.get $4 i32.const 30 i32.shr_u i32.const 2 i32.and - local.get $4 + local.get $3 i32.const 31 i32.shr_u i32.or local.set $2 - local.get $3 + local.get $4 i32.const 2147483647 i32.and - local.set $3 - local.get $4 + local.set $4 + local.get $3 i32.const 2147483647 i32.and - local.tee $4 + local.tee $3 i32.eqz if block $break|0 @@ -2897,10 +2894,10 @@ end end block $folding-inner0 - local.get $3 + local.get $4 i32.eqz br_if $folding-inner0 - local.get $3 + local.get $4 i32.const 2139095040 i32.eq if @@ -2916,7 +2913,7 @@ i32.const 2 i32.and select - local.get $4 + local.get $3 i32.const 2139095040 i32.eq select @@ -2931,20 +2928,20 @@ return end i32.const 1 - local.get $4 + local.get $3 i32.const 2139095040 i32.eq - local.get $3 + local.get $4 i32.const 218103808 i32.add - local.get $4 + local.get $3 i32.lt_u select br_if $folding-inner0 - local.get $4 + local.get $3 i32.const 218103808 i32.add - local.get $3 + local.get $4 i32.lt_u i32.const 0 local.get $2 @@ -3113,20 +3110,20 @@ i64.const -1073741824 i64.and f64.reinterpret_i64 - local.tee $1 - local.get $1 + local.tee $0 + local.get $0 f64.mul f64.div - local.set $0 - local.get $1 - local.get $1 + local.set $1 + local.get $0 local.get $0 local.get $1 + local.get $0 f64.sub f64.const 2 - local.get $1 - f64.mul local.get $0 + f64.mul + local.get $1 f64.add f64.div f64.mul @@ -3284,8 +3281,8 @@ (local $4 i64) (local $5 i64) (local $6 i64) - (local $7 i64) - (local $8 i32) + (local $7 i32) + (local $8 i64) (local $9 i64) (local $10 i64) (local $11 i64) @@ -3297,7 +3294,7 @@ i64.shr_s i64.const 1045 i64.sub - local.tee $4 + local.tee $2 i64.const 6 i64.shr_s i32.wrap_i64 @@ -3305,45 +3302,45 @@ i32.shl i32.const 1064 i32.add - local.tee $8 + local.tee $7 i64.load - local.set $5 - local.get $8 + local.set $6 + local.get $7 i64.load offset=8 - local.set $2 - local.get $8 + local.set $4 + local.get $7 i64.load offset=16 local.set $1 - local.get $4 + local.get $2 i64.const 63 i64.and - local.tee $4 + local.tee $2 i64.const 0 i64.ne if - local.get $5 - local.get $4 - i64.shl + local.get $6 local.get $2 - i64.const 64 + i64.shl local.get $4 + i64.const 64 + local.get $2 i64.sub local.tee $3 i64.shr_u i64.or - local.set $5 - local.get $2 + local.set $6 local.get $4 + local.get $2 i64.shl local.get $1 local.get $3 i64.shr_u i64.or - local.set $2 + local.set $4 local.get $1 - local.get $4 + local.get $2 i64.shl - local.get $8 + local.get $7 i64.load offset=24 local.get $3 i64.shr_u @@ -3355,41 +3352,41 @@ i64.and i64.const 4503599627370496 i64.or - local.tee $4 + local.tee $2 i64.const 4294967295 i64.and local.tee $3 - local.get $2 + local.get $4 i64.const 32 i64.shr_u - local.tee $7 + local.tee $8 i64.mul - local.get $2 + local.get $4 i64.const 4294967295 i64.and - local.tee $6 + local.tee $5 local.get $3 i64.mul local.tee $9 i64.const 32 i64.shr_u i64.add - local.set $2 - local.get $6 - local.get $4 + local.set $4 + local.get $5 + local.get $2 i64.const 32 i64.shr_u - local.tee $6 + local.tee $5 i64.mul - local.get $2 + local.get $4 i64.const 4294967295 i64.and i64.add local.set $3 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i64.mul - local.get $2 + local.get $4 i64.const 32 i64.shr_u i64.add @@ -3398,14 +3395,19 @@ i64.shr_u i64.add global.set $~lib/math/res128_hi + global.get $~lib/math/res128_hi + local.get $2 + local.get $6 + i64.mul + i64.add local.get $1 i64.const 32 i64.shr_u - local.get $4 + local.get $2 i64.const 32 i64.shr_s i64.mul - local.tee $2 + local.tee $4 local.get $9 i64.const 4294967295 i64.and @@ -3414,66 +3416,60 @@ i64.shl i64.add i64.add - local.tee $3 - local.get $2 + local.tee $2 + local.get $4 i64.lt_u i64.extend_i32_u - global.get $~lib/math/res128_hi - local.get $4 - local.get $5 - i64.mul i64.add - i64.add - local.tee $9 + local.tee $8 i64.const 2 i64.shl - local.get $3 + local.get $2 i64.const 62 i64.shr_u i64.or - local.tee $4 + local.tee $6 i64.const 63 i64.shr_s local.tee $1 i64.const 1 i64.shr_s - local.get $4 + local.get $6 i64.xor - local.tee $5 + local.tee $3 i64.clz - local.set $2 - local.get $5 - local.get $2 + local.set $4 + local.get $3 + local.get $4 i64.shl local.get $1 - local.get $3 + local.get $2 i64.const 2 i64.shl i64.xor - local.tee $10 + local.tee $5 i64.const 64 - local.get $2 + local.get $4 i64.sub i64.shr_u i64.or - local.tee $5 - i64.const 32 - i64.shr_u - local.set $3 - local.get $5 + local.tee $2 i64.const 4294967295 i64.and - local.tee $6 + local.set $3 + local.get $2 + i64.const 32 + i64.shr_u + local.tee $9 i64.const 560513588 i64.mul - local.set $7 local.get $3 - i64.const 560513588 - i64.mul - local.get $6 i64.const 3373259426 i64.mul - local.get $7 + local.get $3 + i64.const 560513588 + i64.mul + local.tee $10 i64.const 32 i64.shr_u i64.add @@ -3481,52 +3477,52 @@ i64.const 4294967295 i64.and i64.add - local.set $6 - local.get $3 + local.set $3 + local.get $9 i64.const 3373259426 i64.mul local.get $11 i64.const 32 i64.shr_u i64.add - local.get $6 + local.get $3 i64.const 32 i64.shr_u i64.add global.set $~lib/math/res128_hi - local.get $7 + local.get $10 i64.const 4294967295 i64.and - local.get $6 + local.get $3 i64.const 32 i64.shl i64.add local.tee $3 f64.const 3.753184150245214e-04 - local.get $5 + local.get $2 f64.convert_i64_u f64.mul f64.const 3.834951969714103e-04 - local.get $10 - local.get $2 + local.get $5 + local.get $4 i64.shl f64.convert_i64_u f64.mul f64.add i64.trunc_f64_u - local.tee $5 + local.tee $2 i64.lt_u i64.extend_i32_u global.get $~lib/math/res128_hi - local.tee $7 + local.tee $5 i64.const 11 i64.shr_u i64.add f64.convert_i64_u global.set $~lib/math/rempio2_y0 f64.const 5.421010862427522e-20 + local.get $2 local.get $5 - local.get $7 i64.const 53 i64.shl local.get $3 @@ -3539,12 +3535,12 @@ global.set $~lib/math/rempio2_y1 global.get $~lib/math/rempio2_y0 i64.const 4372995238176751616 - local.get $2 + local.get $4 i64.const 52 i64.shl i64.sub local.get $0 - local.get $4 + local.get $6 i64.xor i64.const -9223372036854775808 i64.and @@ -3557,7 +3553,7 @@ local.get $12 f64.mul global.set $~lib/math/rempio2_y1 - local.get $9 + local.get $8 i64.const 62 i64.shr_s local.get $1 @@ -3566,75 +3562,73 @@ ) (func $~lib/math/NativeMath.cos (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i64) + (local $2 i64) + (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i32) (local $6 i32) (local $7 f64) - (local $8 i32) local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 31 i32.shr_u - local.set $8 - local.get $6 + local.set $6 + local.get $5 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1072243195 i32.le_u if - local.get $6 + local.get $5 i32.const 1044816030 i32.lt_u if f64.const 1 return end + f64.const 1 + f64.const 0.5 local.get $0 local.get $0 f64.mul - local.tee $4 - local.get $4 - f64.mul - local.set $5 - f64.const 1 - f64.const 0.5 - local.get $4 + local.tee $3 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $1 f64.const 1 local.get $1 f64.sub - local.get $2 - f64.sub - local.get $4 local.get $4 + f64.sub + local.get $3 + local.get $3 f64.const 0.0416666666666666 - local.get $4 + local.get $3 f64.const -0.001388888888887411 - local.get $4 + local.get $3 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $5 - local.get $5 + local.get $3 + local.get $3 f64.mul - f64.const -2.7557314351390663e-07 + local.tee $4 local.get $4 + f64.mul + f64.const -2.7557314351390663e-07 + local.get $3 f64.const 2.087572321298175e-09 - local.get $4 + local.get $3 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3651,7 +3645,7 @@ f64.add return end - local.get $6 + local.get $5 i32.const 2146435072 i32.ge_u if @@ -3661,34 +3655,34 @@ return end block $~lib/math/rempio2|inlined.0 (result i32) - local.get $3 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1094263291 i32.lt_u if - local.get $6 + local.get $5 i32.const 20 i32.shr_u - local.tee $8 + local.tee $6 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $5 + local.tee $3 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $5 + local.get $3 f64.const 6.077100506506192e-11 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3703,25 +3697,25 @@ i32.const 16 i32.gt_u if - local.get $5 + local.get $3 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $5 + local.get $3 f64.const 6.077100506303966e-11 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $2 + local.get $4 f64.sub f64.sub - local.set $2 - local.get $8 + local.set $4 + local.get $6 local.get $0 - local.get $2 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -3736,24 +3730,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $5 + local.get $3 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $5 + local.get $3 f64.const 2.0222662487111665e-21 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $2 + local.get $4 f64.sub f64.sub - local.set $2 + local.set $4 local.get $0 - local.get $2 + local.get $4 f64.sub else local.get $1 @@ -3765,116 +3759,113 @@ local.get $0 local.get $1 f64.sub - local.get $2 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 - local.get $5 + local.get $3 i32.trunc_f64_s br $~lib/math/rempio2|inlined.0 end i32.const 0 - local.get $3 + local.get $2 call $~lib/math/pio2_large_quot - local.tee $6 + local.tee $5 i32.sub + local.get $5 local.get $6 - local.get $8 select end - local.set $8 + local.set $6 global.get $~lib/math/rempio2_y0 - local.set $2 + local.set $3 global.get $~lib/math/rempio2_y1 - local.set $1 - local.get $8 + local.set $4 + local.get $6 i32.const 1 i32.and if (result f64) - f64.const 0.00833333333332249 - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.mul - local.tee $4 - f64.const -1.984126982985795e-04 + 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 $4 - local.get $4 - local.get $4 + local.get $0 + local.get $0 + local.get $0 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $4 + local.get $0 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $5 - local.get $2 - local.tee $0 - local.get $4 - f64.const 0.5 - local.get $1 - f64.mul - local.get $4 - local.get $0 - f64.mul - local.tee $2 - local.get $5 f64.mul f64.sub f64.mul - local.get $1 + local.get $4 f64.sub - local.get $2 + local.get $1 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub else - local.get $2 - local.get $2 - f64.mul - local.tee $7 - local.get $7 - f64.mul - local.set $4 f64.const 1 f64.const 0.5 - local.get $7 + local.get $3 + local.get $3 f64.mul - local.tee $5 - f64.sub local.tee $0 + f64.mul + local.tee $1 + f64.sub + local.tee $7 f64.const 1 - local.get $0 + local.get $7 f64.sub - local.get $5 + local.get $1 f64.sub - local.get $7 - local.get $7 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $7 + local.get $0 f64.const -0.001388888888887411 - local.get $7 + local.get $0 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $4 - local.get $4 + local.get $0 + local.get $0 + f64.mul + local.tee $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $7 + local.get $0 f64.const 2.087572321298175e-09 - local.get $7 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3883,8 +3874,8 @@ f64.mul f64.add f64.mul - local.get $2 - local.get $1 + local.get $3 + local.get $4 f64.mul f64.sub f64.add @@ -3894,7 +3885,7 @@ local.get $0 f64.neg local.get $0 - local.get $8 + local.get $6 i32.const 1 i32.add i32.const 2 @@ -3924,14 +3915,17 @@ (local $4 f64) (local $5 i64) (local $6 i64) - (local $7 i32) + (local $7 i64) (local $8 i64) + (local $9 i32) + (local $10 i32) + (local $11 i64) local.get $0 i32.reinterpret_f32 local.tee $1 i32.const 31 i32.shr_u - local.set $7 + local.set $10 local.get $1 i32.const 2147483647 i32.and @@ -3951,24 +3945,24 @@ local.tee $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4017,51 +4011,32 @@ 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.set $5 - 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 $1 - i32.const 6 - i32.shr_s - i32.const 3 - i32.shl - i32.const 1256 - i32.add - local.tee $1 - i64.load - local.get $5 - i64.shl - local.get $1 - i64.load offset=8 - local.tee $6 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + local.tee $5 i64.const 32 i64.gt_u if (result i64) - local.get $6 + local.get $7 local.get $5 i64.const 32 i64.sub i64.shl - local.get $1 + local.get $9 i64.load offset=16 i64.const 96 local.get $5 @@ -4069,29 +4044,52 @@ i64.shr_u i64.or else - local.get $6 + 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 $5 + local.tee $6 i64.const 2 i64.shl - local.tee $6 + local.tee $8 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $6 i64.const 62 i64.shr_u - local.get $6 + local.get $8 i64.const 63 i64.shr_u i64.add @@ -4099,7 +4097,7 @@ local.tee $1 i32.sub local.get $1 - local.get $7 + local.get $10 select end local.set $1 @@ -4141,24 +4139,24 @@ local.get $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -4186,28 +4184,27 @@ ) (func $~lib/math/NativeMath.expm1 (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i32) + (local $2 i32) + (local $3 f64) (local $4 f64) - (local $5 i32) - (local $6 f64) + (local $5 f64) + (local $6 i32) (local $7 i32) (local $8 i64) local.get $0 i64.reinterpret_f64 local.tee $8 - i64.const 32 + i64.const 63 i64.shr_u - i64.const 2147483647 - i64.and i32.wrap_i64 - local.set $5 + local.set $7 local.get $8 - i64.const 63 + i64.const 32 i64.shr_u + i64.const 2147483647 + i64.and i32.wrap_i64 - local.set $7 - local.get $5 + local.tee $6 i32.const 1078159482 i32.ge_u if @@ -4233,7 +4230,7 @@ return end end - local.get $5 + local.get $6 i32.const 1071001154 i32.gt_u if @@ -4251,18 +4248,18 @@ f64.copysign f64.add i32.trunc_f64_s - local.get $5 + local.get $6 i32.const 1072734898 i32.lt_u select - local.tee $3 + local.tee $2 f64.convert_i32_s local.tee $1 f64.const 0.6931471803691238 f64.mul f64.sub - local.tee $4 - local.get $4 + local.tee $0 + local.get $0 local.get $1 f64.const 1.9082149292705877e-10 f64.mul @@ -4272,9 +4269,9 @@ f64.sub local.get $1 f64.sub - local.set $4 + local.set $3 else - local.get $5 + local.get $6 i32.const 1016070144 i32.lt_u if @@ -4286,27 +4283,27 @@ f64.const 0.5 local.get $0 f64.mul - local.tee $2 + local.tee $4 f64.mul - local.tee $1 - local.get $1 + local.tee $5 + local.get $5 f64.mul - local.set $6 + local.set $1 f64.const 3 f64.const 1 - local.get $1 + local.get $5 f64.const -0.03333333333333313 f64.mul f64.add - local.get $6 - f64.const 1.5873015872548146e-03 local.get $1 + f64.const 1.5873015872548146e-03 + local.get $5 f64.const -7.93650757867488e-05 f64.mul f64.add - local.get $6 - f64.const 4.008217827329362e-06 local.get $1 + f64.const 4.008217827329362e-06 + local.get $5 f64.const -2.0109921818362437e-07 f64.mul f64.add @@ -4314,59 +4311,59 @@ f64.add f64.mul f64.add - local.tee $6 - local.get $2 + local.tee $1 + local.get $4 f64.mul f64.sub - local.set $2 + local.set $4 + local.get $5 local.get $1 - local.get $6 - local.get $2 + local.get $4 f64.sub f64.const 6 local.get $0 - local.get $2 + local.get $4 f64.mul f64.sub f64.div f64.mul - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.eqz if local.get $0 local.get $0 - local.get $2 - f64.mul local.get $1 + f64.mul + local.get $5 f64.sub f64.sub return end local.get $0 - local.get $2 - local.get $4 + local.get $1 + local.get $3 f64.sub f64.mul - local.get $4 + local.get $3 f64.sub - local.get $1 + local.get $5 f64.sub - local.set $1 - local.get $3 + local.set $3 + local.get $2 i32.const -1 i32.eq if f64.const 0.5 local.get $0 - local.get $1 + local.get $3 f64.sub f64.mul f64.const 0.5 f64.sub return end - local.get $3 + local.get $2 i32.const 1 i32.eq if @@ -4375,7 +4372,7 @@ f64.lt if f64.const -2 - local.get $1 + local.get $3 local.get $0 f64.const 0.5 f64.add @@ -4386,13 +4383,13 @@ f64.const 1 f64.const 2 local.get $0 - local.get $1 + local.get $3 f64.sub f64.mul f64.add return end - local.get $3 + local.get $2 i64.extend_i32_s i64.const 1023 i64.add @@ -4401,16 +4398,16 @@ f64.reinterpret_i64 local.set $4 i32.const 1 - local.get $3 + local.get $2 i32.const 56 i32.gt_s - local.get $3 + local.get $2 i32.const 0 i32.lt_s select if local.get $0 - local.get $1 + local.get $3 f64.sub f64.const 1 f64.add @@ -4422,7 +4419,7 @@ local.get $0 local.get $4 f64.mul - local.get $3 + local.get $2 i32.const 1024 i32.eq select @@ -4433,22 +4430,22 @@ local.get $0 f64.const 1 i64.const 1023 - local.get $3 + local.get $2 i64.extend_i32_s i64.sub i64.const 52 i64.shl f64.reinterpret_i64 - local.tee $2 + local.tee $1 f64.sub - local.get $1 + local.get $3 f64.sub f64.const 1 + local.get $3 local.get $1 - local.get $2 f64.add f64.sub - local.get $3 + local.get $2 i32.const 20 i32.lt_s select @@ -4458,8 +4455,8 @@ ) (func $~lib/math/NativeMath.exp (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i32) + (local $2 i32) + (local $3 f64) (local $4 i32) (local $5 f64) (local $6 i32) @@ -4469,14 +4466,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $3 + local.tee $2 i32.const 31 i32.shr_u local.set $6 - local.get $3 + local.get $2 i32.const 2147483647 i32.and - local.tee $3 + local.tee $2 i32.const 1082532651 i32.ge_u if @@ -4504,12 +4501,12 @@ return end end - local.get $3 + local.get $2 i32.const 1071001154 i32.gt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1072734898 i32.ge_u if (result i32) @@ -4542,7 +4539,7 @@ f64.sub local.set $0 else - local.get $3 + local.get $2 i32.const 1043333120 i32.gt_u if (result f64) @@ -4558,25 +4555,25 @@ local.get $0 local.get $0 f64.mul - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 f64.mul local.set $5 f64.const 1 local.get $0 local.get $0 - local.get $2 + local.get $3 f64.const 0.16666666666666602 f64.mul local.get $5 f64.const -2.7777777777015593e-03 - local.get $2 + local.get $3 f64.const 6.613756321437934e-05 f64.mul f64.add local.get $5 f64.const -1.6533902205465252e-06 - local.get $2 + local.get $3 f64.const 4.1381367970572385e-08 f64.mul f64.add @@ -4585,10 +4582,10 @@ f64.mul f64.add f64.sub - local.tee $2 + local.tee $0 f64.mul f64.const 2 - local.get $2 + local.get $0 f64.sub f64.div local.get $7 @@ -4688,25 +4685,24 @@ (local $1 f32) (local $2 f32) (local $3 i32) - (local $4 f32) - (local $5 i32) + (local $4 i32) + (local $5 f32) (local $6 i32) (local $7 f32) local.get $0 i32.reinterpret_f32 - local.tee $6 - i32.const 2147483647 - i32.and - local.set $5 - local.get $6 + local.tee $4 i32.const 31 i32.shr_u local.set $6 - local.get $5 + local.get $4 + i32.const 2147483647 + i32.and + local.tee $4 i32.const 1100331076 i32.ge_u if - local.get $5 + local.get $4 i32.const 2139095040 i32.gt_u if @@ -4728,7 +4724,7 @@ return end end - local.get $5 + local.get $4 i32.const 1051816472 i32.gt_u if @@ -4746,19 +4742,19 @@ f32.copysign f32.add i32.trunc_f32_s - local.get $5 + local.get $4 i32.const 1065686418 i32.lt_u select local.tee $3 f32.convert_i32_s - local.tee $1 + local.tee $0 f32.const 0.6931381225585938 f32.mul f32.sub - local.tee $4 - local.get $4 + local.tee $1 local.get $1 + local.get $0 f32.const 9.05800061445916e-06 f32.mul local.tee $1 @@ -4767,9 +4763,9 @@ f32.sub local.get $1 f32.sub - local.set $4 + local.set $5 else - local.get $5 + local.get $4 i32.const 855638016 i32.lt_u if @@ -4824,10 +4820,10 @@ end local.get $0 local.get $2 - local.get $4 + local.get $5 f32.sub f32.mul - local.get $4 + local.get $5 f32.sub local.get $1 f32.sub @@ -4877,7 +4873,7 @@ i32.const 23 i32.shl f32.reinterpret_i32 - local.set $4 + local.set $5 i32.const 1 local.get $3 i32.const 56 @@ -4898,7 +4894,7 @@ f32.const 1701411834604692317316873e14 f32.mul local.get $0 - local.get $4 + local.get $5 f32.mul local.get $3 i32.const 128 @@ -4930,7 +4926,7 @@ i32.lt_s select f32.add - local.get $4 + local.get $5 f32.mul ) (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32) @@ -5396,27 +5392,27 @@ ) (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32) (local $1 f64) - (local $2 i64) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 f64) + (local $4 f64) + (local $5 i64) block $~lib/util/math/exp2f_lut|inlined.0 (result f32) local.get $0 f64.promote_f32 local.set $1 local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 i32.const 20 i32.shr_u i32.const 2047 i32.and - local.tee $4 + local.tee $3 i32.const 1072 i32.ge_u if f32.const 0 - local.get $3 + local.get $2 i32.const -8388608 i32.eq br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5424,7 +5420,7 @@ local.get $0 local.get $0 f32.add - local.get $4 + local.get $3 i32.const 2040 i32.ge_u br_if $~lib/util/math/exp2f_lut|inlined.0 @@ -5444,15 +5440,12 @@ br_if $~lib/util/math/exp2f_lut|inlined.0 drop end + f64.const 0.6931471806916203 + local.get $1 local.get $1 f64.const 211106232532992 f64.add - local.tee $5 - i64.reinterpret_f64 - local.set $2 - f64.const 0.6931471806916203 - local.get $1 - local.get $5 + local.tee $4 f64.const 211106232532992 f64.sub f64.sub @@ -5470,7 +5463,9 @@ f64.mul f64.mul f64.add - local.get $2 + local.get $4 + i64.reinterpret_f64 + local.tee $5 i32.wrap_i64 i32.const 31 i32.and @@ -5479,7 +5474,7 @@ i32.const 3336 i32.add i64.load - local.get $2 + local.get $5 i64.const 47 i64.shl i64.add @@ -5523,13 +5518,12 @@ (local $3 i64) (local $4 i64) (local $5 f64) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) (local $8 f64) (local $9 f64) - (local $10 f64) - (local $11 i32) - (local $12 f64) + (local $10 i32) + (local $11 f64) local.get $0 i64.reinterpret_f64 i64.const 9223372036854775807 @@ -5554,7 +5548,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $6 i32.const 2047 i32.eq if @@ -5571,7 +5565,7 @@ i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $11 + local.tee $10 i32.const 2047 i32.eq select @@ -5579,8 +5573,8 @@ local.get $0 return end - local.get $11 - local.get $7 + local.get $10 + local.get $6 i32.sub i32.const 64 i32.gt_s @@ -5591,13 +5585,13 @@ return end f64.const 1 - local.set $10 - local.get $11 + local.set $9 + local.get $10 i32.const 1533 i32.gt_s if (result f64) f64.const 5260135901548373507240989e186 - local.set $10 + local.set $9 local.get $1 f64.const 1.90109156629516e-211 f64.mul @@ -5606,12 +5600,12 @@ f64.const 1.90109156629516e-211 f64.mul else - local.get $7 + local.get $6 i32.const 573 i32.lt_s if (result f64) f64.const 1.90109156629516e-211 - local.set $10 + local.set $9 local.get $1 f64.const 5260135901548373507240989e186 f64.mul @@ -5623,68 +5617,68 @@ local.get $0 end end - local.tee $0 - local.get $0 - local.get $0 + local.set $0 + local.get $1 + local.get $1 + local.get $1 f64.const 134217729 f64.mul - local.tee $12 + local.tee $11 f64.sub - local.get $12 + local.get $11 f64.add - local.tee $9 + local.tee $8 f64.sub - local.set $6 + local.set $5 + local.get $0 local.get $0 local.get $0 - f64.mul - local.set $5 - local.get $1 - local.get $1 - local.get $1 f64.const 134217729 f64.mul - local.tee $0 + local.tee $11 f64.sub - local.get $0 + local.get $11 f64.add - local.tee $8 + local.tee $7 f64.sub - local.set $12 - local.get $10 + local.set $11 + local.get $9 local.get $8 local.get $8 f64.mul local.get $1 local.get $1 f64.mul - local.tee $0 + local.tee $1 f64.sub f64.const 2 local.get $8 f64.mul - local.get $12 + local.get $5 f64.add - local.get $12 + local.get $5 f64.mul f64.add - local.get $9 - local.get $9 + local.get $7 + local.get $7 f64.mul - local.get $5 + local.get $0 + local.get $0 + f64.mul + local.tee $0 f64.sub f64.const 2 - local.get $9 + local.get $7 f64.mul - local.get $6 + local.get $11 f64.add - local.get $6 + local.get $11 f64.mul f64.add f64.add - local.get $0 + local.get $1 f64.add - local.get $5 + local.get $0 f64.add f64.sqrt f64.mul @@ -5835,16 +5829,19 @@ ) (func $~lib/math/NativeMath.log10 (param $0 f64) (result f64) (local $1 i32) - (local $2 f64) + (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i64) + (local $5 f64) (local $6 f64) (local $7 f64) (local $8 i32) + (local $9 f64) + (local $10 f64) + (local $11 f64) local.get $0 i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5859,7 +5856,7 @@ i32.shr_u end if - local.get $5 + local.get $2 i64.const 1 i64.shl i64.eqz @@ -5888,7 +5885,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -5901,7 +5898,7 @@ local.get $0 return else - local.get $5 + local.get $2 i64.const 32 i64.shl i64.eqz @@ -5916,8 +5913,7 @@ end end end - f64.const 0.5 - local.get $5 + local.get $2 i64.const 4294967295 i64.and local.get $1 @@ -5936,43 +5932,64 @@ f64.const 1 f64.sub local.tee $0 - f64.mul - local.get $0 - f64.mul - local.set $3 - local.get $0 f64.const 2 local.get $0 f64.add f64.div - local.tee $6 - local.get $6 - f64.mul local.tee $4 local.get $4 f64.mul - local.set $2 + local.set $3 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $9 + f64.const 0.30102999566361177 + f64.mul + local.tee $10 local.get $0 + f64.const 0.5 local.get $0 - local.get $3 + f64.mul + local.get $0 + f64.mul + local.tee $5 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $6 + f64.const 0.4342944818781689 + f64.mul + local.tee $11 + f64.add + local.set $7 + local.get $9 + f64.const 3.694239077158931e-13 + f64.mul + local.get $0 + local.get $6 f64.sub - local.get $3 + local.get $5 f64.sub - local.get $6 - local.get $3 local.get $4 + local.get $5 + local.get $3 f64.const 0.6666666666666735 - local.get $2 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.const 0.2857142874366239 - local.get $2 + local.get $0 f64.const 0.1818357216161805 - local.get $2 + local.get $0 f64.const 0.14798198605116586 f64.mul f64.add @@ -5981,11 +5998,11 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $0 f64.const 0.3999999999940942 - local.get $2 + local.get $0 f64.const 0.22222198432149784 - local.get $2 + local.get $0 f64.const 0.15313837699209373 f64.mul f64.add @@ -5996,30 +6013,8 @@ f64.add f64.mul f64.add - local.set $0 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $3 - f64.const 0.30102999566361177 - f64.mul - local.tee $6 - local.get $7 - f64.const 0.4342944818781689 - f64.mul - local.tee $2 - f64.add - local.set $4 - local.get $3 - f64.const 3.694239077158931e-13 - f64.mul - local.get $0 - local.get $7 + local.tee $0 + local.get $6 f64.add f64.const 2.5082946711645275e-11 f64.mul @@ -6028,13 +6023,13 @@ f64.const 0.4342944818781689 f64.mul f64.add - local.get $6 - local.get $4 + local.get $10 + local.get $7 f64.sub - local.get $2 + local.get $11 f64.add f64.add - local.get $4 + local.get $7 f64.add ) (func $std/math/test_log10 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6058,8 +6053,8 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 f32) - (local $6 i32) + (local $5 i32) + (local $6 f32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6097,7 +6092,7 @@ return end i32.const -25 - local.set $6 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -6136,19 +6131,27 @@ local.get $0 f32.add f32.div - local.tee $2 - local.get $2 - f32.mul - local.tee $4 - local.get $4 - f32.mul - local.set $3 - local.get $0 - local.get $0 - f32.const 0.5 - local.get $0 - f32.mul - local.get $0 + local.tee $3 + local.get $3 + f32.mul + local.set $2 + local.get $5 + local.get $1 + i32.const 23 + i32.shr_u + i32.const 127 + i32.sub + i32.add + f32.convert_i32_s + local.tee $6 + f32.const 7.903415166765626e-07 + f32.mul + local.get $0 + local.get $0 + f32.const 0.5 + local.get $0 + f32.mul + local.get $0 f32.mul local.tee $0 f32.sub @@ -6156,22 +6159,25 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $5 + local.tee $4 f32.sub local.get $0 f32.sub - local.get $2 + local.get $3 local.get $0 - local.get $4 + local.get $2 f32.const 0.6666666269302368 - local.get $3 + local.get $2 + local.get $2 + f32.mul + local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $3 + local.get $0 f32.const 0.40000972151756287 - local.get $3 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -6180,20 +6186,8 @@ f32.add f32.mul f32.add - local.set $0 - local.get $6 - local.get $1 - i32.const 23 - i32.shr_u - i32.const 127 - i32.sub - i32.add - f32.convert_i32_s - local.tee $2 - f32.const 7.903415166765626e-07 - f32.mul - local.get $0 - local.get $5 + local.tee $0 + local.get $4 f32.add f32.const -3.168997136526741e-05 f32.mul @@ -6202,11 +6196,11 @@ f32.const 0.434326171875 f32.mul f32.add - local.get $5 + local.get $4 f32.const 0.434326171875 f32.mul f32.add - local.get $2 + local.get $6 f32.const 0.3010292053222656 f32.mul f32.add @@ -6243,16 +6237,18 @@ ) (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64) (local $1 i32) - (local $2 f64) + (local $2 i64) (local $3 f64) (local $4 f64) - (local $5 i64) + (local $5 f64) (local $6 f64) (local $7 f64) (local $8 i32) + (local $9 f64) + (local $10 f64) local.get $0 i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6267,7 +6263,7 @@ i32.shr_u end if - local.get $5 + local.get $2 i64.const 1 i64.shl i64.eqz @@ -6296,7 +6292,7 @@ f64.const 18014398509481984 f64.mul i64.reinterpret_f64 - local.tee $5 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 @@ -6309,7 +6305,7 @@ local.get $0 return else - local.get $5 + local.get $2 i64.const 32 i64.shl i64.eqz @@ -6324,8 +6320,7 @@ end end end - f64.const 0.5 - local.get $5 + local.get $2 i64.const 4294967295 i64.and local.get $1 @@ -6344,11 +6339,6 @@ f64.const 1 f64.sub local.tee $0 - f64.mul - local.get $0 - f64.mul - local.set $3 - local.get $0 f64.const 2 local.get $0 f64.add @@ -6356,31 +6346,51 @@ local.tee $4 local.get $4 f64.mul - local.tee $6 - local.get $6 - f64.mul - local.set $2 + local.set $3 + local.get $8 + local.get $1 + i32.const 20 + i32.shr_u + i32.const 1023 + i32.sub + i32.add + f64.convert_i32_s + local.tee $9 local.get $0 + f64.const 0.5 local.get $0 - local.get $3 + f64.mul + local.get $0 + f64.mul + local.tee $5 f64.sub i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $7 + local.tee $6 + f64.const 1.4426950407214463 + f64.mul + local.tee $10 + f64.add + local.set $7 + local.get $0 + local.get $6 f64.sub - local.get $3 + local.get $5 f64.sub local.get $4 + local.get $5 local.get $3 - local.get $6 f64.const 0.6666666666666735 - local.get $2 + local.get $3 + local.get $3 + f64.mul + local.tee $0 f64.const 0.2857142874366239 - local.get $2 + local.get $0 f64.const 0.1818357216161805 - local.get $2 + local.get $0 f64.const 0.14798198605116586 f64.mul f64.add @@ -6389,11 +6399,11 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $0 f64.const 0.3999999999940942 - local.get $2 + local.get $0 f64.const 0.22222198432149784 - local.get $2 + local.get $0 f64.const 0.15313837699209373 f64.mul f64.add @@ -6404,24 +6414,8 @@ f64.add f64.mul f64.add - local.set $0 - local.get $8 - local.get $1 - i32.const 20 - i32.shr_u - i32.const 1023 - i32.sub - i32.add - f64.convert_i32_s - local.tee $3 - local.get $7 - f64.const 1.4426950407214463 - f64.mul - local.tee $2 - f64.add - local.set $4 - local.get $0 - local.get $7 + local.tee $0 + local.get $6 f64.add f64.const 1.6751713164886512e-10 f64.mul @@ -6429,13 +6423,13 @@ f64.const 1.4426950407214463 f64.mul f64.add - local.get $3 - local.get $4 + local.get $9 + local.get $7 f64.sub - local.get $2 + local.get $10 f64.add f64.add - local.get $4 + local.get $7 f64.add ) (func $std/math/test_log2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -6459,8 +6453,7 @@ (local $2 f32) (local $3 f32) (local $4 f32) - (local $5 f32) - (local $6 i32) + (local $5 i32) local.get $0 i32.reinterpret_f32 local.tee $1 @@ -6498,7 +6491,7 @@ return end i32.const -25 - local.set $6 + local.set $5 local.get $0 f32.const 33554432 f32.mul @@ -6540,9 +6533,6 @@ local.tee $3 local.get $3 f32.mul - local.tee $4 - local.get $4 - f32.mul local.set $2 local.get $0 local.get $0 @@ -6557,22 +6547,25 @@ i32.const -4096 i32.and f32.reinterpret_i32 - local.tee $5 + local.tee $4 f32.sub local.get $0 f32.sub local.get $3 local.get $0 - local.get $4 + local.get $2 f32.const 0.6666666269302368 local.get $2 + local.get $2 + f32.mul + local.tee $0 f32.const 0.2849878668785095 f32.mul f32.add f32.mul - local.get $2 + local.get $0 f32.const 0.40000972151756287 - local.get $2 + local.get $0 f32.const 0.24279078841209412 f32.mul f32.add @@ -6582,7 +6575,7 @@ f32.mul f32.add local.tee $0 - local.get $5 + local.get $4 f32.add f32.const -1.7605285393074155e-04 f32.mul @@ -6590,11 +6583,11 @@ f32.const 1.44287109375 f32.mul f32.add - local.get $5 + local.get $4 f32.const 1.44287109375 f32.mul f32.add - local.get $6 + local.get $5 local.get $1 i32.const 23 i32.shr_u @@ -6811,7 +6804,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i64.ge_u @@ -6826,36 +6818,39 @@ local.set $2 end local.get $2 + local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 - i64.sub - local.set $4 - local.get $7 - i64.const 63 - i64.shl - local.get $2 - local.get $3 - i64.shl - local.tee $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 i64.shl - i64.or - local.get $2 - i64.const 0 + local.set $2 local.get $4 + local.get $3 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $4 + local.tee $4 i64.const 0 i64.gt_s - select + if (result i64) + local.get $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + else + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + end + local.get $7 + i64.const 63 + i64.shl i64.or f64.reinterpret_i64 return @@ -7023,7 +7018,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i32.ge_u @@ -7038,66 +7032,70 @@ local.set $2 end local.get $2 + local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 - i32.sub - local.set $4 - local.get $2 - local.get $3 - i32.shl - local.tee $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 i32.shl - i32.or - local.get $2 - i32.const 1 + local.set $2 local.get $4 + local.get $3 i32.sub - i32.shr_u - local.get $4 + local.tee $4 i32.const 0 i32.gt_s - select - local.get $7 - i32.or - f32.reinterpret_i32 - return - end - f32.const 0 - 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 + if (result i32) + local.get $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + else + local.get $2 + i32.const 1 + local.get $4 + i32.sub + i32.shr_u + end + local.get $7 + i32.or + f32.reinterpret_i32 + return + end + f32.const 0 + 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 i32) + (local $3 f64) (local $4 i32) (local $5 i32) - (local $6 f64) - (local $7 i32) + (local $6 i32) + (local $7 f64) (local $8 i32) (local $9 i32) (local $10 f64) - (local $11 f64) + (local $11 i32) (local $12 i32) (local $13 f64) - (local $14 f64) - (local $15 i64) + (local $14 i64) + (local $15 f64) (local $16 i32) (local $17 f64) (local $18 i32) + (local $19 f64) local.get $1 f64.abs f64.const 2 @@ -7152,31 +7150,30 @@ end local.get $0 i64.reinterpret_f64 - local.tee $15 + local.tee $14 + i32.wrap_i64 + local.set $18 + local.get $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $16 - local.get $15 - i32.wrap_i64 - local.set $5 - local.get $16 + local.tee $16 i32.const 2147483647 i32.and local.set $4 local.get $1 i64.reinterpret_f64 - local.tee $15 + local.tee $14 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $8 i32.const 2147483647 i32.and - local.tee $8 - local.get $15 + local.tee $9 + local.get $14 i32.wrap_i64 - local.tee $18 + local.tee $6 i32.or i32.eqz if @@ -7184,18 +7181,18 @@ return end i32.const 1 - local.get $18 + local.get $6 i32.const 0 - local.get $8 + local.get $9 i32.const 2146435072 i32.eq select i32.const 1 - local.get $8 + local.get $9 i32.const 2146435072 i32.gt_s i32.const 1 - local.get $5 + local.get $18 i32.const 0 local.get $4 i32.const 2146435072 @@ -7217,47 +7214,47 @@ i32.const 0 i32.lt_s if (result i32) - local.get $8 + local.get $9 i32.const 1128267776 i32.ge_s if (result i32) i32.const 2 else - local.get $8 + local.get $9 i32.const 1072693248 i32.ge_s if (result i32) i32.const 52 i32.const 20 - local.get $8 + local.get $9 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $12 + local.tee $11 i32.const 20 i32.gt_s - local.tee $3 + local.tee $5 select - local.get $12 + local.get $11 i32.sub - local.set $9 + local.set $12 i32.const 2 - local.get $18 - local.get $8 - local.get $3 - select - local.tee $12 + local.get $6 local.get $9 + local.get $5 + select + local.tee $5 + local.get $12 i32.shr_u - local.tee $3 + local.tee $11 i32.const 1 i32.and i32.sub i32.const 0 + local.get $5 + local.get $11 local.get $12 - local.get $3 - local.get $9 i32.shl i32.eq select @@ -7268,15 +7265,15 @@ else i32.const 0 end - local.set $3 - local.get $18 + local.set $5 + local.get $6 i32.eqz if - local.get $8 + local.get $9 i32.const 2146435072 i32.eq if - local.get $5 + local.get $18 local.get $4 i32.const 1072693248 i32.sub @@ -7288,7 +7285,7 @@ if f64.const 0 local.get $1 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7297,7 +7294,7 @@ f64.const 0 local.get $1 f64.neg - local.get $7 + local.get $8 i32.const 0 i32.ge_s select @@ -7310,11 +7307,11 @@ end unreachable end - local.get $8 + local.get $9 i32.const 1072693248 i32.eq if - local.get $7 + local.get $8 i32.const 0 i32.ge_s if @@ -7326,7 +7323,7 @@ f64.div return end - local.get $7 + local.get $8 i32.const 1073741824 i32.eq if @@ -7335,7 +7332,7 @@ f64.mul return end - local.get $7 + local.get $8 i32.const 1071644672 i32.eq if @@ -7351,8 +7348,8 @@ end local.get $0 f64.abs - local.set $2 - local.get $5 + local.set $3 + local.get $18 i32.eqz if i32.const 1 @@ -7368,41 +7365,41 @@ select if f64.const 1 - local.get $2 + local.get $3 f64.div - local.get $2 - local.get $7 + local.get $3 + local.get $8 i32.const 0 i32.lt_s select - local.set $2 + local.set $3 local.get $16 i32.const 0 i32.lt_s if (result f64) - local.get $3 + local.get $5 local.get $4 i32.const 1072693248 i32.sub i32.or if (result f64) - local.get $2 + local.get $3 f64.neg - local.get $2 local.get $3 + local.get $5 i32.const 1 i32.eq select else - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.sub local.tee $0 local.get $0 f64.div end else - local.get $2 + local.get $3 end return end @@ -7411,7 +7408,7 @@ i32.const 0 i32.lt_s if (result f64) - local.get $3 + local.get $5 i32.eqz if local.get $0 @@ -7424,7 +7421,7 @@ end f64.const -1 f64.const 1 - local.get $3 + local.get $5 i32.const 1 i32.eq select @@ -7432,11 +7429,11 @@ f64.const 1 end local.set $10 - local.get $8 + local.get $9 i32.const 1105199104 i32.gt_s if (result f64) - local.get $8 + local.get $9 i32.const 1139802112 i32.gt_s if @@ -7446,7 +7443,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7458,7 +7455,7 @@ if f64.const inf f64.const 0 - local.get $7 + local.get $8 i32.const 0 i32.gt_s select @@ -7479,7 +7476,7 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.lt_s select @@ -7499,19 +7496,19 @@ f64.mul f64.const 1e-300 f64.mul - local.get $7 + local.get $8 i32.const 0 i32.gt_s select return end f64.const 1.4426950216293335 - local.get $2 + local.get $3 f64.const 1 f64.sub local.tee $0 f64.mul - local.tee $2 + local.tee $3 local.get $0 f64.const 1.9259629911266175e-08 f64.mul @@ -7537,10 +7534,10 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $11 + local.set $7 local.get $0 - local.get $11 - local.get $2 + local.get $7 + local.get $3 f64.sub f64.sub else @@ -7548,10 +7545,10 @@ i32.const 1048576 i32.lt_s if (result i32) - local.get $2 + local.get $3 f64.const 9007199254740992 f64.mul - local.tee $2 + local.tee $3 i64.reinterpret_f64 i64.const 32 i64.shr_u @@ -7567,30 +7564,30 @@ i32.const 1023 i32.sub i32.add - local.set $5 + local.set $6 local.get $4 i32.const 1048575 i32.and - local.tee $3 + local.tee $5 i32.const 1072693248 i32.or local.set $4 - local.get $3 + local.get $5 i32.const 235662 i32.le_s if (result i32) i32.const 0 else - local.get $3 + local.get $5 i32.const 767610 i32.lt_s if (result i32) i32.const 1 else - local.get $5 + local.get $6 i32.const 1 i32.add - local.set $5 + local.set $6 local.get $4 i32.const -1048576 i32.add @@ -7598,8 +7595,9 @@ i32.const 0 end end - local.set $3 - local.get $2 + local.set $5 + f64.const 0.9617967009544373 + local.get $3 i64.reinterpret_f64 i64.const 4294967295 i64.and @@ -7609,30 +7607,64 @@ i64.shl i64.or f64.reinterpret_i64 - local.tee $11 + local.tee $7 f64.const 1.5 f64.const 1 - local.get $3 + local.get $5 select - local.tee $13 + local.tee $2 f64.sub - local.tee $6 + local.tee $3 f64.const 1 - local.get $11 - local.get $13 + local.get $7 + local.get $2 f64.add f64.div - local.tee $2 + local.tee $0 f64.mul local.tee $17 i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.set $14 - local.get $2 - local.get $6 - local.get $14 + local.tee $15 + f64.const 3 + local.get $15 + local.get $15 + f64.mul + local.tee $19 + f64.add + local.get $17 + local.get $17 + f64.mul + local.tee $13 + local.get $13 + f64.mul + f64.const 0.5999999999999946 + local.get $13 + f64.const 0.4285714285785502 + local.get $13 + f64.const 0.33333332981837743 + local.get $13 + f64.const 0.272728123808534 + local.get $13 + f64.const 0.23066074577556175 + local.get $13 + f64.const 0.20697501780033842 + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + f64.add + f64.mul + local.get $0 + local.get $3 + local.get $15 local.get $4 i32.const 1 i32.shr_s @@ -7640,7 +7672,7 @@ i32.or i32.const 524288 i32.add - local.get $3 + local.get $5 i32.const 18 i32.shl i32.add @@ -7651,76 +7683,38 @@ local.tee $0 f64.mul f64.sub - local.get $14 - local.get $11 + local.get $15 + local.get $7 local.get $0 - local.get $13 + local.get $2 f64.sub f64.sub f64.mul f64.sub f64.mul - local.set $13 - local.get $17 - local.get $17 - f64.mul - local.tee $0 - local.get $0 - f64.mul - f64.const 0.5999999999999946 - local.get $0 - f64.const 0.4285714285785502 - local.get $0 - f64.const 0.33333332981837743 - local.get $0 - f64.const 0.272728123808534 - local.get $0 - f64.const 0.23066074577556175 - local.get $0 - f64.const 0.20697501780033842 - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - f64.add - f64.mul - local.get $13 - local.get $14 + local.tee $2 + local.get $15 local.get $17 f64.add f64.mul f64.add - local.set $6 - f64.const 0.9617967009544373 - local.get $14 - f64.const 3 - local.get $14 - local.get $14 - f64.mul local.tee $0 f64.add - local.get $6 - f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $11 + local.tee $7 f64.mul - local.tee $2 - local.get $13 - local.get $11 + local.tee $3 + local.get $2 + local.get $7 f64.mul - local.get $6 - local.get $11 + local.get $0 + local.get $7 f64.const 3 f64.sub - local.get $0 + local.get $19 f64.sub f64.sub local.get $17 @@ -7732,15 +7726,15 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $6 + local.tee $2 f64.mul - local.set $13 + local.tee $19 f64.const -7.028461650952758e-09 - local.get $6 + local.get $2 f64.mul local.get $0 - local.get $6 local.get $2 + local.get $3 f64.sub f64.sub f64.const 0.9617966939259756 @@ -7748,37 +7742,37 @@ f64.add f64.const 1.350039202129749e-08 f64.const 0 - local.get $3 + local.get $5 select f64.add - local.tee $6 - local.get $13 - local.get $6 + local.tee $2 f64.add f64.const 0.5849624872207642 f64.const 0 - local.get $3 + local.get $5 select - local.tee $0 + local.tee $3 f64.add - local.get $5 + local.get $6 f64.convert_i32_s - local.tee $2 + local.tee $0 f64.add i64.reinterpret_f64 i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $11 + local.set $7 local.get $2 - f64.sub + local.get $7 local.get $0 f64.sub - local.get $13 + local.get $3 + f64.sub + local.get $19 f64.sub f64.sub end - local.set $2 + local.set $3 local.get $1 local.get $1 i64.reinterpret_f64 @@ -7787,133 +7781,134 @@ f64.reinterpret_i64 local.tee $0 f64.sub - local.get $11 + local.get $7 f64.mul local.get $1 - local.get $2 + local.get $3 f64.mul f64.add - local.tee $2 + local.tee $1 local.get $0 - local.get $11 + local.get $7 f64.mul - local.tee $6 + local.tee $2 f64.add local.tee $0 i64.reinterpret_f64 - local.tee $15 - i64.const 32 - i64.shr_u + local.tee $14 i32.wrap_i64 - local.set $9 - local.get $15 - i32.wrap_i64 - local.set $3 + local.set $5 block $folding-inner1 block $folding-inner0 - local.get $9 + local.get $14 + i64.const 32 + i64.shr_u + i32.wrap_i64 + local.tee $12 i32.const 1083179008 i32.ge_s if - local.get $3 - local.get $9 + local.get $5 + local.get $12 i32.const 1083179008 i32.sub i32.or - local.get $2 + local.get $1 f64.const 8.008566259537294e-17 f64.add local.get $0 - local.get $6 + local.get $2 f64.sub f64.gt i32.or br_if $folding-inner0 else - local.get $9 + local.get $12 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $3 - local.get $9 + local.get $5 + local.get $12 i32.const -1064252416 i32.sub i32.or - local.get $2 + local.get $1 local.get $0 - local.get $6 + local.get $2 f64.sub f64.le i32.or select br_if $folding-inner1 end - local.get $9 + local.get $12 i32.const 2147483647 i32.and - local.tee $12 + local.tee $11 i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.set $3 - local.get $12 + local.set $5 + i32.const 0 + local.set $6 + local.get $1 + local.get $11 i32.const 1071644672 i32.gt_s - if (result i32) - local.get $6 + if i32.const 1048575 - local.get $9 + local.get $12 i32.const 1048576 - local.get $3 + local.get $5 i32.const 1 i32.add i32.shr_s i32.add - local.tee $12 + local.tee $11 i32.const 2147483647 i32.and i32.const 20 i32.shr_s i32.const 1023 i32.sub - local.tee $3 + local.tee $5 i32.shr_s i32.const -1 i32.xor - local.get $12 + local.get $11 i32.and i64.extend_i32_s i64.const 32 i64.shl f64.reinterpret_i64 - f64.sub - local.set $6 + local.set $0 i32.const 0 - local.get $12 + local.get $11 i32.const 1048575 i32.and i32.const 1048576 i32.or i32.const 20 - local.get $3 + local.get $5 i32.sub i32.shr_s - local.tee $5 + local.tee $6 i32.sub - local.get $5 - local.get $9 + local.get $6 + local.get $12 i32.const 0 i32.lt_s select - else - i32.const 0 + local.set $6 + local.get $2 + local.get $0 + f64.sub + local.set $2 end - local.set $5 local.get $2 - local.get $6 f64.add i64.reinterpret_f64 i64.const -4294967296 @@ -7922,10 +7917,10 @@ local.tee $0 f64.const 0.6931471824645996 f64.mul - local.tee $1 - local.get $2 + local.tee $3 + local.get $1 local.get $0 - local.get $6 + local.get $2 f64.sub f64.sub f64.const 0.6931471805599453 @@ -7934,23 +7929,17 @@ f64.const -1.904654299957768e-09 f64.mul f64.add - local.tee $0 + local.tee $1 f64.add - local.set $2 - local.get $0 + local.tee $2 local.get $2 - local.get $1 - f64.sub - f64.sub - local.set $1 + f64.mul + local.set $0 local.get $10 f64.const 1 local.get $2 local.get $2 - local.get $2 - local.get $2 - f64.mul - local.tee $0 + local.get $0 f64.const 0.16666666666666602 local.get $0 f64.const -2.7777777777015593e-03 @@ -7978,7 +7967,12 @@ f64.div local.get $1 local.get $2 - local.get $1 + local.get $3 + f64.sub + f64.sub + local.tee $0 + local.get $2 + local.get $0 f64.mul f64.add f64.sub @@ -7990,25 +7984,25 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.get $5 + local.get $6 i32.const 20 i32.shl i32.add - local.tee $3 + local.tee $5 i32.const 20 i32.shr_s i32.const 0 i32.le_s if (result f64) local.get $0 - local.get $5 + local.get $6 call $~lib/math/NativeMath.scalbn else local.get $0 i64.reinterpret_f64 i64.const 4294967295 i64.and - local.get $3 + local.get $5 i64.extend_i32_s i64.const 32 i64.shl @@ -8133,23 +8127,24 @@ local.get $0 i32.reinterpret_f32 local.tee $4 - i32.const 31 - i32.shr_u - local.set $5 - local.get $4 i32.const 2147483647 i32.and - local.set $4 - local.get $1 - f32.nearest - local.get $1 - f32.eq - i32.const 0 - local.get $5 - select + local.set $6 + local.get $4 + i32.const 31 + i32.shr_u + local.tee $4 + if (result i32) + local.get $1 + f32.nearest + local.get $1 + f32.eq + else + i32.const 0 + end if i32.const 0 - local.set $5 + local.set $4 local.get $1 f32.const 0.5 f32.mul @@ -8166,15 +8161,15 @@ end local.get $1 i32.reinterpret_f32 - local.set $6 - local.get $4 + 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 $5 - local.get $6 i32.const 2147483647 i32.and i32.const 2139095040 @@ -8182,20 +8177,20 @@ i32.or select else - local.get $4 + local.get $6 if (result i32) - local.get $4 + 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 else - local.get $5 + local.get $4 if (result i32) i32.const 2143289344 else @@ -8318,7 +8313,7 @@ else i32.const 2139095040 i32.const 0 - local.get $6 + local.get $5 i32.const 31 i32.shr_u select @@ -9001,76 +8996,73 @@ ) (func $~lib/math/NativeMath.sin (param $0 f64) (result f64) (local $1 f64) - (local $2 f64) - (local $3 i64) + (local $2 i64) + (local $3 f64) (local $4 f64) - (local $5 f64) + (local $5 i32) (local $6 i32) (local $7 f64) - (local $8 i32) local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 31 i32.shr_u - local.set $8 - local.get $6 + local.set $6 + local.get $5 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1072243195 i32.le_u if - local.get $6 + local.get $5 i32.const 1045430272 i32.lt_u if local.get $0 return end - f64.const 0.00833333333332249 + local.get $0 local.get $0 local.get $0 f64.mul - local.tee $4 + 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 $4 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $4 - local.get $4 - local.get $4 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $4 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $2 - local.get $0 - local.get $4 - local.get $0 - f64.mul - f64.const -0.16666666666666632 - local.get $4 - local.get $2 f64.mul f64.add f64.mul f64.add return end - local.get $6 + local.get $5 i32.const 2146435072 i32.ge_u if @@ -9080,34 +9072,34 @@ return end block $~lib/math/rempio2|inlined.1 (result i32) - local.get $3 + local.get $2 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1094263291 i32.lt_u if - local.get $6 + local.get $5 i32.const 20 i32.shr_u - local.tee $8 + local.tee $6 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $4 + local.tee $3 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $4 + local.get $3 f64.const 6.077100506506192e-11 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9122,25 +9114,25 @@ i32.const 16 i32.gt_u if - local.get $4 + local.get $3 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $4 + local.get $3 f64.const 6.077100506303966e-11 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $2 + local.get $4 f64.sub f64.sub - local.set $2 - local.get $8 + local.set $4 + local.get $6 local.get $0 - local.get $2 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -9155,24 +9147,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $4 + local.get $3 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $4 + local.get $3 f64.const 2.0222662487111665e-21 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $2 + local.get $4 f64.sub f64.sub - local.set $2 + local.set $4 local.get $0 - local.get $2 + local.get $4 f64.sub else local.get $1 @@ -9184,69 +9176,68 @@ local.get $0 local.get $1 f64.sub - local.get $2 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 - local.get $4 + local.get $3 i32.trunc_f64_s br $~lib/math/rempio2|inlined.1 end i32.const 0 - local.get $3 + local.get $2 call $~lib/math/pio2_large_quot - local.tee $6 + local.tee $5 i32.sub + local.get $5 local.get $6 - local.get $8 select end - local.set $8 + local.set $6 global.get $~lib/math/rempio2_y0 - local.set $2 + local.set $3 global.get $~lib/math/rempio2_y1 - local.set $1 - local.get $8 + local.set $4 + local.get $6 i32.const 1 i32.and if (result f64) - local.get $2 - local.get $2 - f64.mul - local.tee $7 - local.get $7 - f64.mul - local.set $5 f64.const 1 f64.const 0.5 - local.get $7 + local.get $3 + local.get $3 f64.mul - local.tee $4 - f64.sub local.tee $0 + f64.mul + local.tee $1 + f64.sub + local.tee $7 f64.const 1 - local.get $0 + local.get $7 f64.sub - local.get $4 + local.get $1 f64.sub - local.get $7 - local.get $7 + local.get $0 + local.get $0 f64.const 0.0416666666666666 - local.get $7 + local.get $0 f64.const -0.001388888888887411 - local.get $7 + local.get $0 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $5 - local.get $5 + local.get $0 + local.get $0 + f64.mul + local.tee $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $7 + local.get $0 f64.const 2.087572321298175e-09 - local.get $7 + local.get $0 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -9255,55 +9246,53 @@ f64.mul f64.add f64.mul - local.get $2 - local.get $1 + local.get $3 + local.get $4 f64.mul f64.sub f64.add f64.add else - f64.const 0.00833333333332249 - local.get $2 - local.get $2 + local.get $3 + local.get $3 f64.mul - local.tee $5 + 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 $5 + local.get $0 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $5 - local.get $5 - local.get $5 + local.get $0 + local.get $0 + local.get $0 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $5 + local.get $0 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $4 - local.get $2 - local.tee $0 - local.get $5 - f64.const 0.5 - local.get $1 f64.mul - local.get $5 - local.get $0 + f64.sub f64.mul - local.tee $2 local.get $4 - f64.mul f64.sub - f64.mul local.get $1 - f64.sub - local.get $2 f64.const -0.16666666666666632 f64.mul f64.sub @@ -9313,7 +9302,7 @@ local.get $0 f64.neg local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.and select @@ -9342,14 +9331,17 @@ (local $5 i64) (local $6 f64) (local $7 i64) - (local $8 i32) + (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 $8 + local.set $11 local.get $1 i32.const 2147483647 i32.and @@ -9369,26 +9361,26 @@ local.tee $4 local.get $4 f64.mul - local.tee $3 + local.tee $6 local.get $4 f64.mul - local.set $6 + local.set $3 local.get $4 - local.get $6 - f64.const -0.16666666641626524 local.get $3 + f64.const -0.16666666641626524 + local.get $6 f64.const 0.008333329385889463 f64.mul f64.add f64.mul f64.add - local.get $6 - local.get $3 local.get $3 + local.get $6 + local.get $6 f64.mul f64.mul f64.const -1.9839334836096632e-04 - local.get $3 + local.get $6 f64.const 2.718311493989822e-06 f64.mul f64.add @@ -9437,51 +9429,32 @@ i32.const 152 i32.sub local.tee $1 - i32.const 63 - i32.and - i64.extend_i32_s - local.set $5 - 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 $1 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $1 + local.tee $10 i64.load - local.get $5 - i64.shl - local.get $1 + local.set $7 + local.get $10 i64.load offset=8 - local.tee $7 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + 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 $7 + local.get $8 local.get $5 i64.const 32 i64.sub i64.shl - local.get $1 + local.get $10 i64.load offset=16 i64.const 96 local.get $5 @@ -9489,29 +9462,52 @@ i64.shr_u i64.or else - local.get $7 + 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 $5 + local.tee $7 i64.const 2 i64.shl - local.tee $7 + local.tee $9 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $7 i64.const 62 i64.shr_u - local.get $7 + local.get $9 i64.const 63 i64.shr_u i64.add @@ -9519,7 +9515,7 @@ local.tee $1 i32.sub local.get $1 - local.get $8 + local.get $11 select end local.set $1 @@ -9532,24 +9528,24 @@ local.get $3 local.get $3 f64.mul - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.mul - local.set $4 + local.set $3 f64.const 1 - local.get $3 + local.get $4 f64.const -0.499999997251031 f64.mul f64.add - local.get $4 + local.get $3 f64.const 0.04166662332373906 f64.mul f64.add - local.get $4 local.get $3 + local.get $4 f64.mul f64.const -0.001388676377460993 - local.get $3 + local.get $4 f64.const 2.439044879627741e-05 f64.mul f64.add @@ -9564,7 +9560,7 @@ local.tee $4 local.get $3 f64.mul - local.tee $6 + local.tee $3 f64.const -0.16666666641626524 local.get $4 f64.const 0.008333329385889463 @@ -9572,7 +9568,7 @@ f64.add f64.mul f64.add - local.get $6 + local.get $3 local.get $4 local.get $4 f64.mul @@ -9841,18 +9837,18 @@ local.get $0 f64.mul local.tee $4 - local.get $4 + local.get $0 f64.mul - local.set $3 + local.set $5 local.get $0 local.get $1 local.get $4 + local.get $5 + f64.const 0.13333333333320124 + local.get $4 local.get $4 - local.get $0 f64.mul - local.tee $5 - f64.const 0.13333333333320124 - local.get $3 + local.tee $3 f64.const 0.021869488294859542 local.get $3 f64.const 3.5920791075913124e-03 @@ -9945,12 +9941,6 @@ local.get $1 return end - local.get $1 - i64.reinterpret_f64 - i64.const -4294967296 - i64.and - f64.reinterpret_i64 - local.set $4 f64.const -1 local.get $1 f64.div @@ -9959,16 +9949,21 @@ i64.const -4294967296 i64.and f64.reinterpret_i64 - local.tee $1 + local.tee $4 local.get $5 f64.const 1 - local.get $1 local.get $4 + local.get $1 + i64.reinterpret_f64 + i64.const -4294967296 + i64.and + f64.reinterpret_i64 + local.tee $1 f64.mul f64.add - local.get $1 - local.get $3 local.get $4 + local.get $3 + local.get $1 local.get $0 f64.sub f64.sub @@ -10177,17 +10172,20 @@ (local $2 i32) (local $3 i32) (local $4 f64) - (local $5 i64) - (local $6 f64) + (local $5 f64) + (local $6 i64) (local $7 i64) - (local $8 i32) + (local $8 i64) (local $9 i64) + (local $10 i32) + (local $11 i32) + (local $12 i64) local.get $0 i32.reinterpret_f32 local.tee $2 i32.const 31 i32.shr_u - local.set $8 + local.set $11 local.get $2 i32.const 2147483647 i32.and @@ -10204,36 +10202,36 @@ end local.get $0 f64.promote_f32 - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.mul - local.tee $1 - local.get $1 + local.tee $4 + local.get $5 f64.mul - local.set $6 - local.get $4 + local.set $1 + local.get $5 local.get $1 - local.get $4 - f64.mul - local.tee $4 f64.const 0.3333313950307914 - local.get $1 + local.get $4 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add + local.get $1 local.get $4 - local.get $6 + local.get $4 + f64.mul + local.tee $1 f64.mul f64.const 0.05338123784456704 - local.get $1 + local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $6 - f64.const 0.002974357433599673 local.get $1 + f64.const 0.002974357433599673 + local.get $4 f64.const 0.009465647849436732 f64.mul f64.add @@ -10284,81 +10282,85 @@ i32.const 152 i32.sub local.tee $2 - i32.const 63 - i32.and - i64.extend_i32_s - local.set $5 - f64.const 8.515303950216386e-20 - local.get $0 - f64.promote_f32 - f64.copysign - local.get $3 - i32.const 8388607 - i32.and - i32.const 8388608 - i32.or - i64.extend_i32_s - local.tee $9 - local.get $2 i32.const 6 i32.shr_s i32.const 3 i32.shl i32.const 1256 i32.add - local.tee $2 + local.tee $10 i64.load - local.get $5 - i64.shl - local.get $2 + local.set $7 + local.get $10 i64.load offset=8 - local.tee $7 - i64.const 64 - local.get $5 - i64.sub - i64.shr_u - i64.or - i64.mul - local.get $5 + local.set $8 + local.get $2 + i32.const 63 + i32.and + i64.extend_i32_s + local.tee $6 i64.const 32 i64.gt_u if (result i64) - local.get $7 - local.get $5 + local.get $8 + local.get $6 i64.const 32 i64.sub i64.shl - local.get $2 + local.get $10 i64.load offset=16 i64.const 96 - local.get $5 + local.get $6 i64.sub i64.shr_u i64.or else - local.get $7 + local.get $8 i64.const 32 - local.get $5 + 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 $3 + 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 $5 + local.tee $7 i64.const 2 i64.shl - local.tee $7 + local.tee $9 f64.convert_i64_s f64.mul global.set $~lib/math/rempio2f_y i32.const 0 - local.get $5 + local.get $7 i64.const 62 i64.shr_u - local.get $7 + local.get $9 i64.const 63 i64.shr_u i64.add @@ -10366,41 +10368,41 @@ local.tee $2 i32.sub local.get $2 - local.get $8 + local.get $11 select end local.set $2 global.get $~lib/math/rempio2f_y - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.mul - local.tee $1 - local.get $1 + local.tee $4 + local.get $5 f64.mul - local.set $6 - local.get $4 + local.set $1 + local.get $5 local.get $1 - local.get $4 - f64.mul - local.tee $4 f64.const 0.3333313950307914 - local.get $1 + local.get $4 f64.const 0.13339200271297674 f64.mul f64.add f64.mul f64.add + local.get $1 local.get $4 - local.get $6 + local.get $4 + f64.mul + local.tee $1 f64.mul f64.const 0.05338123784456704 - local.get $1 + local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $6 - f64.const 0.002974357433599673 local.get $1 + f64.const 0.002974357433599673 + local.get $4 f64.const 0.009465647849436732 f64.mul f64.add @@ -10620,31 +10622,31 @@ (func $~lib/math/NativeMath.sincos (param $0 f64) (local $1 f64) (local $2 f64) - (local $3 f64) - (local $4 i64) - (local $5 f64) + (local $3 i64) + (local $4 f64) + (local $5 i32) (local $6 i32) - (local $7 i32) + (local $7 f64) (local $8 f64) (local $9 f64) local.get $0 i64.reinterpret_f64 - local.tee $4 + local.tee $3 i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $5 i32.const 31 i32.shr_u - local.set $7 - local.get $6 + local.set $6 + local.get $5 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1072243195 i32.le_u if - local.get $6 + local.get $5 i32.const 1044816030 i32.lt_u if @@ -10654,82 +10656,78 @@ global.set $~lib/math/NativeMath.sincos_cos return end - f64.const 0.00833333333332249 + local.get $0 local.get $0 local.get $0 f64.mul - local.tee $3 + 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 $3 + local.get $2 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $3 - local.get $3 - local.get $3 + local.get $2 + local.get $2 + local.get $2 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $3 + local.get $2 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $1 - local.get $0 - local.tee $2 - local.get $3 - local.get $0 - f64.mul - f64.const -0.16666666666666632 - local.get $3 - local.get $1 f64.mul f64.add f64.mul f64.add global.set $~lib/math/NativeMath.sincos_sin - local.get $0 - local.get $0 - f64.mul - local.tee $0 - local.get $0 - f64.mul - local.set $3 f64.const 1 f64.const 0.5 local.get $0 + local.get $0 f64.mul - local.tee $1 + local.tee $2 + f64.mul + local.tee $4 f64.sub - local.tee $5 + local.tee $1 f64.const 1 - local.get $5 - f64.sub local.get $1 f64.sub - local.get $0 - local.get $0 + local.get $4 + f64.sub + local.get $2 + local.get $2 f64.const 0.0416666666666666 - local.get $0 + local.get $2 f64.const -0.001388888888887411 - local.get $0 + local.get $2 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $3 - local.get $3 + local.get $2 + local.get $2 + f64.mul + local.tee $4 + local.get $4 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $2 f64.const 2.087572321298175e-09 - local.get $0 + local.get $2 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10738,7 +10736,7 @@ f64.mul f64.add f64.mul - local.get $2 + local.get $0 f64.const 0 f64.mul f64.sub @@ -10747,7 +10745,7 @@ global.set $~lib/math/NativeMath.sincos_cos return end - local.get $6 + local.get $5 i32.const 2139095040 i32.ge_u if @@ -10761,34 +10759,34 @@ return end block $~lib/math/rempio2|inlined.3 (result i32) - local.get $4 + local.get $3 i64.const 32 i64.shr_u i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $6 + local.tee $5 i32.const 1094263291 i32.lt_u if - local.get $6 + local.get $5 i32.const 20 i32.shr_u - local.tee $7 + local.tee $6 local.get $0 local.get $0 f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $3 + local.tee $2 f64.const 1.5707963267341256 f64.mul f64.sub local.tee $0 - local.get $3 + local.get $2 f64.const 6.077100506506192e-11 f64.mul - local.tee $2 + local.tee $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10803,25 +10801,25 @@ i32.const 16 i32.gt_u if - local.get $3 + local.get $2 f64.const 2.0222662487959506e-21 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $2 f64.const 6.077100506303966e-11 f64.mul - local.tee $1 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $1 + local.get $4 f64.sub f64.sub - local.set $2 - local.get $7 + local.set $4 + local.get $6 local.get $0 - local.get $2 + local.get $4 f64.sub local.tee $1 i64.reinterpret_f64 @@ -10836,24 +10834,24 @@ i32.const 49 i32.gt_u if (result f64) - local.get $3 + local.get $2 f64.const 8.4784276603689e-32 f64.mul local.get $0 local.get $0 - local.get $3 + local.get $2 f64.const 2.0222662487111665e-21 f64.mul - local.tee $1 + local.tee $4 f64.sub local.tee $0 f64.sub - local.get $1 + local.get $4 f64.sub f64.sub - local.set $2 + local.set $4 local.get $0 - local.get $2 + local.get $4 f64.sub else local.get $1 @@ -10865,109 +10863,108 @@ local.get $0 local.get $1 f64.sub - local.get $2 + local.get $4 f64.sub global.set $~lib/math/rempio2_y1 - local.get $3 + local.get $2 i32.trunc_f64_s br $~lib/math/rempio2|inlined.3 end i32.const 0 - local.get $4 + local.get $3 call $~lib/math/pio2_large_quot - local.tee $6 + local.tee $5 i32.sub + local.get $5 local.get $6 - local.get $7 select end - local.set $7 + local.set $6 global.get $~lib/math/rempio2_y0 + local.tee $4 + local.get $4 + f64.mul local.tee $0 - f64.const 0.00833333333332249 - local.get $0 + local.get $4 + f64.mul + local.set $2 + local.get $4 local.get $0 + f64.const 0.5 + global.get $~lib/math/rempio2_y1 + local.tee $1 f64.mul - local.tee $5 + local.get $2 + f64.const 0.00833333333332249 + local.get $0 f64.const -1.984126982985795e-04 - local.get $5 + local.get $0 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $5 - local.get $5 - local.get $5 + local.get $0 + local.get $0 + local.get $0 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $5 + local.get $0 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add - local.set $8 - local.get $5 - f64.const 0.5 - global.get $~lib/math/rempio2_y1 - local.tee $3 - local.tee $2 - f64.mul - local.get $5 - local.get $0 - f64.mul - local.tee $9 - local.get $8 f64.mul f64.sub f64.mul - local.get $2 + local.get $1 f64.sub - local.get $9 + local.get $2 f64.const -0.16666666666666632 f64.mul f64.sub f64.sub - local.get $0 - local.get $0 - f64.mul - local.tee $1 - local.get $1 - f64.mul - local.set $5 + local.tee $8 + local.set $0 f64.const 1 f64.const 0.5 - local.get $1 + local.get $4 + local.get $4 f64.mul - local.tee $9 + local.tee $2 + f64.mul + local.tee $7 f64.sub - local.tee $8 + local.tee $9 f64.const 1 - local.get $8 - f64.sub local.get $9 f64.sub - local.get $1 - local.get $1 + local.get $7 + f64.sub + local.get $2 + local.get $2 f64.const 0.0416666666666666 - local.get $1 + local.get $2 f64.const -0.001388888888887411 - local.get $1 + local.get $2 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $5 - local.get $5 + local.get $2 + local.get $2 + f64.mul + local.tee $7 + local.get $7 f64.mul f64.const -2.7557314351390663e-07 - local.get $1 + local.get $2 f64.const 2.087572321298175e-09 - local.get $1 + local.get $2 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -10976,40 +10973,38 @@ f64.mul f64.add f64.mul - local.get $0 - local.get $3 + local.get $4 + local.get $1 f64.mul f64.sub f64.add f64.add - local.set $3 - local.set $0 - local.get $3 - local.set $1 - local.get $7 + local.tee $2 + local.set $4 + local.get $6 i32.const 1 i32.and if - local.get $0 + local.get $8 f64.neg - local.set $1 - local.get $3 + local.set $4 + local.get $2 local.set $0 end - local.get $7 + local.get $6 i32.const 2 i32.and if (result f64) - local.get $1 + local.get $4 f64.neg - local.set $1 + local.set $4 local.get $0 f64.neg else local.get $0 end global.set $~lib/math/NativeMath.sincos_sin - local.get $1 + local.get $4 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) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index a6227fce6e..1ab531e51f 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -161,7 +161,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i64.ge_u @@ -176,36 +175,39 @@ local.set $2 end local.get $2 + local.get $2 i64.const 11 i64.shl i64.clz local.tee $3 - i64.sub - local.set $4 - local.get $7 - i64.const 63 - i64.shl - local.get $2 - local.get $3 i64.shl - local.tee $2 - i64.const 4503599627370496 - i64.sub - local.get $4 - i64.const 52 - i64.shl - i64.or - local.get $2 - i64.const 0 + local.set $2 local.get $4 + local.get $3 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $4 + local.tee $4 i64.const 0 i64.gt_s - select + if (result i64) + local.get $2 + i64.const 4503599627370496 + i64.sub + local.get $4 + i64.const 52 + i64.shl + i64.or + else + local.get $2 + i64.const 0 + local.get $4 + i64.sub + i64.const 1 + i64.add + i64.shr_u + end + local.get $7 + i64.const 63 + i64.shl i64.or f64.reinterpret_i64 return @@ -398,7 +400,6 @@ br $while-continue|0 end end - local.get $4 local.get $2 local.get $3 i32.ge_u @@ -413,31 +414,34 @@ local.set $2 end local.get $2 + local.get $2 i32.const 8 i32.shl i32.clz local.tee $3 - i32.sub - local.set $4 - local.get $2 - local.get $3 - i32.shl - local.tee $2 - i32.const 8388608 - i32.sub - local.get $4 - i32.const 23 i32.shl - i32.or - local.get $2 - i32.const 1 + local.set $2 local.get $4 + local.get $3 i32.sub - i32.shr_u - local.get $4 + local.tee $4 i32.const 0 i32.gt_s - select + if (result i32) + local.get $2 + i32.const 8388608 + i32.sub + local.get $4 + i32.const 23 + i32.shl + i32.or + else + local.get $2 + i32.const 1 + local.get $4 + i32.sub + i32.shr_u + end local.get $7 i32.or f32.reinterpret_i32 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 910f11b7fd..27157c4e65 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -174,7 +174,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -182,11 +182,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -649,10 +649,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1574,11 +1574,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -1853,10 +1853,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 @@ -2810,11 +2810,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -3629,11 +3629,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -4452,11 +4452,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -5283,11 +5283,11 @@ 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 + local.get $4 i32.const 3 i32.shl i32.add @@ -6597,7 +6597,7 @@ local.get $1 local.get $1 call $~lib/util/hash/hash64 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -6635,11 +6635,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 4 i32.shl i32.add @@ -6655,7 +6655,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and @@ -7922,7 +7922,7 @@ local.get $1 i32.reinterpret_f32 call $~lib/util/hash/hash32 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -7960,11 +7960,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 3 i32.shl i32.add @@ -7980,7 +7980,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and @@ -8752,7 +8752,7 @@ local.get $1 i64.reinterpret_f64 call $~lib/util/hash/hash64 - local.tee $3 + local.tee $4 call $~lib/set/Set#find i32.eqz if @@ -8790,11 +8790,11 @@ local.get $0 local.get $0 i32.load offset=16 - local.tee $2 + local.tee $3 i32.const 1 i32.add i32.store offset=16 - local.get $2 + local.get $3 i32.const 4 i32.shl i32.add @@ -8810,7 +8810,7 @@ local.get $2 local.get $0 i32.load - local.get $3 + local.get $4 local.get $0 i32.load offset=4 i32.and diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 6e09d8c8f9..1566c00a87 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -208,7 +208,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -216,11 +216,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -683,10 +683,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 573bf8ac4b..84d97b0c7c 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -500,7 +500,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -508,11 +508,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -975,10 +975,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1435,119 +1435,107 @@ i32.add i32.load local.tee $2 - i32.const 255 - i32.and - local.set $4 - local.get $2 i32.const 8 i32.shr_s local.set $3 - local.get $4 - i32.const 2 - i32.lt_u - if - local.get $0 + block $folding-inner0 + local.get $2 + i32.const 255 + i32.and + local.tee $2 + i32.const 2 + i32.lt_u + br_if $folding-inner0 local.get $3 - i32.const 0 - local.get $1 - local.get $4 - i32.xor - i32.sub + i32.const 255 i32.and - i32.add - return - end - local.get $3 - i32.const 255 - i32.and - local.set $2 - local.get $3 - i32.const 8 - i32.shr_u - local.set $4 - loop $while-continue|0 - local.get $2 - if - local.get $5 + local.set $2 + local.get $3 + i32.const 8 + i32.shr_u + local.set $4 + loop $while-continue|0 local.get $2 - i32.const 1 - i32.shr_u - local.tee $3 - local.get $4 - i32.add - i32.const 1 - i32.shl - i32.const 6184 - i32.add - i32.load8_u - local.tee $6 - i32.eq - if (result i32) - local.get $3 + if + local.get $5 + local.get $2 + i32.const 1 + i32.shr_u + local.tee $3 local.get $4 i32.add i32.const 1 i32.shl i32.const 6184 i32.add - i32.load8_u offset=1 - i32.const 2 - i32.shl - i32.const 4712 - i32.add - i32.load - local.tee $2 - i32.const 255 - i32.and - local.set $3 - local.get $2 - i32.const 8 - i32.shr_s - local.set $2 - local.get $3 - i32.const 2 - i32.lt_u - if - local.get $0 - local.get $2 - i32.const 0 - local.get $1 - local.get $3 - i32.xor - i32.sub - i32.and - i32.add - return - end - local.get $0 - i32.const 1 - i32.add - local.get $1 - i32.const 1 - i32.shl - i32.sub - return - else - local.get $6 - local.get $5 - i32.gt_u + i32.load8_u + local.tee $6 + i32.eq if (result i32) local.get $3 - else - local.get $3 local.get $4 i32.add - local.set $4 + i32.const 1 + i32.shl + i32.const 6184 + i32.add + i32.load8_u offset=1 + i32.const 2 + i32.shl + i32.const 4712 + i32.add + i32.load + local.tee $2 + i32.const 8 + i32.shr_s + local.set $3 local.get $2 - local.get $3 + i32.const 255 + i32.and + local.tee $2 + i32.const 2 + i32.lt_u + br_if $folding-inner0 + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.const 1 + i32.shl i32.sub + return + else + local.get $6 + local.get $5 + i32.gt_u + if (result i32) + local.get $3 + else + local.get $3 + local.get $4 + i32.add + local.set $4 + local.get $2 + local.get $3 + i32.sub + end end + local.set $2 + br $while-continue|0 end - local.set $2 - br $while-continue|0 end + local.get $0 + return end local.get $0 + local.get $3 + i32.const 0 + local.get $1 + local.get $2 + i32.xor + i32.sub + i32.and + i32.add ) (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -1791,10 +1779,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 @@ -1921,10 +1909,10 @@ local.get $6 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 @@ -1945,10 +1933,10 @@ 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 @@ -1977,15 +1965,15 @@ i32.const 131072 i32.ge_u if - local.get $8 local.get $10 i32.const 1 i32.shl + local.get $8 i32.add - local.get $1 local.get $9 i32.const 16 i32.shl + local.get $1 i32.or i32.store local.get $10 @@ -2002,10 +1990,10 @@ i32.const 25 i32.le_u if - local.get $8 local.get $10 i32.const 1 i32.shl + local.get $8 i32.add local.get $2 i32.const 26 @@ -2095,12 +2083,12 @@ local.get $9 local.get $2 i32.store16 offset=4 - local.get $10 local.get $2 i32.const 0 i32.ne i32.const 1 i32.add + local.get $10 i32.add local.set $10 else @@ -2113,18 +2101,18 @@ i32.const 65536 i32.lt_s if - local.get $8 local.get $10 i32.const 1 i32.shl + local.get $8 i32.add local.get $2 i32.store16 else - local.get $8 local.get $10 i32.const 1 i32.shl + local.get $8 i32.add local.get $2 i32.const 65536 @@ -2152,13 +2140,12 @@ end end else - local.get $8 local.get $10 i32.const 1 i32.shl + local.get $8 i32.add local.get $2 - local.get $2 i32.const 97 i32.sub i32.const 26 @@ -2169,6 +2156,7 @@ i32.shl i32.const -1 i32.xor + local.get $2 i32.and i32.store16 end @@ -2378,24 +2366,23 @@ (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i32) local.get $0 call $~lib/string/String#get:length - local.tee $12 + local.tee $8 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $12 + local.get $8 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc - local.set $9 + local.set $10 loop $for-loop|0 local.get $4 - local.get $12 + local.get $8 i32.lt_u if local.get $0 @@ -2404,20 +2391,20 @@ i32.shl i32.add i32.load16_u - local.tee $7 - local.set $5 - local.get $7 + local.tee $2 + local.set $1 + local.get $2 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $12 + local.get $8 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $7 + local.get $2 i32.const 55295 i32.sub i32.const 1025 @@ -2430,7 +2417,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $3 + local.tee $5 i32.const 56319 i32.sub i32.const 1025 @@ -2440,11 +2427,11 @@ i32.const 1 i32.add local.set $4 - local.get $3 + local.get $5 i32.const 1023 i32.and - local.get $7 - local.tee $5 + local.get $2 + local.tee $1 i32.const 1023 i32.and i32.const 10 @@ -2452,55 +2439,55 @@ i32.or i32.const 65536 i32.add - local.tee $7 + local.tee $2 i32.const 131072 i32.ge_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add + local.get $1 local.get $5 - local.get $3 i32.const 16 i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-continue|0 end end end - local.get $7 + local.get $2 i32.const 304 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 else - local.get $7 + local.get $2 i32.const 931 i32.eq if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $12 + local.get $8 i32.const 1 i32.gt_u if (result i32) @@ -2509,45 +2496,46 @@ local.set $5 local.get $4 i32.const 0 - local.set $1 + local.set $3 i32.const 0 local.get $4 - local.tee $3 + local.tee $2 i32.const 30 i32.sub - local.tee $7 + local.tee $1 i32.const 0 - local.get $7 + local.get $1 i32.gt_s select local.set $11 loop $while-continue|1 - local.get $3 + local.get $2 local.get $11 i32.gt_s if block $~lib/util/string/codePointBefore|inlined.0 (result i32) + local.get $2 + local.set $1 i32.const -1 - local.get $3 - local.tee $2 + local.get $2 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 drop local.get $5 - local.get $2 + local.get $1 i32.const 1 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $10 + local.tee $7 i32.const 64512 i32.and i32.const 56320 i32.eq - local.get $2 + local.get $1 i32.const 2 i32.sub i32.const 0 @@ -2555,23 +2543,23 @@ i32.and if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.sub i32.const 1 i32.shl i32.add i32.load16_u - local.tee $7 + local.tee $1 i32.const 64512 i32.and i32.const 55296 i32.eq if - local.get $10 + local.get $7 i32.const 1023 i32.and - local.get $7 + local.get $1 i32.const 1023 i32.and i32.const 10 @@ -2583,22 +2571,22 @@ end end i32.const 65533 - local.get $10 - local.get $10 + local.get $7 + local.get $7 i32.const 63488 i32.and i32.const 55296 i32.eq select end - local.tee $7 - local.set $2 - local.get $7 + local.tee $1 + local.set $7 + local.get $1 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $2 + local.get $7 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2606,12 +2594,12 @@ i32.eqz if i32.const 0 - local.get $7 + local.get $1 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $7 + local.get $1 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2620,61 +2608,61 @@ br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 - local.set $1 + local.set $3 end - local.get $3 - local.get $7 + local.get $2 + local.get $1 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $3 + local.set $2 br $while-continue|1 end end i32.const 0 - local.get $1 + local.get $3 i32.eqz br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 i32.add - local.tee $3 + local.tee $2 i32.const 30 i32.add - local.tee $7 - local.get $12 - local.get $7 - local.get $12 + local.tee $1 + local.get $8 + local.get $1 + local.get $8 i32.lt_s select local.set $6 loop $while-continue|2 - local.get $3 + local.get $2 local.get $6 i32.lt_s if local.get $5 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add i32.load16_u - local.tee $2 + local.tee $1 i32.const 64512 i32.and i32.const 55296 i32.eq - local.get $12 - local.get $3 + local.get $8 + local.get $2 i32.const 1 i32.add i32.ne i32.and if (result i32) local.get $5 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add @@ -2685,7 +2673,7 @@ i32.const 56320 i32.eq if (result i32) - local.get $2 + local.get $1 i32.const 10 i32.shl local.get $7 @@ -2693,10 +2681,10 @@ i32.const -56613888 i32.add else - local.get $2 + local.get $1 end else - local.get $2 + local.get $1 end local.tee $7 i32.const 918000 @@ -2723,14 +2711,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $3 + local.get $2 local.get $7 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $3 + local.set $2 br $while-continue|2 end end @@ -2746,53 +2734,53 @@ end i32.store16 else - local.get $7 + local.get $2 i32.const 9398 i32.sub i32.const 25 i32.le_u if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 26 i32.add i32.store16 else - local.get $7 + local.get $2 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $7 + local.tee $2 i32.const 65536 i32.lt_s if + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.store16 else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65536 i32.sub - local.tee $7 + local.tee $2 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $7 + local.get $2 i32.const 1023 i32.and i32.const 56320 @@ -2801,23 +2789,23 @@ i32.shl i32.or i32.store - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 end end end end end else + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl i32.add - local.get $5 - local.get $5 + local.get $1 + local.get $1 i32.const 65 i32.sub i32.const 26 @@ -2833,15 +2821,15 @@ i32.const 1 i32.add local.set $4 - local.get $8 + local.get $9 i32.const 1 i32.add - local.set $8 + local.set $9 br $for-loop|0 end end + local.get $10 local.get $9 - local.get $8 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 2941f44258..dc5826a290 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -241,7 +241,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -249,11 +249,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -716,10 +716,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -2466,10 +2466,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 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 8c37b4be1a..35a7728eb5 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -828,7 +828,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -836,11 +836,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -1303,10 +1303,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -2080,7 +2080,6 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2089,21 +2088,23 @@ i32.const 1 i32.shl local.set $5 - local.get $1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl local.set $3 - i32.const 1 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl - local.tee $1 - i32.eqz - local.get $3 + local.tee $4 local.get $5 i32.lt_u - select + if (result i32) + i32.const 1 + else + local.get $3 + i32.eqz + end if local.get $0 call $~lib/rt/pure/__retain @@ -2111,53 +2112,51 @@ call $~lib/rt/pure/__release return end - local.get $3 - local.get $5 - i32.sub - local.set $4 - local.get $3 + local.get $4 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $3 + local.set $1 local.get $4 - local.get $1 + local.get $5 + i32.sub + local.tee $4 + local.get $3 i32.gt_u if local.get $1 + local.get $2 + local.get $3 local.get $4 i32.const 2 i32.sub - local.get $1 - i32.div_u - local.tee $7 - i32.mul - local.set $6 local.get $3 - local.get $2 - local.get $1 - local.get $7 + i32.div_u + local.tee $6 call $~lib/memory/memory.repeat + local.get $1 local.get $3 local.get $6 + i32.mul + local.tee $3 i32.add local.get $2 local.get $4 - local.get $6 + local.get $3 i32.sub call $~lib/memory/memory.copy else - local.get $3 + local.get $1 local.get $2 local.get $4 call $~lib/memory/memory.copy end - local.get $3 + local.get $1 local.get $4 i32.add local.get $0 local.get $5 call $~lib/memory/memory.copy - local.get $3 + local.get $1 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2166,7 +2165,6 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -2175,21 +2173,23 @@ i32.const 1 i32.shl local.set $3 - local.get $1 + local.get $2 + call $~lib/string/String#get:length i32.const 1 i32.shl local.set $4 - i32.const 1 - local.get $2 - call $~lib/string/String#get:length + local.get $1 i32.const 1 i32.shl - local.tee $1 - i32.eqz - local.get $4 + local.tee $5 local.get $3 i32.lt_u - select + if (result i32) + i32.const 1 + else + local.get $4 + i32.eqz + end if local.get $0 call $~lib/rt/pure/__retain @@ -2197,55 +2197,53 @@ call $~lib/rt/pure/__release return end - local.get $4 - local.get $3 - i32.sub - local.set $5 - local.get $4 + local.get $5 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $4 + local.tee $1 local.get $0 local.get $3 call $~lib/memory/memory.copy local.get $5 - local.get $1 + local.get $3 + i32.sub + local.tee $0 + local.get $4 i32.gt_u if local.get $1 - local.get $5 - i32.const 2 - i32.sub - local.get $1 - i32.div_u - local.tee $0 - i32.mul - local.set $6 local.get $3 - local.get $4 i32.add local.tee $3 local.get $2 - local.get $1 + local.get $4 local.get $0 + i32.const 2 + i32.sub + local.get $4 + i32.div_u + local.tee $5 call $~lib/memory/memory.repeat + local.get $4 + local.get $5 + i32.mul + local.tee $4 local.get $3 - local.get $6 i32.add local.get $2 - local.get $5 - local.get $6 + local.get $0 + local.get $4 i32.sub call $~lib/memory/memory.copy else + local.get $1 local.get $3 - local.get $4 i32.add local.get $2 - local.get $5 + local.get $0 call $~lib/memory/memory.copy end - local.get $4 + local.get $1 call $~lib/rt/pure/__retain local.get $2 call $~lib/rt/pure/__release @@ -2640,34 +2638,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $4 - call $~lib/string/String#get:length local.tee $3 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $4 - local.tee $0 + local.get $3 + local.tee $4 i32.load16_u local.set $2 loop $while-continue|0 local.get $2 call $~lib/util/string/isSpace if - local.get $0 + local.get $4 i32.const 2 i32.add - local.tee $0 + local.tee $4 i32.load16_u local.set $2 - local.get $3 + local.get $0 i32.const 1 i32.sub - local.set $3 + local.set $0 br $while-continue|0 end end f64.const 1 - local.set $6 + local.set $5 i32.const 1 local.get $2 i32.const 43 @@ -2677,10 +2675,10 @@ i32.eq select if - local.get $3 + local.get $0 i32.const 1 i32.sub - local.tee $3 + local.tee $0 i32.eqz br_if $folding-inner0 f64.const -1 @@ -2689,11 +2687,11 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $5 + local.get $4 i32.const 2 i32.add - local.tee $0 + local.tee $4 i32.load16_u local.set $2 end @@ -2716,12 +2714,12 @@ i32.const 48 i32.eq i32.const 0 - local.get $3 + local.get $0 i32.const 2 i32.gt_s select if (result i32) - local.get $0 + local.get $4 i32.load16_u offset=2 i32.const 32 i32.or @@ -2731,18 +2729,18 @@ i32.const 0 end if - local.get $3 - i32.const 2 - i32.sub - local.set $3 - local.get $0 + local.get $4 i32.const 4 i32.add + local.set $4 + local.get $0 + i32.const 2 + i32.sub local.set $0 end end else - local.get $3 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -2754,7 +2752,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $4 i32.load16_u offset=2 i32.const 32 i32.or @@ -2772,38 +2770,38 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 2 local.set $1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 8 local.set $1 br $break|1 end - local.get $0 + local.get $4 i32.const 4 i32.add - local.set $0 - local.get $3 + local.set $4 + local.get $0 i32.const 2 i32.sub - local.set $3 + local.set $0 i32.const 16 local.set $1 end @@ -2816,14 +2814,14 @@ end loop $while-continue|2 block $while-break|2 - local.get $3 + local.get $0 local.tee $2 i32.const 1 i32.sub - local.set $3 + local.set $0 local.get $2 if - local.get $0 + local.get $4 i32.load16_u local.tee $2 i32.const 48 @@ -2859,10 +2857,10 @@ local.get $1 i32.ge_u if - local.get $5 - local.get $5 + local.get $6 + local.get $6 f64.eq - local.get $5 + local.get $6 f64.const 0 f64.ne i32.and @@ -2870,30 +2868,30 @@ br_if $folding-inner0 br $while-break|2 end - local.get $5 + local.get $6 local.get $1 f64.convert_i32_s f64.mul local.get $2 f64.convert_i32_u f64.add - local.set $5 - local.get $0 + local.set $6 + local.get $4 i32.const 2 i32.add - local.set $0 + local.set $4 br $while-continue|2 end end end - local.get $4 + local.get $3 call $~lib/rt/pure/__release - local.get $6 local.get $5 + local.get $6 f64.mul return end - local.get $4 + local.get $3 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -2917,34 +2915,34 @@ block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 - call $~lib/string/String#get:length local.tee $2 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $0 + local.get $2 + local.tee $3 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $0 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 - local.get $2 + 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 $6 + local.set $4 i32.const 1 local.get $1 i32.const 43 @@ -2954,10 +2952,10 @@ i32.eq select if - local.get $2 + local.get $0 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.eqz br_if $folding-inner0 i32.const -1 @@ -2966,15 +2964,15 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $4 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 end - local.get $2 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -2986,7 +2984,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $3 i32.load16_u offset=2 i32.const 32 i32.or @@ -3004,57 +3002,57 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 2 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 8 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 16 - local.set $4 + local.set $6 end end - local.get $4 + local.get $6 i32.const 10 - local.get $4 + local.get $6 select - local.set $4 + local.set $6 loop $while-continue|2 block $while-break|2 - local.get $2 + local.get $0 local.tee $1 i32.const 1 i32.sub - local.set $2 + local.set $0 local.get $1 if - local.get $0 + local.get $3 i32.load16_u local.tee $1 i32.const 48 @@ -3087,7 +3085,7 @@ select end local.tee $1 - local.get $4 + local.get $6 i32.ge_u if local.get $5 @@ -3096,27 +3094,27 @@ br $while-break|2 end local.get $1 - local.get $4 local.get $5 + local.get $6 i32.mul i32.add local.set $5 - local.get $0 + local.get $3 i32.const 2 i32.add - local.set $0 + local.set $3 br $while-continue|2 end end end - local.get $3 + local.get $2 call $~lib/rt/pure/__release + local.get $4 local.get $5 - local.get $6 i32.mul return end - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 0 ) @@ -3124,40 +3122,40 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) + (local $4 i64) (local $5 i64) - (local $6 i64) + (local $6 i32) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $3 - call $~lib/string/String#get:length local.tee $2 + call $~lib/string/String#get:length + local.tee $0 i32.eqz br_if $folding-inner0 - local.get $3 - local.tee $0 + local.get $2 + local.tee $3 i32.load16_u local.set $1 loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if - local.get $0 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 - local.get $2 + local.get $0 i32.const 1 i32.sub - local.set $2 + local.set $0 br $while-continue|0 end end i64.const 1 - local.set $6 + local.set $4 i32.const 1 local.get $1 i32.const 43 @@ -3167,10 +3165,10 @@ i32.eq select if - local.get $2 + local.get $0 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.eqz br_if $folding-inner0 i64.const -1 @@ -3179,15 +3177,15 @@ i32.const 45 i32.eq select - local.set $6 - local.get $0 + local.set $4 + local.get $3 i32.const 2 i32.add - local.tee $0 + local.tee $3 i32.load16_u local.set $1 end - local.get $2 + local.get $0 i32.const 2 i32.gt_s i32.const 0 @@ -3199,7 +3197,7 @@ block $break|1 block $case2|1 block $case1|1 - local.get $0 + local.get $3 i32.load16_u offset=2 i32.const 32 i32.or @@ -3217,57 +3215,57 @@ br_if $case2|1 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 2 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 8 - local.set $4 + local.set $6 br $break|1 end - local.get $0 + local.get $3 i32.const 4 i32.add - local.set $0 - local.get $2 + local.set $3 + local.get $0 i32.const 2 i32.sub - local.set $2 + local.set $0 i32.const 16 - local.set $4 + local.set $6 end end - local.get $4 + local.get $6 i32.const 10 - local.get $4 + local.get $6 select - local.set $4 + local.set $6 loop $while-continue|2 block $while-break|2 - local.get $2 + local.get $0 local.tee $1 i32.const 1 i32.sub - local.set $2 + local.set $0 local.get $1 if - local.get $0 + local.get $3 i32.load16_u local.tee $1 i32.const 48 @@ -3300,7 +3298,7 @@ select end local.tee $1 - local.get $4 + local.get $6 i32.ge_u if local.get $5 @@ -3311,27 +3309,27 @@ local.get $1 i64.extend_i32_u local.get $5 - local.get $4 + local.get $6 i64.extend_i32_s i64.mul i64.add local.set $5 - local.get $0 + local.get $3 i32.const 2 i32.add - local.set $0 + local.set $3 br $while-continue|2 end end end - local.get $3 + local.get $2 call $~lib/rt/pure/__release + local.get $4 local.get $5 - local.get $6 i64.mul return end - local.get $3 + local.get $2 call $~lib/rt/pure/__release i64.const 0 ) @@ -4035,32 +4033,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $11 + local.tee $13 i64.div_u local.tee $16 i64.clz - local.set $13 + local.set $11 local.get $7 - local.get $11 + local.get $13 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $13 + local.get $11 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $11 + local.get $13 f64.convert_i64_u f64.div i64.trunc_f64_u local.get $16 - local.get $13 + local.get $11 i64.shl i64.add f64.convert_i64_u local.get $10 - local.get $13 + local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4093,11 +4091,11 @@ i64.and i64.const 1220703125 i64.mul - local.tee $10 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.tee $7 + local.tee $10 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4109,7 +4107,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $10 + local.get $7 local.get $0 i64.extend_i32_u i64.shl @@ -4117,11 +4115,11 @@ i64.shr_u i64.const 1 i64.and - local.get $7 + local.get $10 local.get $0 i64.extend_i32_u i64.shl - local.get $10 + local.get $7 i64.const 4294967295 i64.and local.get $11 @@ -4749,10 +4747,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 @@ -4819,7 +4817,7 @@ local.set $7 local.get $2 call $~lib/rt/pure/__retain - local.set $6 + local.set $5 block $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -4836,7 +4834,7 @@ local.get $0 call $~lib/rt/pure/__retain else - local.get $6 + local.get $5 local.get $0 local.get $7 local.get $0 @@ -4847,7 +4845,7 @@ local.set $0 br $folding-inner0 end - local.get $6 + local.get $5 call $~lib/string/String#get:length local.set $2 local.get $10 @@ -4873,7 +4871,7 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $3 - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl @@ -4901,17 +4899,17 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $1 i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy + local.get $1 local.get $2 - local.get $5 i32.add local.set $1 local.get $9 @@ -4943,7 +4941,7 @@ loop $while-continue|1 local.get $0 local.get $7 - local.get $5 + local.get $6 call $~lib/string/String#indexOf local.tee $4 i32.const -1 @@ -4954,7 +4952,7 @@ i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl @@ -4962,7 +4960,7 @@ local.get $4 local.get $10 i32.add - local.set $5 + local.set $6 br $while-continue|1 end end @@ -4976,7 +4974,7 @@ loop $while-continue|2 local.get $0 local.get $7 - local.get $5 + local.get $6 call $~lib/string/String#indexOf local.tee $9 i32.const -1 @@ -5012,38 +5010,38 @@ i32.shl i32.add local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.add local.get $9 - local.get $5 + local.get $6 i32.sub - local.tee $5 + local.tee $6 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $3 - local.get $5 + local.get $6 local.get $8 i32.add - local.tee $5 + local.tee $6 i32.const 1 i32.shl i32.add - local.get $6 + local.get $5 local.get $2 i32.const 1 i32.shl call $~lib/memory/memory.copy local.get $2 - local.get $5 + local.get $6 i32.add local.set $8 local.get $9 local.get $10 i32.add - local.set $5 + local.set $6 br $while-continue|2 end end @@ -5064,7 +5062,7 @@ local.set $3 end local.get $4 - local.get $5 + local.get $6 i32.sub local.tee $2 if @@ -5074,7 +5072,7 @@ i32.shl i32.add local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.shl i32.add @@ -5106,13 +5104,13 @@ call $~lib/rt/pure/__retain local.get $7 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release return end local.get $7 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release local.get $0 ) @@ -5256,15 +5254,15 @@ i32.const 0 i32.gt_s select - local.tee $1 + local.tee $3 local.get $0 call $~lib/string/String#get:length - local.tee $3 - local.get $1 + local.tee $1 local.get $3 + local.get $1 i32.lt_s select - local.tee $1 + local.tee $3 local.get $2 i32.const 0 local.get $2 @@ -5272,59 +5270,58 @@ i32.gt_s select local.tee $2 - local.get $3 + local.get $1 local.get $2 - local.get $3 + local.get $1 i32.lt_s select local.tee $2 - local.get $1 + local.get $3 local.get $2 - i32.lt_s + i32.gt_s select i32.const 1 i32.shl - local.set $4 - local.get $1 + local.tee $4 + local.get $3 local.get $2 - local.get $1 + local.get $3 local.get $2 - i32.gt_s + i32.lt_s select i32.const 1 i32.shl local.tee $2 - local.get $4 i32.sub - local.tee $1 + local.tee $3 i32.eqz if i32.const 1280 return end i32.const 0 - local.get $2 - local.get $3 + local.get $4 + local.get $1 i32.const 1 i32.shl i32.eq - local.get $4 + local.get $2 select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $1 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 local.get $0 - local.get $4 + local.get $2 i32.add - local.get $1 + local.get $3 call $~lib/memory/memory.copy - local.get $2 + local.get $1 call $~lib/rt/pure/__retain ) (func $~lib/rt/__allocArray (param $0 i32) (result i32) @@ -5680,17 +5677,17 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 - local.get $0 local.get $3 i32.const 1 i32.shl + local.get $0 i32.add i32.load16_u i32.store16 - local.get $6 local.get $3 i32.const 2 i32.shl + local.get $6 i32.add local.get $2 i32.store @@ -5736,10 +5733,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $9 - local.get $0 local.get $5 i32.const 1 i32.shl + local.get $0 i32.add local.get $7 call $~lib/memory/memory.copy @@ -5795,10 +5792,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $4 - local.get $0 local.get $5 i32.const 1 i32.shl + local.get $0 i32.add local.get $2 call $~lib/memory/memory.copy @@ -6028,7 +6025,7 @@ (local $5 i64) local.get $3 i64.extend_i32_s - local.set $5 + local.set $4 local.get $3 local.get $3 i32.const 1 @@ -6045,11 +6042,11 @@ i32.shl i32.add local.get $1 - local.get $5 + local.get $4 local.get $1 - local.get $5 + local.get $4 i64.div_u - local.tee $4 + local.tee $1 i64.mul i64.sub i32.wrap_i64 @@ -6059,8 +6056,7 @@ i32.add i32.load16_u i32.store16 - local.get $4 - local.tee $1 + local.get $1 i64.const 0 i64.ne br_if $do-continue|1 @@ -6071,11 +6067,11 @@ i32.const 7 i32.and i64.extend_i32_s - local.set $4 - local.get $5 + local.set $5 + local.get $4 i64.const 1 i64.sub - local.set $5 + local.set $4 loop $do-continue|0 local.get $0 local.get $2 @@ -6086,7 +6082,7 @@ i32.shl i32.add local.get $1 - local.get $5 + local.get $4 i64.and i32.wrap_i64 i32.const 1 @@ -6096,7 +6092,7 @@ i32.load16_u i32.store16 local.get $1 - local.get $4 + local.get $5 i64.shr_u local.tee $1 i64.const 0 @@ -6585,7 +6581,6 @@ i32.const 16 i32.eq if - local.get $2 i32.const 63 local.get $0 i64.clz @@ -6595,6 +6590,7 @@ i32.shr_s i32.const 1 i32.add + local.get $2 i32.add local.tee $1 i32.const 1 @@ -6635,36 +6631,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -6683,113 +6678,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -6797,7 +6796,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -6812,10 +6811,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -6833,7 +6832,7 @@ i32.const 20280 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -6849,19 +6848,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -6872,7 +6871,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -6897,21 +6896,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -6923,7 +6922,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -6939,10 +6938,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -6950,9 +6949,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -6979,13 +6978,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -6994,7 +6993,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -7008,7 +7007,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -7191,7 +7190,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -7199,7 +7198,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -7267,21 +7266,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -7292,68 +7288,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7366,8 +7361,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -7376,91 +7371,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 19408 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 20104 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7469,50 +7444,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7521,33 +7493,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -7559,13 +7546,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 37f2e0823a..edee9d2672 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1364,11 +1364,14 @@ block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $0 + i32.const 1 + i32.ne + if local.get $0 - i32.const 1 + i32.const 2 i32.sub - br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 end i32.const 1408 br $break|0 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 2a12313555..ca6e5e8be3 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -473,7 +473,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -481,11 +481,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -948,10 +948,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1487,11 +1487,11 @@ i32.and i32.const 24 i32.add - local.tee $5 + local.tee $3 i32.add local.set $1 local.get $2 - local.get $5 + local.get $3 i32.sub local.set $2 local.get $0 @@ -3328,12 +3328,12 @@ i32.const 16 local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $2 local.get $0 local.get $1 i32.shl local.tee $1 - local.set $2 + local.set $5 local.get $1 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -3342,23 +3342,23 @@ if local.get $4 local.get $3 - local.get $2 + local.get $5 call $~lib/memory/memory.copy end local.get $4 - local.tee $2 + local.tee $3 call $~lib/rt/pure/__retain i32.store - local.get $5 local.get $2 + local.get $3 i32.store offset=4 - local.get $5 + local.get $2 local.get $1 i32.store offset=8 - local.get $5 + local.get $2 local.get $0 i32.store offset=12 - local.get $5 + local.get $2 ) (func $~lib/typedarray/Int8Array#__get (param $0 i32) (param $1 i32) (result i32) local.get $1 @@ -5590,10 +5590,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 @@ -9535,7 +9535,6 @@ br $while-continue|0 end end - local.get $4 local.get $1 i32.const 8388608 i32.ge_u @@ -9554,27 +9553,31 @@ i32.const 8 i32.shl i32.clz - local.tee $1 - i32.shl local.tee $3 - i32.const 8388608 - i32.sub - local.get $2 - local.get $1 - i32.sub - local.tee $1 - i32.const 23 i32.shl - i32.or + local.set $1 + local.get $2 local.get $3 - i32.const 1 - local.get $1 i32.sub - i32.shr_u - local.get $1 + local.tee $2 i32.const 0 i32.gt_s - select + 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 @@ -9673,12 +9676,7 @@ i64.shr_u i64.const 2047 i64.and - local.set $2 - local.get $1 - i64.const 63 - i64.shr_u - local.set $3 - local.get $2 + local.tee $2 i64.const 2047 i64.eq if @@ -9690,15 +9688,19 @@ 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 $4 + local.tee $3 i64.const -9223372036854775808 i64.le_u if - local.get $4 + local.get $3 i64.const -9223372036854775808 i64.eq br_if $folding-inner0 @@ -9758,9 +9760,6 @@ br $while-continue|0 end end - local.get $3 - i64.const 63 - i64.shl local.get $1 i64.const 4503599627370496 i64.ge_u @@ -9779,29 +9778,35 @@ i64.const 11 i64.shl i64.clz - local.tee $1 - i64.shl local.tee $3 - i64.const 4503599627370496 - i64.sub - local.get $2 - local.get $1 - i64.sub - local.tee $1 - i64.const 52 i64.shl - i64.or + local.set $1 + local.get $2 local.get $3 - i64.const 0 - local.get $1 i64.sub - i64.const 1 - i64.add - i64.shr_u - local.get $1 + local.tee $2 i64.const 0 i64.gt_s - select + 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 @@ -9909,8 +9914,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -9920,8 +9925,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -10010,8 +10015,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10021,8 +10026,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -10056,8 +10061,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10067,8 +10072,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -10144,11 +10149,11 @@ local.get $2 call $~lib/rt/pure/__retain local.set $2 + local.get $0 i32.const 6256 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s - local.get $0 i64.ne if i32.const 0 @@ -10158,8 +10163,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10169,8 +10174,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -10260,8 +10265,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10271,8 +10276,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -10307,8 +10312,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10318,8 +10323,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachSelf local.get $2 + global.get $std/typedarray/forEachSelf i32.ne if i32.const 0 @@ -18851,21 +18856,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19253,14 +19258,14 @@ local.get $1 i32.const 255 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19435,21 +19440,21 @@ i32.add return end + local.get $2 local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19606,14 +19611,14 @@ local.get $1 i32.const 65535 i32.and - local.tee $1 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $2 + local.set $1 local.get $0 - local.get $1 local.get $2 + local.get $1 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $1 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -19788,9 +19793,9 @@ call $~lib/util/number/decimalCount32 local.get $2 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_dec_simple - local.get $2 + local.get $0 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20177,10 +20182,10 @@ i64.const 10 i64.lt_u if - local.get $0 local.get $2 i32.const 1 i32.shl + local.get $0 i32.add local.get $1 i64.const 48 @@ -20195,16 +20200,16 @@ i64.const 4294967295 i64.le_u if + local.get $2 local.get $1 i32.wrap_i64 - local.tee $3 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $2 i32.add - local.set $2 + local.set $3 local.get $0 - local.get $3 local.get $2 + local.get $3 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -20213,10 +20218,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $2 + local.tee $3 call $~lib/util/number/utoa_dec_simple end - local.get $2 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -20628,36 +20633,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -20676,113 +20680,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -20790,7 +20798,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -20805,10 +20813,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -20826,7 +20834,7 @@ i32.const 8248 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -20842,19 +20850,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -20865,7 +20873,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -20890,21 +20898,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -20916,7 +20924,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -20932,10 +20940,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -20943,9 +20951,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -20972,13 +20980,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -20987,7 +20995,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -21001,7 +21009,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -21184,7 +21192,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -21192,7 +21200,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -21260,21 +21268,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -21285,68 +21290,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21359,8 +21363,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -21369,91 +21373,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 7376 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 8072 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21462,50 +21446,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21514,33 +21495,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -21552,13 +21548,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/unary.optimized.wat b/tests/compiler/unary.optimized.wat index 07a9b1fbb9..495e5af382 100644 --- a/tests/compiler/unary.optimized.wat +++ b/tests/compiler/unary.optimized.wat @@ -10,6 +10,8 @@ (func $start:unary (local $0 i32) (local $1 i64) + (local $2 f32) + (local $3 f64) global.get $unary/i i32.const 1 i32.add @@ -142,9 +144,12 @@ global.set $unary/f f32.const 1.25 global.set $unary/f - f32.const 0.25 - global.set $unary/f f32.const 1.25 + local.tee $2 + f32.const 1 + f32.sub + global.set $unary/f + local.get $2 global.set $unary/f global.get $unary/F f64.const 1 @@ -182,9 +187,12 @@ global.set $unary/F f64.const 1.25 global.set $unary/F - f64.const 0.25 - global.set $unary/F f64.const 1.25 + local.tee $3 + f64.const 1 + f64.sub + global.set $unary/F + local.get $3 global.set $unary/F ) (func $~start diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 71c01220f9..52c13126ca 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -418,36 +418,35 @@ (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 i32) - (local $10 i64) + (local $9 i64) + (local $10 i32) (local $11 i64) (local $12 i64) + (local $13 i64) + local.get $3 + local.get $1 + i64.sub + local.set $9 + local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.set $11 - local.get $3 - local.get $1 - i64.sub + local.tee $12 + i64.and local.set $8 local.get $3 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.set $2 - local.get $3 - local.get $11 - i64.and - local.set $3 - local.get $2 + local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 loop $while-continue|0 @@ -466,113 +465,117 @@ block $case3|1 block $case2|1 block $case1|1 - block $case0|1 - local.get $4 + local.get $4 + local.tee $2 + i32.const 10 + i32.ne + if + local.get $2 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 $case0|1 $case10|1 + 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 $2 + local.get $7 i32.const 1000000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 1000 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 1000 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 100 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 100 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 + local.get $7 i32.const 10 i32.div_u - local.set $7 - local.get $2 + local.set $2 + local.get $7 i32.const 10 i32.rem_u - local.set $2 + local.set $7 br $break|1 end - local.get $2 - local.set $7 - i32.const 0 + local.get $7 local.set $2 + i32.const 0 + local.set $7 br $break|1 end i32.const 0 - local.set $7 + local.set $2 end + local.get $2 local.get $6 - local.get $7 i32.or if local.get $0 @@ -580,7 +583,7 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -595,10 +598,10 @@ i32.const 1 i32.sub local.set $4 - local.get $3 - local.get $2 + local.get $8 + local.get $7 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl i64.add @@ -616,7 +619,7 @@ i32.const 1936 i32.add i64.load32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $3 @@ -632,19 +635,19 @@ local.set $4 loop $while-continue|3 i32.const 1 - local.get $8 + local.get $9 local.get $1 i64.sub local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.sub i64.gt_u local.get $1 local.get $3 i64.add - local.get $8 + local.get $9 i64.lt_u select i32.const 0 @@ -655,7 +658,7 @@ i64.ge_u i32.const 0 local.get $1 - local.get $8 + local.get $9 i64.lt_u select select @@ -680,21 +683,21 @@ br $while-continue|0 end end - local.get $9 + local.get $10 i64.extend_i32_s - local.set $1 + local.set $13 loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul local.set $5 - local.get $3 + local.get $8 i64.const 10 i64.mul - local.tee $12 - local.get $1 - i64.shr_u local.tee $3 + local.get $13 + i64.shr_u + local.tee $1 local.get $6 i64.extend_i32_s i64.or @@ -706,7 +709,7 @@ i32.const 1 i32.shl i32.add - local.get $3 + local.get $1 i32.wrap_i64 i32.const 65535 i32.and @@ -722,10 +725,10 @@ i32.const 1 i32.sub local.set $4 - local.get $11 + local.get $3 local.get $12 i64.and - local.tee $3 + local.tee $8 local.get $5 i64.ge_u br_if $while-continue|4 @@ -733,9 +736,9 @@ global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $3 - local.set $1 local.get $8 + local.set $1 + local.get $9 i32.const 0 local.get $4 i32.sub @@ -762,13 +765,13 @@ local.get $1 i64.sub local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.sub i64.gt_u local.get $1 - local.get $10 + local.get $11 i64.add local.get $3 i64.lt_u @@ -777,7 +780,7 @@ local.get $5 local.get $1 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.const 0 local.get $1 @@ -791,7 +794,7 @@ i32.sub local.set $4 local.get $1 - local.get $10 + local.get $11 i64.add local.set $1 br $while-continue|6 @@ -1174,7 +1177,7 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $3 + local.tee $0 call $~lib/util/number/utoa_dec_simple local.get $1 i32.const 45 @@ -1182,7 +1185,7 @@ local.get $2 select i32.store16 offset=4 - local.get $3 + local.get $0 i32.const 2 i32.add else @@ -1250,21 +1253,18 @@ ) (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i64) + (local $6 i32) + (local $7 i64) + (local $8 i32) + (local $9 i32) (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) local.get $1 f64.const 0 f64.lt - local.tee $11 + local.tee $8 if (result f64) local.get $0 i32.const 45 @@ -1275,68 +1275,67 @@ local.get $1 end i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $4 + local.tee $6 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $2 + local.get $3 i64.const 4503599627370495 i64.and i64.add - local.set $2 - local.get $4 - i32.const 1 - local.get $4 - select - i32.const 1075 - i32.sub - local.tee $4 - i32.const 1 - i32.sub - local.get $2 + local.tee $2 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $5 - i64.clz - i32.wrap_i64 local.tee $3 - i32.sub - local.set $7 - local.get $5 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 $3 + local.tee $9 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $4 - local.get $3 + local.get $6 + local.get $9 i32.sub - local.get $7 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $7 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1349,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1359,91 +1358,71 @@ i32.shr_s i32.const 1 i32.add - local.tee $3 + local.tee $4 i32.const 3 i32.shl - local.tee $7 + local.tee $9 i32.sub global.set $~lib/util/number/_K - local.get $7 + local.get $9 i32.const 1064 i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 1760 i32.add i32.load16_s global.set $~lib/util/number/_exp_pow - local.get $4 + 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 $3 - i32.sub - local.set $7 - local.get $2 - local.get $3 + local.tee $0 i64.extend_i32_s i64.shl - local.tee $5 - i64.const 4294967295 - i64.and - local.set $13 - global.get $~lib/util/number/_frc_pow local.tee $2 - i64.const 4294967295 - i64.and - local.tee $12 - local.get $5 i64.const 32 i64.shr_u - local.tee $5 - i64.mul - local.get $12 - local.get $13 - i64.mul + local.tee $7 + local.get $3 i64.const 32 i64.shr_u - i64.add - local.set $12 - global.get $~lib/util/number/_frc_plus - local.tee $8 - i64.const 4294967295 - i64.and - local.set $9 + local.tee $10 + i64.mul + local.get $5 + local.get $7 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $6 - local.get $8 - i64.const 32 - i64.shr_u - local.tee $8 - i64.mul - local.get $6 - local.get $9 + local.tee $2 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.set $6 - local.get $8 - local.get $2 - i64.const 32 - i64.shr_u - local.tee $10 - i64.mul - local.get $6 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $9 + local.get $2 local.get $10 i64.mul - local.get $6 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1452,50 +1431,47 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.set $8 - global.get $~lib/util/number/_frc_minus - local.tee $9 + 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.set $6 + local.tee $10 + local.get $5 + i64.mul local.get $2 i64.const 4294967295 i64.and - local.tee $10 - local.get $9 - i64.const 32 - i64.shr_u - local.tee $9 - i64.mul - local.get $6 + local.tee $2 local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.set $10 - local.get $0 - local.get $11 - i32.const 1 - i32.shl - i32.add - local.get $0 - local.get $5 - local.get $2 - i64.const 32 - i64.shr_u local.tee $5 - i64.mul - local.get $12 i64.const 32 i64.shr_u i64.add - local.get $5 - local.get $13 + local.get $2 + local.get $7 i64.mul - local.get $12 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1504,33 +1480,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $7 - i32.add - i32.const -64 - i32.sub - local.get $8 + 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 $8 - local.get $9 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 - local.get $10 + i64.const 32 + i64.shr_u + i64.add + local.tee $3 i64.const 32 i64.shr_u i64.add local.get $2 - local.get $6 + local.get $7 i64.mul - local.get $10 + local.get $3 i64.const 4294967295 i64.and i64.add @@ -1542,13 +1533,13 @@ i64.const 1 i64.add i64.sub - local.get $11 + local.get $8 call $~lib/util/number/genDigits - local.get $11 + local.get $8 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $11 + local.get $8 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 49b1224008..56323337fc 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -243,7 +243,7 @@ i32.const 2 i32.shl i32.add - local.tee $1 + local.tee $4 i32.load offset=4 i32.const 1 local.get $2 @@ -251,11 +251,11 @@ i32.const -1 i32.xor i32.and - local.set $2 + local.set $1 + local.get $4 local.get $1 - local.get $2 i32.store offset=4 - local.get $2 + local.get $1 i32.eqz if local.get $0 @@ -718,10 +718,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1184,13 +1184,11 @@ i32.const 1 i32.add local.tee $2 - local.set $0 - local.get $2 i32.const 10 i32.ne br_if $while-continue|002 end - local.get $0 + local.get $2 i32.const 10 i32.ne if From 6cba9a212bd9d120bc5fcf5be9f70053e71821af Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 04:34:05 +0300 Subject: [PATCH 09/13] early glob optimization --- src/module.ts | 1 + tests/compiler/comma.optimized.wat | 11 - tests/compiler/do.optimized.wat | 5 +- .../extends-baseaggregate.optimized.wat | 16 +- tests/compiler/for.optimized.wat | 5 +- .../implicit-getter-setter.optimized.wat | 5 +- tests/compiler/issues/1095.optimized.wat | 5 +- tests/compiler/issues/1225.optimized.wat | 5 +- tests/compiler/logical.optimized.wat | 5 +- tests/compiler/managed-cast.optimized.wat | 5 +- tests/compiler/object-literal.optimized.wat | 5 +- tests/compiler/rc/local-init.optimized.wat | 5 +- .../rc/logical-and-mismatch.optimized.wat | 5 +- .../rc/logical-or-mismatch.optimized.wat | 5 +- tests/compiler/rc/optimize.optimized.wat | 5 +- tests/compiler/rc/rereturn.optimized.wat | 5 +- .../rc/ternary-mismatch.optimized.wat | 5 +- tests/compiler/resolve-ternary.optimized.wat | 5 +- .../retain-release-sanity.optimized.wat | 16 +- tests/compiler/retain-return.optimized.wat | 5 +- tests/compiler/rt/finalize.optimized.wat | 14 +- tests/compiler/runtime-full.optimized.wat | 5 +- .../compiler/std/array-literal.optimized.wat | 5 +- tests/compiler/std/array.optimized.wat | 1547 ++++++++--------- tests/compiler/std/arraybuffer.optimized.wat | 5 +- tests/compiler/std/dataview.optimized.wat | 5 +- tests/compiler/std/map.optimized.wat | 7 +- tests/compiler/std/math.optimized.wat | 41 +- tests/compiler/std/set.optimized.wat | 7 +- tests/compiler/std/staticarray.optimized.wat | 5 +- .../std/string-casemapping.optimized.wat | 147 +- .../std/string-encoding.optimized.wat | 7 +- tests/compiler/std/string.optimized.wat | 19 +- tests/compiler/std/symbol.optimized.wat | 5 +- tests/compiler/std/typedarray.optimized.wat | 667 +++---- tests/compiler/unary.optimized.wat | 20 +- tests/compiler/while.optimized.wat | 5 +- 37 files changed, 1324 insertions(+), 1311 deletions(-) diff --git a/src/module.ts b/src/module.ts index 96b0ebf6d2..28048c26b9 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1510,6 +1510,7 @@ export class Module { passes.push("rse"); passes.push("vacuum"); passes.push("ssa-nomerge"); + passes.push("simplify-globals-optimizing"); } if (optimizeLevel >= 3) { passes.push("flatten"); diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index 212f05ac19..b8197dbcf8 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -80,17 +80,6 @@ global.set $comma/b i32.const 2 global.set $comma/a - global.get $comma/b - i32.const 2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 19 - i32.const 1 - call $~lib/builtins/abort - unreachable - end loop $for-loop|0 local.get $0 global.get $comma/a diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 13ee0d6c52..645cbc7c37 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -688,7 +688,8 @@ unreachable end i32.const 1216 - local.tee $1 + local.set $1 + i32.const 1216 i32.const 0 i32.store i32.const 2784 @@ -713,10 +714,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 304b4904b7..8df0d5bc9e 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -613,7 +613,8 @@ unreachable end i32.const 1568 - local.tee $1 + local.set $1 + i32.const 1568 i32.const 0 i32.store i32.const 3136 @@ -638,10 +639,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1379,10 +1380,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 @@ -2106,14 +2107,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 579428fa82..7bee507bcf 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -685,7 +685,8 @@ unreachable end i32.const 1216 - local.tee $1 + local.set $1 + i32.const 1216 i32.const 0 i32.store i32.const 2784 @@ -710,10 +711,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 779ea253f5..771460e421 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -620,7 +620,8 @@ unreachable end i32.const 1232 - local.tee $1 + local.set $1 + i32.const 1232 i32.const 0 i32.store i32.const 2800 @@ -645,10 +646,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 2c23f79404..cbb5e0e5d7 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -605,7 +605,8 @@ unreachable end i32.const 1312 - local.tee $1 + local.set $1 + i32.const 1312 i32.const 0 i32.store i32.const 2880 @@ -630,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 37e44e8191..17abeb9f31 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -606,7 +606,8 @@ unreachable end i32.const 1232 - local.tee $1 + local.set $1 + i32.const 1232 i32.const 0 i32.store i32.const 2800 @@ -631,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index e59eaa06b5..b463f0cc17 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -603,7 +603,8 @@ unreachable end i32.const 1232 - local.tee $1 + local.set $1 + i32.const 1232 i32.const 0 i32.store i32.const 2800 @@ -628,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 41383bad90..0e1539c724 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -608,7 +608,8 @@ unreachable end i32.const 1392 - local.tee $1 + local.set $1 + i32.const 1392 i32.const 0 i32.store i32.const 2960 @@ -633,10 +634,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 9fb5ce8199..60fd25cf1b 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -612,7 +612,8 @@ unreachable end i32.const 1440 - local.tee $1 + local.set $1 + i32.const 1440 i32.const 0 i32.store i32.const 3008 @@ -637,10 +638,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index d25ba45aa4..6c1b79feb1 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -603,7 +603,8 @@ unreachable end i32.const 1200 - local.tee $1 + local.set $1 + i32.const 1200 i32.const 0 i32.store i32.const 2768 @@ -628,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index bcfd706103..f456da426b 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -603,7 +603,8 @@ unreachable end i32.const 1184 - local.tee $1 + local.set $1 + i32.const 1184 i32.const 0 i32.store i32.const 2752 @@ -628,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 0ee135fd09..20787ee1a7 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -603,7 +603,8 @@ unreachable end i32.const 1184 - local.tee $1 + local.set $1 + i32.const 1184 i32.const 0 i32.store i32.const 2752 @@ -628,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index a655fd3623..0ea85bef7d 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -693,7 +693,8 @@ unreachable end i32.const 1216 - local.tee $1 + local.set $1 + i32.const 1216 i32.const 0 i32.store i32.const 2784 @@ -718,10 +719,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 04e6d6ae71..861e00c16b 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -606,7 +606,8 @@ unreachable end i32.const 1232 - local.tee $1 + local.set $1 + i32.const 1232 i32.const 0 i32.store i32.const 2800 @@ -631,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 5c66d5b631..cdd6921a4f 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -605,7 +605,8 @@ unreachable end i32.const 1184 - local.tee $1 + local.set $1 + i32.const 1184 i32.const 0 i32.store i32.const 2752 @@ -630,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index 08c31d502b..f9c8a3afe1 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -632,7 +632,8 @@ unreachable end i32.const 2880 - local.tee $1 + local.set $1 + i32.const 2880 i32.const 0 i32.store i32.const 4448 @@ -657,10 +658,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 4c99175311..80bb87a6ea 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -630,7 +630,8 @@ unreachable end i32.const 1664 - local.tee $1 + local.set $1 + i32.const 1664 i32.const 0 i32.store i32.const 3232 @@ -655,10 +656,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1560,10 +1561,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 @@ -2547,14 +2548,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 72b4c576f6..d3e6749890 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -608,7 +608,8 @@ unreachable end i32.const 1376 - local.tee $1 + local.set $1 + i32.const 1376 i32.const 0 i32.store i32.const 2944 @@ -633,10 +634,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 671366654c..19314a04e3 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -628,7 +628,8 @@ unreachable end i32.const 1600 - local.tee $1 + local.set $1 + i32.const 1600 i32.const 0 i32.store i32.const 3168 @@ -653,10 +654,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -2193,14 +2194,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $1 - i32.const 1 - i32.ne - if + block $case0|0 local.get $1 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 end local.get $0 call $~lib/rt/pure/decrement diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 0a6d9adf60..c866b315bd 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -606,7 +606,8 @@ unreachable end i32.const 1216 - local.tee $1 + local.set $1 + i32.const 1216 i32.const 0 i32.store i32.const 2784 @@ -631,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index dcb6c1ef2d..3c9e9cfb9b 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -658,7 +658,8 @@ unreachable end i32.const 1536 - local.tee $1 + local.set $1 + i32.const 1536 i32.const 0 i32.store i32.const 3104 @@ -683,10 +684,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 9691d0bf30..7186a80625 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -989,7 +989,8 @@ unreachable end i32.const 11936 - local.tee $1 + local.set $1 + i32.const 11936 i32.const 0 i32.store i32.const 13504 @@ -1014,10 +1015,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -2384,10 +2385,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 @@ -9850,10 +9851,10 @@ i64.const 10 i64.lt_u if + local.get $0 local.get $2 i32.const 1 i32.shl - local.get $0 i32.add local.get $1 i64.const 48 @@ -9868,16 +9869,16 @@ i64.const 4294967295 i64.le_u if - local.get $2 local.get $1 i32.wrap_i64 - local.tee $2 + local.tee $3 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $3 + local.set $2 local.get $0 - local.get $2 local.get $3 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -9886,10 +9887,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $3 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $3 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -11230,9 +11231,9 @@ (local $27 i32) (local $28 i32) (local $29 i32) - (local $30 i32) - (local $31 f32) - (local $32 f64) + (local $30 f32) + (local $31 f64) + (local $32 i32) (local $33 i32) (local $34 i32) (local $35 i32) @@ -11277,52 +11278,51 @@ i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 i32.eqz if i32.const 12 i32.const 2 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.set $0 + local.set $2 end - local.get $0 - local.tee $1 + local.get $2 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.store offset=4 - local.get $0 + local.get $2 i32.const 0 i32.store offset=8 i32.const 1 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $0 i32.const 0 i32.const 1 call $~lib/memory/memory.fill + local.get $0 + local.tee $3 local.get $2 - local.tee $0 - local.get $1 i32.load - local.tee $4 + local.tee $1 i32.ne if - local.get $0 + local.get $3 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end - local.get $1 - local.get $0 + local.get $2 + local.get $3 i32.store - local.get $1 local.get $2 + local.get $0 i32.store offset=4 - local.get $1 + local.get $2 i32.const 1 i32.store offset=8 global.get $std/array/arr @@ -11337,7 +11337,7 @@ unreachable end call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release i32.const 5 i32.const 0 @@ -11345,20 +11345,20 @@ i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $4 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $6 call $std/array/isArraysEqual i32.eqz if @@ -11369,20 +11369,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $5 call $std/array/isArraysEqual i32.eqz if @@ -11393,13 +11393,13 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 i32.const 5 i32.const 0 i32.const 6 @@ -11417,20 +11417,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 2 i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $1 call $std/array/isArraysEqual i32.eqz if @@ -11441,20 +11441,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 i32.const 5 i32.const 0 i32.const 6 i32.const 1664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $0 call $std/array/isArraysEqual i32.eqz if @@ -11465,17 +11465,17 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 call $~lib/rt/pure/__release - local.get $1 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $5 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $1 call $~lib/rt/pure/__release - local.get $10 + local.get $0 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -11483,20 +11483,20 @@ i32.const 1696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $4 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11508,20 +11508,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $5 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11533,13 +11533,13 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 i32.const 5 i32.const 2 i32.const 7 @@ -11558,20 +11558,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 2 i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 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 $1 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11583,20 +11583,20 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $0 + local.get $4 i32.const 5 i32.const 2 i32.const 7 i32.const 1936 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11608,17 +11608,17 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $4 call $~lib/rt/pure/__release - local.get $1 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $5 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $1 call $~lib/rt/pure/__release - local.get $10 + local.get $0 call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 @@ -11883,20 +11883,20 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 - i32.load offset=4 local.tee $1 + i32.load offset=4 + local.tee $0 i32.const 0 call $std/array/Ref#constructor i32.store - local.get $1 + local.get $0 i32.const 0 call $std/array/Ref#constructor i32.store offset=4 - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#set:length - local.get $0 + local.get $1 i32.load offset=12 if i32.const 0 @@ -11906,15 +11906,15 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 call $~lib/rt/pure/__release i32.const 0 call $~lib/array/Array#constructor - local.set $1 + local.set $5 global.get $std/array/arr - local.get $1 + local.get $5 call $~lib/array/Array#concat - local.set $2 + local.set $1 global.get $std/array/arr call $std/array/internalCapacity i32.const 3 @@ -11939,7 +11939,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.load offset=12 i32.const 3 i32.ne @@ -11951,14 +11951,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 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 global.get $std/array/arr @@ -11973,7 +11973,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 0 call $~lib/array/Array#__get i32.const 43 @@ -11986,7 +11986,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 call $~lib/array/Array#__get i32.const 44 @@ -11999,7 +11999,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 2 call $~lib/array/Array#__get i32.const 45 @@ -12012,19 +12012,19 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $5 i32.const 46 call $~lib/array/Array#push drop - local.get $1 + local.get $5 i32.const 47 call $~lib/array/Array#push drop global.get $std/array/arr - local.get $1 + local.get $5 call $~lib/array/Array#concat - local.set $0 - local.get $2 + local.set $6 + local.get $1 call $~lib/rt/pure/__release global.get $std/array/arr call $std/array/internalCapacity @@ -12038,7 +12038,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $5 i32.load offset=12 i32.const 2 i32.ne @@ -12050,7 +12050,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.load offset=12 i32.const 5 i32.ne @@ -12062,7 +12062,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.const 0 call $~lib/array/Array#__get i32.const 43 @@ -12075,7 +12075,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.const 1 call $~lib/array/Array#__get i32.const 44 @@ -12088,7 +12088,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.const 2 call $~lib/array/Array#__get i32.const 45 @@ -12101,7 +12101,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.const 3 call $~lib/array/Array#__get i32.const 46 @@ -12114,7 +12114,7 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 i32.const 4 call $~lib/array/Array#__get i32.const 47 @@ -12127,10 +12127,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $6 call $~lib/array/Array#pop drop - local.get $0 + local.get $6 i32.load offset=12 i32.const 4 i32.ne @@ -12148,7 +12148,7 @@ i32.const 2048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=12 if i32.const 0 @@ -12158,13 +12158,13 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 global.get $std/array/arr call $~lib/array/Array#concat - local.set $3 - local.get $0 + local.set $1 + local.get $6 call $~lib/rt/pure/__release - local.get $3 + local.get $1 i32.load offset=12 i32.const 3 i32.ne @@ -12176,7 +12176,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.load offset=12 if i32.const 0 @@ -12186,13 +12186,13 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $5 call $~lib/rt/pure/__release - local.get $3 + local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -12205,14 +12205,14 @@ i32.const 3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $2 + local.tee $21 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 $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12238,14 +12238,14 @@ i32.const 3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $4 + local.tee $23 i32.const 5 i32.const 2 i32.const 3 i32.const 2208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $24 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12263,21 +12263,22 @@ i32.const 2256 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain + local.set $0 local.get $1 call $~lib/rt/pure/__release - local.tee $1 + local.get $0 i32.const 1 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $14 + local.tee $11 i32.const 5 i32.const 2 i32.const 3 i32.const 2304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12295,21 +12296,21 @@ i32.const 2352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 2 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $5 + local.tee $18 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 $19 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12327,21 +12328,21 @@ i32.const 2448 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 0 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $9 + local.tee $12 i32.const 5 i32.const 2 i32.const 3 i32.const 2496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12359,21 +12360,21 @@ i32.const 2544 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 1 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $7 + local.tee $14 i32.const 5 i32.const 2 i32.const 3 i32.const 2592 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12391,21 +12392,21 @@ i32.const 2640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 1 i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $12 + local.tee $16 i32.const 5 i32.const 2 i32.const 3 i32.const 2688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12423,21 +12424,21 @@ i32.const 2736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 0 i32.const -2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $15 + local.tee $10 i32.const 5 i32.const 2 i32.const 3 i32.const 2784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12455,21 +12456,21 @@ i32.const 2832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $1 + local.get $0 call $~lib/rt/pure/__release - local.tee $1 + local.tee $0 i32.const 0 i32.const -2 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $17 + local.tee $7 i32.const 5 i32.const 2 i32.const 3 i32.const 2880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12487,22 +12488,21 @@ 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 + call $~lib/rt/pure/__release + local.tee $0 i32.const -4 i32.const -3 i32.const -2 call $~lib/array/Array#copyWithin - local.tee $19 + local.tee $4 i32.const 5 i32.const 2 i32.const 3 i32.const 2976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12520,22 +12520,21 @@ 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 + local.tee $0 i32.const -4 i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $20 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 i32.const 3072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12553,10 +12552,10 @@ 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 $20 local.get $0 + call $~lib/rt/pure/__release + local.get $20 i32.const -4 i32.const -3 i32.const 2147483647 @@ -12568,7 +12567,7 @@ i32.const 3168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 + local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12580,55 +12579,55 @@ 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 $10 + local.get $20 call $~lib/rt/pure/__release - local.get $14 + local.get $21 call $~lib/rt/pure/__release local.get $22 call $~lib/rt/pure/__release - local.get $5 + local.get $23 call $~lib/rt/pure/__release - local.get $6 + local.get $24 call $~lib/rt/pure/__release - local.get $9 + local.get $11 call $~lib/rt/pure/__release - local.get $8 + local.get $17 call $~lib/rt/pure/__release - local.get $7 + local.get $18 call $~lib/rt/pure/__release - local.get $11 + local.get $19 call $~lib/rt/pure/__release local.get $12 call $~lib/rt/pure/__release - local.get $24 + local.get $13 + 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 + local.get $2 call $~lib/rt/pure/__release - local.get $13 + local.get $10 call $~lib/rt/pure/__release - local.get $19 + local.get $8 call $~lib/rt/pure/__release - local.get $18 + local.get $7 call $~lib/rt/pure/__release - local.get $20 + local.get $9 call $~lib/rt/pure/__release - local.get $21 + local.get $4 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $3 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $23 + local.get $0 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 42 @@ -13208,36 +13207,36 @@ i32.const 3216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 - local.set $4 - i32.const 0 + local.tee $4 local.set $0 + i32.const 0 + local.set $3 block $__inlined_func$~lib/array/Array#indexOf - local.get $1 + local.get $4 i32.load offset=12 - local.tee $2 + local.tee $5 if (result i32) i32.const 0 - local.get $2 + local.get $5 i32.ge_s else i32.const 1 end if i32.const -1 - local.set $0 + local.set $3 br $__inlined_func$~lib/array/Array#indexOf end - local.get $4 + local.get $0 i32.load offset=4 - local.set $3 + local.set $0 loop $while-continue|0 - local.get $0 - local.get $2 + local.get $3 + local.get $5 i32.lt_s if - local.get $3 local.get $0 + local.get $3 i32.const 2 i32.shl i32.add @@ -13245,17 +13244,17 @@ f32.const nan:0x400000 f32.eq br_if $__inlined_func$~lib/array/Array#indexOf - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $while-continue|0 end end i32.const -1 - local.set $0 + local.set $3 end - local.get $0 + local.get $3 i32.const -1 i32.ne if @@ -13272,36 +13271,36 @@ i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 - local.set $10 - i32.const 0 + local.tee $6 local.set $0 + i32.const 0 + local.set $3 block $__inlined_func$~lib/array/Array#indexOf - local.get $2 + local.get $6 i32.load offset=12 - local.tee $3 + local.tee $5 if (result i32) i32.const 0 - local.get $3 + local.get $5 i32.ge_s else i32.const 1 end if i32.const -1 - local.set $0 + local.set $3 br $__inlined_func$~lib/array/Array#indexOf end - local.get $10 + local.get $0 i32.load offset=4 - local.set $4 + local.set $0 loop $while-continue|019 - local.get $0 local.get $3 + local.get $5 i32.lt_s if - local.get $4 local.get $0 + local.get $3 i32.const 3 i32.shl i32.add @@ -13309,17 +13308,17 @@ f64.const nan:0x8000000000000 f64.eq br_if $__inlined_func$~lib/array/Array#indexOf - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $while-continue|019 end end i32.const -1 - local.set $0 + local.set $3 end - local.get $0 + local.get $3 i32.const -1 i32.ne if @@ -13330,9 +13329,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $6 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 44 @@ -13472,7 +13471,7 @@ end block $__inlined_func$~lib/array/Array#includes (result i32) i32.const 0 - local.set $0 + local.set $2 i32.const 0 i32.const 1 i32.const 2 @@ -13480,7 +13479,7 @@ i32.const 3280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $4 i32.load offset=12 local.tee $3 if (result i32) @@ -13492,37 +13491,37 @@ end br_if $__inlined_func$~lib/array/Array#includes drop - local.get $2 + local.get $4 i32.load offset=4 - local.set $10 + local.set $0 loop $while-continue|020 - local.get $0 + local.get $2 local.get $3 i32.lt_s if i32.const 1 - local.get $10 local.get $0 + local.get $2 i32.const 2 i32.shl i32.add f32.load - local.tee $31 + local.tee $30 f32.const nan:0x400000 f32.eq if (result i32) i32.const 1 else - local.get $31 - local.get $31 + local.get $30 + local.get $30 f32.ne end br_if $__inlined_func$~lib/array/Array#includes drop - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $while-continue|020 end end @@ -13539,7 +13538,7 @@ end block $__inlined_func$~lib/array/Array#includes (result i32) i32.const 0 - local.set $0 + local.set $3 i32.const 0 i32.const 1 i32.const 3 @@ -13547,49 +13546,49 @@ i32.const 3312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $6 i32.load offset=12 - local.tee $4 + local.tee $5 if (result i32) i32.const 0 - local.get $4 + local.get $5 i32.ge_s else i32.const 1 end br_if $__inlined_func$~lib/array/Array#includes drop - local.get $3 + local.get $6 i32.load offset=4 - local.set $14 + local.set $0 loop $while-continue|021 - local.get $0 - local.get $4 + local.get $3 + local.get $5 i32.lt_s if i32.const 1 - local.get $14 local.get $0 + local.get $3 i32.const 3 i32.shl i32.add f64.load - local.tee $32 + local.tee $31 f64.const nan:0x8000000000000 f64.eq if (result i32) i32.const 1 else - local.get $32 - local.get $32 + local.get $31 + local.get $31 f64.ne end br_if $__inlined_func$~lib/array/Array#includes drop - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $while-continue|021 end end @@ -13659,9 +13658,9 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $6 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -13669,18 +13668,18 @@ i32.const 3344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $3 + local.tee $35 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 $36 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13692,14 +13691,14 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.const 2 i32.const 3 i32.const 3440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $37 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13717,21 +13716,21 @@ i32.const 3456 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 + call $~lib/rt/pure/__release + local.get $1 i32.const 0 i32.const 0 call $~lib/array/Array#splice - local.tee $6 + local.tee $38 i32.const 0 i32.const 2 i32.const 3 i32.const 3504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $39 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13743,14 +13742,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 3520 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13768,21 +13767,20 @@ i32.const 3568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $7 + local.tee $41 i32.const 3 i32.const 2 i32.const 3 i32.const 3616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $42 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13801,7 +13799,7 @@ i32.const 3648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $43 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13819,21 +13817,20 @@ i32.const 3680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $2 local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.tee $1 i32.const 2 i32.const 2 call $~lib/array/Array#splice - local.tee $15 + local.tee $44 i32.const 2 i32.const 2 i32.const 3 i32.const 3728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $45 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13845,14 +13842,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const 2 i32.const 3 i32.const 3760 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 + local.tee $46 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13870,21 +13867,20 @@ i32.const 3792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $0 - local.get $2 + local.get $1 call $~lib/rt/pure/__release - local.get $0 + local.tee $1 i32.const 0 i32.const 1 call $~lib/array/Array#splice - local.tee $13 + local.tee $47 i32.const 1 i32.const 2 i32.const 3 i32.const 3840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $48 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13896,14 +13892,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 4 i32.const 2 i32.const 3 i32.const 3872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $49 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13921,20 +13917,20 @@ i32.const 3904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const -1 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $20 + local.tee $50 i32.const 1 i32.const 2 i32.const 3 i32.const 3952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $51 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13946,14 +13942,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 4 i32.const 2 i32.const 3 i32.const 3984 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 + local.tee $52 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13971,20 +13967,20 @@ i32.const 4016 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const -2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $25 + local.tee $53 i32.const 2 i32.const 2 i32.const 3 i32.const 4064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $26 + local.tee $54 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13996,14 +13992,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 3 i32.const 2 i32.const 3 i32.const 4096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $27 + local.tee $55 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14021,20 +14017,20 @@ i32.const 4128 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const -2 i32.const 1 call $~lib/array/Array#splice - local.tee $28 + local.tee $56 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 $57 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14046,14 +14042,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 4 i32.const 2 i32.const 3 i32.const 4208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $26 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14071,20 +14067,20 @@ i32.const 4240 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const -7 i32.const 1 call $~lib/array/Array#splice - local.tee $33 + local.tee $27 i32.const 1 i32.const 2 i32.const 3 i32.const 4288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14096,14 +14092,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 4 i32.const 2 i32.const 3 i32.const 4320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $35 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14121,20 +14117,20 @@ i32.const 4352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const -2 i32.const -1 call $~lib/array/Array#splice - local.tee $36 + local.tee $22 i32.const 0 i32.const 2 i32.const 3 i32.const 4400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14146,14 +14142,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 4416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $38 + local.tee $24 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14171,20 +14167,20 @@ i32.const 4464 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const 1 i32.const -2 call $~lib/array/Array#splice - local.tee $39 + local.tee $11 i32.const 0 i32.const 2 i32.const 3 i32.const 4512 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $40 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14196,14 +14192,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 4528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $41 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14221,20 +14217,20 @@ i32.const 4576 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.get $0 + local.get $1 call $~lib/rt/pure/__release - local.tee $0 + local.tee $1 i32.const 4 i32.const 0 call $~lib/array/Array#splice - local.tee $42 + local.tee $19 i32.const 0 i32.const 2 i32.const 3 i32.const 4624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $43 + local.tee $12 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14246,14 +14242,14 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 4640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14271,21 +14267,20 @@ i32.const 4688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 - local.get $0 - call $~lib/rt/pure/__release local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 7 i32.const 0 call $~lib/array/Array#splice - local.tee $45 + local.tee $14 i32.const 0 i32.const 2 i32.const 3 i32.const 4736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $46 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14304,7 +14299,7 @@ i32.const 4752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $47 + local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14322,21 +14317,21 @@ i32.const 4800 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 + local.get $0 i32.const 7 i32.const 5 call $~lib/array/Array#splice - local.tee $48 + local.tee $2 i32.const 0 i32.const 2 i32.const 3 i32.const 4848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $49 + local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14348,14 +14343,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 5 i32.const 2 i32.const 3 i32.const 4864 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $50 + local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -14373,10 +14368,10 @@ i32.const 4912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $3 i32.const 1 call $~lib/array/Array#splice - local.tee $14 + local.tee $1 i32.load offset=12 if i32.const 0 @@ -14386,7 +14381,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $3 i32.load offset=12 if i32.const 0 @@ -14402,37 +14397,37 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $25 i32.load offset=4 - local.tee $0 + local.tee $5 i32.const 1 call $std/array/Ref#constructor i32.store - local.get $0 + local.get $5 i32.const 2 call $std/array/Ref#constructor i32.store offset=4 - local.get $0 + local.get $5 i32.const 3 call $std/array/Ref#constructor i32.store offset=8 - local.get $0 + local.get $5 i32.const 4 call $std/array/Ref#constructor i32.store offset=12 - local.get $0 + local.get $5 i32.const 5 call $std/array/Ref#constructor i32.store offset=16 - local.get $1 + local.get $3 call $~lib/rt/pure/__release - local.get $10 + local.get $25 i32.const 2 call $~lib/array/Array#splice - local.set $22 - local.get $14 + local.set $29 + local.get $1 call $~lib/rt/pure/__release - local.get $22 + local.get $29 i32.load offset=12 i32.const 2 i32.ne @@ -14444,10 +14439,10 @@ call $~lib/builtins/abort unreachable end - local.get $22 + local.get $29 i32.const 0 call $~lib/array/Array#__get - local.tee $51 + local.tee $7 i32.load i32.const 3 i32.ne @@ -14459,10 +14454,10 @@ call $~lib/builtins/abort unreachable end - local.get $22 + local.get $29 i32.const 1 call $~lib/array/Array#__get - local.tee $52 + local.tee $9 i32.load i32.const 4 i32.ne @@ -14474,7 +14469,7 @@ call $~lib/builtins/abort unreachable end - local.get $10 + local.get $25 i32.load offset=12 i32.const 3 i32.ne @@ -14486,10 +14481,10 @@ call $~lib/builtins/abort unreachable end - local.get $10 + local.get $25 i32.const 0 call $~lib/array/Array#__get - local.tee $53 + local.tee $4 i32.load i32.const 1 i32.ne @@ -14501,10 +14496,10 @@ call $~lib/builtins/abort unreachable end - local.get $10 + local.get $25 i32.const 1 call $~lib/array/Array#__get - local.tee $54 + local.tee $6 i32.load i32.const 2 i32.ne @@ -14516,10 +14511,10 @@ call $~lib/builtins/abort unreachable end - local.get $10 + local.get $25 i32.const 2 call $~lib/array/Array#__get - local.tee $55 + local.tee $5 i32.load i32.const 5 i32.ne @@ -14537,22 +14532,22 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $28 i32.load offset=4 - local.tee $0 + local.tee $1 i32.const 1 call $std/array/Ref#constructor i32.store - local.get $0 + local.get $1 i32.const 0 i32.store offset=4 - local.get $0 + local.get $1 i32.const 2 call $std/array/Ref#constructor i32.store offset=8 - local.get $14 + local.get $28 call $~lib/array/Array#splice - local.tee $24 + local.tee $32 i32.load offset=12 i32.const 1 i32.ne @@ -14564,11 +14559,11 @@ call $~lib/builtins/abort unreachable end - local.get $24 + local.get $32 i32.const 0 call $~lib/array/Array#__get - local.tee $0 - local.get $0 + local.tee $33 + local.get $33 i32.eqz if i32.const 5040 @@ -14589,7 +14584,7 @@ call $~lib/builtins/abort unreachable end - local.get $14 + local.get $28 i32.load offset=12 i32.const 2 i32.ne @@ -14601,10 +14596,10 @@ call $~lib/builtins/abort unreachable end - local.get $14 + local.get $28 i32.const 0 call $~lib/array/Array#__get - local.tee $56 + local.tee $3 if i32.const 0 i32.const 1296 @@ -14613,11 +14608,11 @@ call $~lib/builtins/abort unreachable end - local.get $14 + local.get $28 i32.const 1 call $~lib/array/Array#__get - local.tee $1 - local.get $1 + local.tee $34 + local.get $34 i32.eqz if i32.const 5040 @@ -14638,59 +14633,7 @@ call $~lib/builtins/abort unreachable end - 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 $6 - call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release - local.get $8 - call $~lib/rt/pure/__release - local.get $7 - call $~lib/rt/pure/__release - local.get $11 - call $~lib/rt/pure/__release - local.get $12 - 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 $13 - call $~lib/rt/pure/__release - local.get $19 - call $~lib/rt/pure/__release - local.get $18 - call $~lib/rt/pure/__release - local.get $20 - call $~lib/rt/pure/__release - local.get $21 - call $~lib/rt/pure/__release - local.get $23 - call $~lib/rt/pure/__release - local.get $25 - 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 $33 - call $~lib/rt/pure/__release - local.get $34 + local.get $0 call $~lib/rt/pure/__release local.get $35 call $~lib/rt/pure/__release @@ -14734,28 +14677,80 @@ call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release local.get $56 call $~lib/rt/pure/__release - local.get $1 + local.get $57 call $~lib/rt/pure/__release - global.get $std/array/arr - i32.const 0 - i32.const 0 - call $~lib/array/Array#__set - global.get $std/array/arr - i32.const 1 - i32.const 1 - call $~lib/array/Array#__set - global.get $std/array/arr - i32.const 2 - i32.const 2 - call $~lib/array/Array#__set - global.get $std/array/arr - i32.const 3 - i32.const 3 - call $~lib/array/Array#__set + local.get $26 + call $~lib/rt/pure/__release + local.get $27 + 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 $11 + 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 $13 + 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 $2 + call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $33 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $34 + call $~lib/rt/pure/__release + global.get $std/array/arr + i32.const 0 + i32.const 0 + call $~lib/array/Array#__set + global.get $std/array/arr + i32.const 1 + i32.const 1 + call $~lib/array/Array#__set + global.get $std/array/arr + i32.const 2 + i32.const 2 + call $~lib/array/Array#__set + global.get $std/array/arr + i32.const 3 + i32.const 3 + call $~lib/array/Array#__set global.get $std/array/arr i32.const 5088 call $~lib/array/Array#findIndex @@ -15220,19 +15215,19 @@ unreachable end i32.const 0 - local.set $0 + local.set $3 loop $for-loop|0 - local.get $0 + local.get $3 i32.const 100 i32.lt_s if global.get $std/array/arr call $~lib/array/Array#pop drop - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $for-loop|0 end end @@ -15253,62 +15248,62 @@ call $~lib/array/Array#push drop i32.const 0 - local.set $0 + local.set $3 global.get $std/array/arr - local.tee $1 + local.tee $9 i32.load offset=12 - local.tee $3 + local.tee $6 i32.const 2 i32.const 9 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $4 i32.load offset=4 - local.set $4 + local.set $5 loop $for-loop|039 - local.get $0 local.get $3 - local.get $1 + local.get $6 + local.get $9 i32.load offset=12 - local.tee $5 - local.get $3 - local.get $5 + local.tee $0 + local.get $6 + local.get $0 i32.lt_s select i32.lt_s if - local.get $0 + local.get $3 i32.const 2 i32.shl - local.tee $5 - local.get $1 + local.tee $1 + local.get $9 i32.load offset=4 i32.add i32.load - local.set $6 + local.set $0 i32.const 3 global.set $~argumentsLength - local.get $4 + local.get $1 local.get $5 i32.add - local.get $6 local.get $0 - local.get $1 + local.get $3 + local.get $9 i32.const 5760 i32.load call_indirect (type $i32_i32_i32_=>_f32) f32.store - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $for-loop|039 end end i32.const 5760 call $~lib/rt/pure/__release - local.get $2 + local.get $4 i32.load offset=12 i32.const 4 i32.ne @@ -15320,7 +15315,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 i32.const 0 call $~lib/array/Array#__get global.get $std/array/arr @@ -15431,7 +15426,7 @@ i32.const 3 call $~lib/array/Array#push drop - local.get $2 + local.get $4 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 5888 @@ -15864,22 +15859,22 @@ i32.const 6704 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 + local.set $17 i32.const 0 global.set $~argumentsLength - local.get $1 + local.get $17 call $~lib/array/Array#sort i32.const 6752 call $~lib/rt/pure/__release call $~lib/rt/pure/__release - local.get $1 + local.get $17 i32.const 8 i32.const 2 i32.const 9 i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 + local.tee $4 call $std/array/isArraysEqual i32.eqz if @@ -15896,22 +15891,22 @@ i32.const 6832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $2 + local.set $18 i32.const 0 global.set $~argumentsLength - local.get $2 + local.get $18 call $~lib/array/Array#sort i32.const 6912 call $~lib/rt/pure/__release call $~lib/rt/pure/__release - local.get $2 + local.get $18 i32.const 8 i32.const 3 i32.const 10 i32.const 6944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 + local.tee $6 call $std/array/isArraysEqual i32.eqz if @@ -15928,23 +15923,23 @@ i32.const 7024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $3 + local.set $19 i32.const 0 global.set $~argumentsLength - local.get $3 + local.get $19 i32.const 7072 call $~lib/array/Array#sort i32.const 7072 call $~lib/rt/pure/__release call $~lib/rt/pure/__release - local.get $3 + local.get $19 i32.const 5 i32.const 2 i32.const 3 i32.const 7104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15962,21 +15957,21 @@ i32.const 7152 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $4 + local.set $12 i32.const 0 global.set $~argumentsLength - local.get $4 + local.get $12 i32.const 0 call $~lib/array/Array#sort@varargs call $~lib/rt/pure/__release - local.get $4 + local.get $12 i32.const 5 i32.const 2 i32.const 7 i32.const 7232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15994,62 +15989,62 @@ i32.const 7280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $15 + local.set $7 i32.const 1 i32.const 2 i32.const 3 i32.const 7296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $5 + local.set $13 i32.const 2 i32.const 2 i32.const 3 i32.const 7328 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $6 + local.set $14 i32.const 4 i32.const 2 i32.const 3 i32.const 7360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $9 + local.set $15 i32.const 4 i32.const 2 i32.const 3 i32.const 7392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $0 + local.set $11 i32.const 64 call $std/array/createReverseOrderedArray - local.set $8 + local.set $16 i32.const 128 call $std/array/createReverseOrderedArray - local.set $7 + local.set $2 i32.const 1024 call $std/array/createReverseOrderedArray - local.set $11 + local.set $10 i32.const 10000 call $std/array/createReverseOrderedArray - local.set $12 + local.set $8 i32.const 512 call $std/array/createRandomOrderedArray - local.set $16 - local.get $15 + local.set $9 + local.get $7 call $std/array/assertSortedDefault - local.get $5 + local.get $13 call $std/array/assertSortedDefault - local.get $5 + local.get $13 i32.const 1 i32.const 2 i32.const 3 i32.const 7456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16061,16 +16056,16 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $14 call $std/array/assertSortedDefault - local.get $6 + local.get $14 i32.const 2 i32.const 2 i32.const 3 i32.const 7488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16082,10 +16077,10 @@ call $~lib/builtins/abort unreachable end - local.get $9 + local.get $15 call $std/array/assertSortedDefault - local.get $9 - local.get $0 + local.get $15 + local.get $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16097,10 +16092,10 @@ call $~lib/builtins/abort unreachable end - local.get $8 + local.get $16 call $std/array/assertSortedDefault - local.get $8 - local.get $0 + local.get $16 + local.get $11 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -16112,10 +16107,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $2 call $std/array/assertSortedDefault - local.get $7 - local.get $0 + local.get $2 + local.get $11 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -16127,10 +16122,10 @@ call $~lib/builtins/abort unreachable end - local.get $11 + local.get $10 call $std/array/assertSortedDefault + local.get $10 local.get $11 - local.get $0 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -16142,10 +16137,10 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $8 call $std/array/assertSortedDefault - local.get $12 - local.get $0 + local.get $8 + local.get $11 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -16157,70 +16152,70 @@ call $~lib/builtins/abort unreachable end - local.get $16 + local.get $9 call $std/array/assertSortedDefault - local.get $1 - call $~lib/rt/pure/__release local.get $17 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $13 + local.get $18 call $~lib/rt/pure/__release - local.get $3 + local.get $6 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release - local.get $18 + local.get $12 call $~lib/rt/pure/__release - local.get $15 + local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $7 call $~lib/rt/pure/__release - local.get $6 + local.get $13 call $~lib/rt/pure/__release - local.get $9 + local.get $14 call $~lib/rt/pure/__release - local.get $0 + local.get $15 call $~lib/rt/pure/__release - local.get $8 + local.get $11 call $~lib/rt/pure/__release - local.get $7 + local.get $16 call $~lib/rt/pure/__release - local.get $11 + local.get $2 call $~lib/rt/pure/__release - local.get $12 + local.get $10 call $~lib/rt/pure/__release - local.get $16 + local.get $8 call $~lib/rt/pure/__release - local.get $20 + local.get $9 call $~lib/rt/pure/__release - local.get $21 + local.get $1 + call $~lib/rt/pure/__release + local.get $0 call $~lib/rt/pure/__release i32.const 64 call $std/array/createRandomOrderedArray - local.set $0 + local.set $1 i32.const 257 call $std/array/createRandomOrderedArray - local.set $1 - local.get $0 + local.set $0 + local.get $1 i32.const 7520 call $std/array/assertSorted - local.get $0 + local.get $1 i32.const 7552 call $std/array/assertSorted - local.get $1 + local.get $0 i32.const 7584 call $std/array/assertSorted - local.get $1 + local.get $0 i32.const 7616 call $std/array/assertSorted - local.get $0 - call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release call $std/array/createReverseOrderedNestedArray local.tee $0 i32.const 7648 @@ -16239,7 +16234,7 @@ i32.const 7856 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $5 + local.set $10 i32.const 7 i32.const 2 i32.const 27 @@ -16250,74 +16245,74 @@ i32.const 1 global.set $~argumentsLength block $__inlined_func$std/array/isSorted<~lib/string/String|null> (result i32) - local.get $5 + local.get $10 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $3 i32.const 7952 call $~lib/rt/pure/__retain - local.tee $6 + local.tee $5 call $~lib/array/Array<~lib/array/Array>#sort - local.tee $7 + local.tee $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $6 + local.set $8 + local.get $5 call $~lib/rt/pure/__retain - local.set $2 + local.set $7 i32.const 1 - local.set $1 - local.get $0 + local.set $2 + local.get $8 i32.load offset=12 - local.set $11 + local.set $0 loop $for-loop|00 - local.get $1 - local.get $11 + local.get $2 + local.get $0 i32.lt_s if - local.get $0 - local.get $1 + local.get $8 + local.get $2 i32.const 1 i32.sub call $~lib/array/Array#__get - local.set $3 - local.get $0 - local.get $1 - call $~lib/array/Array#__get local.set $4 + local.get $8 + local.get $2 + call $~lib/array/Array#__get + local.set $6 i32.const 2 global.set $~argumentsLength - local.get $3 local.get $4 - local.get $2 + local.get $6 + local.get $7 i32.load call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if - local.get $0 + local.get $8 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release - local.get $3 + local.get $7 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release + local.get $6 + 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 + local.get $6 + call $~lib/rt/pure/__release + local.get $2 i32.const 1 i32.add - local.set $1 + local.set $2 br $for-loop|00 end end - local.get $0 + local.get $8 call $~lib/rt/pure/__release - local.get $2 + local.get $7 call $~lib/rt/pure/__release i32.const 1 end @@ -16330,15 +16325,15 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $1 call $~lib/rt/pure/__release - local.get $8 + local.get $3 call $~lib/rt/pure/__release - local.get $6 + local.get $5 call $~lib/rt/pure/__release i32.const 7952 call $~lib/rt/pure/__release - local.get $5 + local.get $10 local.get $9 call $std/array/isArraysEqual<~lib/string/String|null> i32.eqz @@ -16351,32 +16346,33 @@ unreachable end i32.const 0 - local.set $0 + local.set $2 i32.const 0 i32.const 400 call $~lib/array/Array<~lib/string/String>#constructor - local.set $1 + local.set $8 loop $for-loop|06 - local.get $0 + local.get $2 i32.const 400 i32.lt_s if - local.get $0 - local.set $3 call $~lib/math/NativeMath.random f64.const 32 f64.mul i32.trunc_f64_s - local.set $8 + local.set $4 i32.const 0 - local.set $6 + local.set $7 i32.const 7840 - local.set $0 - loop $for-loop|01 - local.get $6 - local.get $8 + local.set $3 + loop $for-loop|049 + local.get $7 + local.get $4 i32.lt_s if + local.get $3 + local.tee $1 + local.tee $0 block $__inlined_func$~lib/string/String#charAt (result i32) i32.const 7840 call $~lib/math/NativeMath.random @@ -16386,7 +16382,7 @@ f64.mul f64.floor i32.trunc_f64_s - local.tee $2 + local.tee $6 i32.const 6512 call $~lib/string/String#get:length i32.ge_u @@ -16395,69 +16391,66 @@ i32.const 2 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $4 - local.get $2 + local.tee $5 + local.get $6 i32.const 1 i32.shl i32.const 6512 i32.add i32.load16_u i32.store16 - local.get $4 + local.get $5 call $~lib/rt/pure/__retain end - local.set $2 - local.get $0 - local.tee $4 - local.get $0 - local.get $2 + local.tee $5 call $~lib/string/String.__concat - local.tee $7 - local.tee $0 + local.tee $6 + local.tee $3 + local.get $0 i32.ne if - local.get $0 + local.get $3 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end - local.get $2 - call $~lib/rt/pure/__release - local.get $7 + local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 i32.const 1 i32.add - local.set $6 - br $for-loop|01 + local.set $7 + br $for-loop|049 end end - local.get $1 + local.get $8 + local.get $2 local.get $3 - local.get $0 call $~lib/array/Array<~lib/array/Array>#__set - local.get $0 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $for-loop|06 end end i32.const 1 global.set $~argumentsLength - local.get $1 + local.get $8 i32.const 8016 call $std/array/assertSorted<~lib/array/Array> i32.const 8016 call $~lib/rt/pure/__release - local.get $5 + local.get $10 call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $1 + local.get $8 call $~lib/rt/pure/__release i32.const 2 i32.const 0 @@ -16465,15 +16458,15 @@ i32.const 8048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $12 i32.load offset=4 - local.get $0 + local.get $12 i32.load offset=12 call $~lib/util/string/joinBooleanArray - local.set $1 + local.set $13 i32.const 8144 call $~lib/rt/pure/__release - local.get $1 + local.get $13 i32.const 8176 call $~lib/string/String.__eq i32.eqz @@ -16491,10 +16484,10 @@ i32.const 8224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $10 i32.const 7840 call $~lib/array/Array#join - local.tee $9 + local.tee $8 i32.const 8576 call $~lib/string/String.__eq i32.eqz @@ -16512,10 +16505,10 @@ i32.const 8608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 i32.const 8640 call $~lib/array/Array#join - local.tee $7 + local.tee $9 i32.const 8576 call $~lib/string/String.__eq i32.eqz @@ -16533,10 +16526,10 @@ i32.const 8672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $4 i32.const 8704 call $~lib/array/Array#join - local.tee $12 + local.tee $6 i32.const 8736 call $~lib/string/String.__eq i32.eqz @@ -16554,15 +16547,15 @@ i32.const 8800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $14 i32.load offset=4 - local.get $2 + local.get $14 i32.load offset=12 call $~lib/util/string/joinFloatArray - local.set $3 + local.set $15 i32.const 8864 call $~lib/rt/pure/__release - local.get $3 + local.get $15 i32.const 9952 call $~lib/string/String.__eq i32.eqz @@ -16580,10 +16573,10 @@ i32.const 10080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 + local.tee $5 i32.const 7840 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $16 + local.tee $3 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -16601,22 +16594,22 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $16 i32.load offset=4 - local.tee $5 + local.tee $0 i32.const 0 call $std/array/Ref#constructor i32.store - local.get $5 + local.get $0 i32.const 0 i32.store offset=4 - local.get $5 + local.get $0 i32.const 0 call $std/array/Ref#constructor i32.store offset=8 - local.get $4 + local.get $16 call $~lib/array/Array#join - local.tee $17 + local.tee $1 i32.const 10160 call $~lib/string/String.__eq i32.eqz @@ -16634,19 +16627,19 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $2 i32.load offset=4 - local.tee $13 + local.tee $0 i32.const 0 call $std/array/Ref#constructor i32.store - local.get $13 + local.get $0 i32.const 0 call $std/array/Ref#constructor i32.store offset=4 - local.get $5 + local.get $2 call $~lib/array/Array#join - local.tee $13 + local.tee $0 i32.const 10240 call $~lib/string/String.__eq i32.eqz @@ -16658,37 +16651,37 @@ call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/pure/__release - local.get $1 + local.get $12 call $~lib/rt/pure/__release - local.get $6 + local.get $13 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $11 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $6 call $~lib/rt/pure/__release - local.get $3 + local.get $14 call $~lib/rt/pure/__release local.get $15 call $~lib/rt/pure/__release - local.get $16 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $3 call $~lib/rt/pure/__release - local.get $17 + local.get $16 call $~lib/rt/pure/__release - local.get $5 + local.get $1 call $~lib/rt/pure/__release - local.get $13 + local.get $2 + call $~lib/rt/pure/__release + local.get $0 call $~lib/rt/pure/__release i32.const 0 i32.const 2 @@ -16696,33 +16689,33 @@ i32.const 10320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $0 + local.set $21 i32.const 1 i32.const 2 i32.const 3 i32.const 10336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $4 + local.set $22 i32.const 2 i32.const 2 i32.const 3 i32.const 10368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $5 + local.set $23 i32.const 4 i32.const 2 i32.const 3 i32.const 10400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $6 - local.get $0 + local.set $24 + local.get $21 i32.const 8144 call $~lib/array/Array#join - local.tee $1 - local.get $1 + local.tee $0 + local.get $0 i32.const 7840 call $~lib/string/String.__eq i32.eqz @@ -16734,12 +16727,12 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $22 i32.const 8144 call $~lib/array/Array#join - local.tee $1 - local.set $21 - local.get $1 + local.tee $0 + local.set $8 + local.get $0 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -16751,12 +16744,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $23 i32.const 8144 call $~lib/array/Array#join - local.tee $1 - local.set $23 - local.get $1 + local.tee $0 + local.set $7 + local.get $0 i32.const 10432 call $~lib/string/String.__eq i32.eqz @@ -16768,12 +16761,12 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $24 i32.const 8144 call $~lib/array/Array#join - local.tee $1 - local.set $25 - local.get $1 + local.tee $0 + local.set $9 + local.get $0 i32.const 10464 call $~lib/string/String.__eq i32.eqz @@ -16791,15 +16784,15 @@ i32.const 10496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $11 i32.load offset=4 - local.get $9 + local.get $11 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $8 + local.set $17 i32.const 8144 call $~lib/rt/pure/__release - local.get $8 + local.get $17 i32.const 10528 call $~lib/string/String.__eq i32.eqz @@ -16817,15 +16810,15 @@ i32.const 10560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $18 i32.load offset=4 - local.get $7 + local.get $18 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $11 + local.set $19 i32.const 8144 call $~lib/rt/pure/__release - local.get $11 + local.get $19 i32.const 10592 call $~lib/string/String.__eq i32.eqz @@ -16848,10 +16841,10 @@ local.get $12 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $15 + local.set $13 i32.const 8144 call $~lib/rt/pure/__release - local.get $15 + local.get $13 i32.const 10688 call $~lib/string/String.__eq i32.eqz @@ -16869,15 +16862,15 @@ i32.const 10752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $14 i32.load offset=4 - local.get $16 + local.get $14 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.set $17 + local.set $15 i32.const 8144 call $~lib/rt/pure/__release - local.get $17 + local.get $15 i32.const 10800 call $~lib/string/String.__eq i32.eqz @@ -16895,12 +16888,12 @@ i32.const 10912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $26 + local.tee $4 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $1 - local.set $27 - local.get $1 + local.tee $0 + local.set $6 + local.get $0 i32.const 10960 call $~lib/string/String.__eq i32.eqz @@ -16918,12 +16911,12 @@ i32.const 11072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 + local.tee $5 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join - local.tee $1 - local.set $29 - local.get $1 + local.tee $0 + local.set $3 + local.get $0 i32.const 11104 call $~lib/string/String.__eq i32.eqz @@ -16941,9 +16934,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $26 i32.load offset=4 - local.tee $2 + local.tee $0 i32.const 2 i32.const 2 i32.const 3 @@ -16951,7 +16944,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $0 i32.const 2 i32.const 2 i32.const 3 @@ -16959,15 +16952,15 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $1 + local.get $26 i32.load offset=4 - local.get $1 + local.get $26 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.set $13 + local.set $16 i32.const 8144 call $~lib/rt/pure/__release - local.get $13 + local.get $16 i32.const 11200 call $~lib/string/String.__eq i32.eqz @@ -16985,9 +16978,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $27 i32.load offset=4 - local.tee $3 + local.tee $0 i32.const 2 i32.const 0 i32.const 6 @@ -16995,7 +16988,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $0 i32.const 2 i32.const 0 i32.const 6 @@ -17003,15 +16996,15 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $2 + local.get $27 i32.load offset=4 - local.get $2 + local.get $27 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.set $19 + local.set $2 i32.const 8144 call $~lib/rt/pure/__release - local.get $19 + local.get $2 i32.const 11200 call $~lib/string/String.__eq i32.eqz @@ -17029,7 +17022,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $20 i32.load offset=4 i32.const 1 i32.const 2 @@ -17037,7 +17030,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $0 i32.load offset=4 i32.const 1 i32.const 2 @@ -17046,17 +17039,17 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $30 + local.get $0 i32.store - local.get $3 + local.get $20 i32.load offset=4 - local.get $3 + local.get $20 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> - local.set $18 + local.set $0 i32.const 8144 call $~lib/rt/pure/__release - local.get $18 + local.get $0 i32.const 10048 call $~lib/string/String.__eq i32.eqz @@ -17068,50 +17061,50 @@ call $~lib/builtins/abort unreachable 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 $6 - call $~lib/rt/pure/__release - 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 $25 + local.get $24 call $~lib/rt/pure/__release - local.get $9 call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $11 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 $15 + local.get $13 call $~lib/rt/pure/__release - local.get $16 + local.get $14 call $~lib/rt/pure/__release - local.get $17 + local.get $15 call $~lib/rt/pure/__release - local.get $26 + local.get $4 call $~lib/rt/pure/__release - local.get $27 + local.get $6 call $~lib/rt/pure/__release - local.get $28 + local.get $5 call $~lib/rt/pure/__release - local.get $29 + local.get $3 call $~lib/rt/pure/__release - local.get $13 + local.get $16 call $~lib/rt/pure/__release - local.get $19 + local.get $2 call $~lib/rt/pure/__release - local.get $18 + local.get $0 call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/rt/pure/__release @@ -17121,7 +17114,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $4 i32.load offset=4 local.tee $0 i32.const 1 @@ -17155,9 +17148,9 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 - local.get $6 + local.get $4 call $~lib/array/Array<~lib/array/Array>#flat - local.tee $9 + local.tee $6 i32.load offset=12 i32.const 10 i32.ne @@ -17170,16 +17163,16 @@ unreachable end i32.const 0 - local.set $0 + local.set $3 loop $for-loop|1 - local.get $0 + local.get $3 i32.const 10 i32.lt_s if - local.get $9 - local.get $0 + local.get $6 + local.get $3 call $~lib/array/Array#__get - local.get $0 + local.get $3 i32.ne if i32.const 0 @@ -17189,10 +17182,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $for-loop|1 end end @@ -17202,7 +17195,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $5 i32.load offset=4 local.tee $0 i32.const 1 @@ -17236,17 +17229,17 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 - local.get $8 + local.get $5 call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat - local.set $4 + local.set $7 i32.const 8 i32.const 2 i32.const 27 i32.const 11808 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $5 - local.get $4 + local.set $9 + local.get $7 i32.load offset=12 i32.const 8 i32.ne @@ -17259,21 +17252,21 @@ unreachable end i32.const 0 - local.set $0 + local.set $3 loop $for-loop|2 - local.get $0 - local.get $5 + local.get $3 + local.get $9 i32.load offset=12 i32.lt_s if - local.get $4 - local.get $0 + local.get $7 + local.get $3 call $~lib/array/Array#__get - local.tee $7 - local.get $5 - local.get $0 + local.tee $1 + local.get $9 + local.get $3 call $~lib/array/Array#__get - local.tee $11 + local.tee $0 call $~lib/string/String.__eq i32.eqz if @@ -17284,14 +17277,14 @@ call $~lib/builtins/abort unreachable end - local.get $7 - call $~lib/rt/pure/__release - local.get $11 + local.get $1 call $~lib/rt/pure/__release local.get $0 + call $~lib/rt/pure/__release + local.get $3 i32.const 1 i32.add - local.set $0 + local.set $3 br $for-loop|2 end end @@ -17301,9 +17294,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $1 i32.load offset=4 - local.tee $7 + local.tee $0 i32.const 0 i32.const 2 i32.const 3 @@ -17311,7 +17304,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store - local.get $7 + local.get $0 i32.const 0 i32.const 2 i32.const 3 @@ -17319,9 +17312,9 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=4 - local.get $0 + local.get $1 call $~lib/array/Array<~lib/array/Array>#flat - local.tee $7 + local.tee $0 i32.load offset=12 if i32.const 0 @@ -17331,33 +17324,33 @@ call $~lib/builtins/abort unreachable end + local.get $1 + call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $7 + local.get $25 call $~lib/rt/pure/__release - local.get $10 + local.get $29 call $~lib/rt/pure/__release - local.get $22 + local.get $28 call $~lib/rt/pure/__release - local.get $14 + local.get $32 call $~lib/rt/pure/__release - local.get $24 + local.get $26 call $~lib/rt/pure/__release - local.get $1 + local.get $27 call $~lib/rt/pure/__release - local.get $2 + local.get $20 call $~lib/rt/pure/__release - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release ) (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index b0dafe80b1..2def9036c8 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -620,7 +620,8 @@ unreachable end i32.const 1440 - local.tee $1 + local.set $1 + i32.const 1440 i32.const 0 i32.store i32.const 3008 @@ -645,10 +646,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 1fc37200c5..fe7da19535 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -628,7 +628,8 @@ unreachable end i32.const 1520 - local.tee $1 + local.set $1 + i32.const 1520 i32.const 0 i32.store i32.const 3088 @@ -653,10 +654,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index e1e10c778f..43347517fe 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -627,7 +627,8 @@ unreachable end i32.const 1568 - local.tee $1 + local.set $1 + i32.const 1568 i32.const 0 i32.store i32.const 3136 @@ -652,10 +653,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1867,10 +1868,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 diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index e9c68a62b6..ebc5c36531 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -2616,20 +2616,20 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.set $5 + local.set $4 local.get $6 i32.wrap_i64 + local.set $3 local.get $1 i64.reinterpret_f64 local.tee $6 - i64.const 32 - i64.shr_u i32.wrap_i64 - local.set $4 + local.tee $7 local.get $6 + i64.const 32 + i64.shr_u i32.wrap_i64 - local.tee $7 - local.get $4 + local.tee $5 i32.const 1072693248 i32.sub i32.or @@ -2639,24 +2639,25 @@ call $~lib/math/NativeMath.atan return end - local.get $4 + local.get $5 i32.const 30 i32.shr_u i32.const 2 i32.and - local.get $5 + local.get $4 i32.const 31 i32.shr_u i32.or local.set $2 - local.get $4 + local.get $5 i32.const 2147483647 i32.and - local.set $4 - local.get $5 + local.set $5 + local.get $4 i32.const 2147483647 i32.and - local.tee $5 + local.tee $4 + local.get $3 i32.or i32.eqz if @@ -2686,12 +2687,12 @@ end end block $folding-inner0 - local.get $4 + local.get $5 local.get $7 i32.or i32.eqz br_if $folding-inner0 - local.get $4 + local.get $5 i32.const 2146435072 i32.eq if @@ -2707,7 +2708,7 @@ i32.const 2 i32.and select - local.get $5 + local.get $4 i32.const 2146435072 i32.eq select @@ -2721,20 +2722,20 @@ return end i32.const 1 - local.get $5 + local.get $4 i32.const 2146435072 i32.eq - local.get $4 + local.get $5 i32.const 67108864 i32.add - local.get $5 + local.get $4 i32.lt_u select br_if $folding-inner0 - local.get $5 + local.get $4 i32.const 67108864 i32.add - local.get $4 + local.get $5 i32.lt_u i32.const 0 local.get $2 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 27157c4e65..85dee5ffbe 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -624,7 +624,8 @@ unreachable end i32.const 1456 - local.tee $1 + local.set $1 + i32.const 1456 i32.const 0 i32.store i32.const 3024 @@ -649,10 +650,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1853,10 +1854,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 diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 1566c00a87..f5bd2d5b6b 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -658,7 +658,8 @@ unreachable end i32.const 1472 - local.tee $1 + local.set $1 + i32.const 1472 i32.const 0 i32.store i32.const 3040 @@ -683,10 +684,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 84d97b0c7c..fdcb5e7eeb 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -950,7 +950,8 @@ unreachable end i32.const 18912 - local.tee $1 + local.set $1 + i32.const 18912 i32.const 0 i32.store i32.const 20480 @@ -975,10 +976,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1779,10 +1780,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 @@ -1885,34 +1886,35 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length - local.tee $6 + local.tee $8 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $6 + local.get $8 i32.const 3 i32.mul i32.const 1 i32.shl call $~lib/rt/tlsf/__alloc - local.set $8 + local.set $10 i32.const 1216 call $~lib/string/String#get:length local.set $3 loop $for-loop|0 - local.get $7 - local.get $6 + local.get $9 + local.get $8 i32.lt_u if - local.get $7 + local.get $0 + local.get $9 i32.const 1 i32.shl - local.get $0 i32.add i32.load16_u local.tee $2 @@ -1920,8 +1922,8 @@ i32.shr_u if block $for-continue|0 - local.get $7 - local.get $6 + local.get $9 + local.get $8 i32.const 1 i32.sub i32.lt_u @@ -1933,23 +1935,23 @@ i32.lt_u select if - local.get $7 + local.get $0 + local.get $9 i32.const 1 i32.shl - local.get $0 i32.add i32.load16_u offset=2 - local.tee $9 + local.tee $4 i32.const 56319 i32.sub i32.const 1025 i32.lt_u if - local.get $7 + local.get $9 i32.const 1 i32.add - local.set $7 - local.get $9 + local.set $9 + local.get $4 i32.const 1023 i32.and local.get $2 @@ -1966,20 +1968,20 @@ i32.ge_u if local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add - local.get $9 + local.get $1 + local.get $4 i32.const 16 i32.shl - local.get $1 i32.or i32.store - local.get $10 + local.get $11 i32.const 1 i32.add - local.set $10 + local.set $11 br $for-continue|0 end end @@ -1991,9 +1993,9 @@ i32.le_u if local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.const 26 @@ -2006,24 +2008,26 @@ i32.const 64056 i32.le_u if (result i32) - block $~lib/util/casemap/bsearch|inlined.0 (result i32) - local.get $3 - local.set $1 - i32.const 0 - local.set $5 + local.get $3 + local.set $1 + i32.const 0 + local.set $7 + block $~lib/util/casemap/bsearch|inlined.0 loop $while-continue|1 - local.get $5 + local.get $7 local.get $1 i32.le_s if local.get $1 - local.get $5 + local.get $7 i32.add i32.const 3 i32.shr_u i32.const 2 i32.shl - local.tee $9 + local.tee $6 + local.set $4 + local.get $6 i32.const 1 i32.shl i32.const 1216 @@ -2031,31 +2035,30 @@ i32.load16_u local.get $2 i32.sub - local.tee $4 + local.tee $5 + i32.eqz + br_if $~lib/util/casemap/bsearch|inlined.0 + local.get $5 + 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 $6 + i32.const 4 + i32.add + local.set $7 else - local.get $9 - br $~lib/util/casemap/bsearch|inlined.0 + local.get $6 + i32.const 4 + i32.sub + local.set $1 end br $while-continue|1 end end i32.const -1 + local.set $4 end + local.get $4 else i32.const -1 end @@ -2068,29 +2071,29 @@ i32.shl i32.const 1216 i32.add - local.tee $1 + local.tee $4 i32.load16_u offset=6 local.set $2 local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add - local.tee $9 - local.get $1 + local.tee $1 + local.get $4 i32.load offset=2 i32.store - local.get $9 + local.get $1 local.get $2 i32.store16 offset=4 + local.get $11 local.get $2 i32.const 0 i32.ne i32.const 1 i32.add - local.get $10 i32.add - local.set $10 + local.set $11 else local.get $2 i32.const 1 @@ -2102,50 +2105,51 @@ i32.lt_s if local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.store16 else local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 i32.const 65536 i32.sub local.tee $2 - i32.const 10 - i32.shr_u - i32.const 55296 - i32.or - local.get $2 i32.const 1023 i32.and i32.const 56320 i32.or i32.const 16 i32.shl + local.get $2 + i32.const 10 + i32.shr_u + i32.const 55296 + i32.or i32.or i32.store - local.get $10 + local.get $11 i32.const 1 i32.add - local.set $10 + local.set $11 end end end end else local.get $10 + local.get $11 i32.const 1 i32.shl - local.get $8 i32.add local.get $2 + local.get $2 i32.const 97 i32.sub i32.const 26 @@ -2156,23 +2160,22 @@ i32.shl i32.const -1 i32.xor - local.get $2 i32.and i32.store16 end - local.get $7 + local.get $9 i32.const 1 i32.add - local.set $7 - local.get $10 + local.set $9 + local.get $11 i32.const 1 i32.add - local.set $10 + local.set $11 br $for-loop|0 end end - local.get $8 local.get $10 + local.get $11 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index dc5826a290..ee00b07e74 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -691,7 +691,8 @@ unreachable end i32.const 22064 - local.tee $1 + local.set $1 + i32.const 22064 i32.const 0 i32.store i32.const 23632 @@ -716,10 +717,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -2466,10 +2467,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 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 35a7728eb5..fe725aad8e 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -1278,7 +1278,8 @@ unreachable end i32.const 22000 - local.tee $1 + local.set $1 + i32.const 22000 i32.const 0 i32.store i32.const 23568 @@ -1303,10 +1304,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -4747,10 +4748,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 @@ -5677,17 +5678,17 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $2 + local.get $0 local.get $3 i32.const 1 i32.shl - local.get $0 i32.add i32.load16_u i32.store16 + local.get $6 local.get $3 i32.const 2 i32.shl - local.get $6 i32.add local.get $2 i32.store @@ -5733,10 +5734,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $9 + local.get $0 local.get $5 i32.const 1 i32.shl - local.get $0 i32.add local.get $7 call $~lib/memory/memory.copy @@ -5748,11 +5749,11 @@ i32.const 1280 call $~lib/array/Array<~lib/string/String>#push end + local.get $2 local.get $10 i32.const 1 i32.add local.tee $10 - local.get $2 i32.eq if local.get $1 @@ -5792,10 +5793,10 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.tee $4 + local.get $0 local.get $5 i32.const 1 i32.shl - local.get $0 i32.add local.get $2 call $~lib/memory/memory.copy @@ -6581,6 +6582,7 @@ i32.const 16 i32.eq if + local.get $2 i32.const 63 local.get $0 i64.clz @@ -6590,7 +6592,6 @@ i32.shr_s i32.const 1 i32.add - local.get $2 i32.add local.tee $1 i32.const 1 diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index edee9d2672..b6c2bf59e8 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1428,6 +1428,7 @@ ) (func $start:std/symbol (local $0 i32) + (local $1 i32) call $~lib/symbol/Symbol global.set $std/symbol/sym1 call $~lib/symbol/Symbol @@ -1487,6 +1488,7 @@ global.get $std/symbol/sym3 call $~lib/symbol/_Symbol.keyFor local.tee $0 + local.get $0 i32.eqz if i32.const 1344 @@ -1496,11 +1498,11 @@ call $~lib/builtins/abort unreachable end - local.get $0 global.set $std/symbol/key3 global.get $std/symbol/sym4 call $~lib/symbol/_Symbol.keyFor local.tee $0 + local.get $0 i32.eqz if i32.const 1344 @@ -1510,7 +1512,6 @@ call $~lib/builtins/abort unreachable end - local.get $0 global.set $std/symbol/key4 global.get $std/symbol/key3 i32.const 1040 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index ca6e5e8be3..f0485d996f 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -923,7 +923,8 @@ unreachable end i32.const 12528 - local.tee $1 + local.set $1 + i32.const 12528 i32.const 0 i32.store i32.const 14096 @@ -948,10 +949,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -5590,10 +5591,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 @@ -20182,10 +20183,10 @@ i64.const 10 i64.lt_u if + local.get $0 local.get $2 i32.const 1 i32.shl - local.get $0 i32.add local.get $1 i64.const 48 @@ -20200,16 +20201,16 @@ i64.const 4294967295 i64.le_u if - local.get $2 local.get $1 i32.wrap_i64 - local.tee $2 + local.tee $3 call $~lib/util/number/decimalCount32 + local.get $2 i32.add - local.set $3 + local.set $2 local.get $0 - local.get $2 local.get $3 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 @@ -20218,10 +20219,10 @@ call $~lib/util/number/decimalCount64High local.get $2 i32.add - local.tee $3 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $3 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -22159,20 +22160,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Int8Array#constructor - local.tee $6 + local.tee $5 call $~lib/rt/pure/__retain - local.set $1 + local.set $2 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if - local.get $1 + local.get $2 local.get $0 i32.const 8432 local.get $0 @@ -22189,31 +22189,31 @@ br $for-loop|0 end end - local.get $1 + local.get $2 i32.load - local.get $1 + local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $1 + local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $1 + local.get $2 i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $0 - local.set $8 + local.tee $1 + local.set $7 i32.const 0 - local.get $0 + local.get $1 i32.gt_u if i32.const 1376 @@ -22226,33 +22226,35 @@ i32.const 12 i32.const 3 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $1 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $8 + local.get $1 + local.get $7 i32.store offset=8 + local.get $1 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $1 + local.get $0 call $~lib/rt/pure/__release - local.get $7 + local.get $6 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if - local.get $1 local.get $2 + local.get $0 call $~lib/typedarray/Int8Array#__get + local.get $1 local.get $0 - local.get $2 call $~lib/typedarray/Int8Array#__get i32.ne if @@ -22263,22 +22265,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $6 + local.get $5 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $1 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8> @@ -22290,58 +22292,60 @@ (local $5 i32) i32.const 8444 i32.load - local.tee $3 + local.tee $2 call $~lib/typedarray/Uint8Array#constructor local.tee $5 call $~lib/rt/pure/__retain - local.set $0 + local.set $1 loop $for-loop|0 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.lt_s if - local.get $0 local.get $1 + local.get $0 i32.const 8432 - local.get $1 + local.get $0 call $~lib/array/Array#__get i32.const 255 i32.and call $~lib/typedarray/Uint8Array#__set - 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.load - local.get $0 + local.get $1 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $0 + local.get $1 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $0 + local.get $1 i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $1 + local.set $3 i32.const 1 global.set $~argumentsLength - local.get $1 + local.get $3 i32.const 0 call $~lib/typedarray/Uint8Array.wrap@varargs local.set $4 + i32.const 0 + local.set $0 loop $for-loop|1 + local.get $0 local.get $2 - local.get $3 i32.lt_s if + local.get $1 local.get $0 - local.get $2 call $~lib/typedarray/Uint8Array#__get local.get $4 - local.get $2 + local.get $0 call $~lib/typedarray/Uint8Array#__get i32.ne if @@ -22352,10 +22356,10 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -22363,10 +22367,10 @@ call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release ) @@ -22379,20 +22383,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Uint8ClampedArray#constructor - local.tee $6 + local.tee $5 call $~lib/rt/pure/__retain - local.set $1 + local.set $2 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if - local.get $1 + local.get $2 local.get $0 i32.const 8432 local.get $0 @@ -22407,31 +22410,31 @@ br $for-loop|0 end end - local.get $1 + local.get $2 i32.load - local.get $1 + local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $1 + local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $1 + local.get $2 i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $0 - local.set $8 + local.tee $1 + local.set $7 i32.const 0 - local.get $0 + local.get $1 i32.gt_u if i32.const 1376 @@ -22444,33 +22447,35 @@ i32.const 12 i32.const 5 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $1 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $8 + local.get $1 + local.get $7 i32.store offset=8 + local.get $1 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $1 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $1 + local.get $0 call $~lib/rt/pure/__release - local.get $7 + local.get $6 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if - local.get $1 local.get $2 + local.get $0 call $~lib/typedarray/Uint8ClampedArray#__get + local.get $1 local.get $0 - local.get $2 call $~lib/typedarray/Uint8ClampedArray#__get i32.ne if @@ -22481,22 +22486,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $6 + local.get $5 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $1 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16> @@ -22508,17 +22513,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Int16Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -22548,19 +22552,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -22570,7 +22574,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 1 i32.and if @@ -22584,33 +22588,35 @@ i32.const 12 i32.const 6 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Int16Array#__get local.get $0 + call $~lib/typedarray/Int16Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Int16Array#__get i32.ne if @@ -22621,22 +22627,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16> @@ -22648,17 +22654,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Uint16Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -22686,19 +22691,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -22708,7 +22713,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 1 i32.and if @@ -22722,33 +22727,35 @@ i32.const 12 i32.const 7 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Uint16Array#__get local.get $0 + call $~lib/typedarray/Uint16Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Uint16Array#__get i32.ne if @@ -22759,22 +22766,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32> @@ -22786,17 +22793,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Int32Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -22822,19 +22828,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -22844,7 +22850,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 3 i32.and if @@ -22858,33 +22864,35 @@ i32.const 12 i32.const 8 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Int32Array#__get local.get $0 + call $~lib/typedarray/Int32Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Int32Array#__get i32.ne if @@ -22895,22 +22903,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32> @@ -22922,17 +22930,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Uint32Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -22958,19 +22965,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -22980,7 +22987,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 3 i32.and if @@ -22994,33 +23001,35 @@ i32.const 12 i32.const 9 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Uint32Array#__get local.get $0 + call $~lib/typedarray/Uint32Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Uint32Array#__get i32.ne if @@ -23031,22 +23040,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64> @@ -23058,17 +23067,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Int64Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -23095,19 +23103,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -23117,7 +23125,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 7 i32.and if @@ -23131,33 +23139,35 @@ i32.const 12 i32.const 10 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Int64Array#__get local.get $0 + call $~lib/typedarray/Int64Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Int64Array#__get i64.ne if @@ -23168,22 +23178,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64> @@ -23195,17 +23205,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Uint64Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -23232,19 +23241,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -23254,7 +23263,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 7 i32.and if @@ -23268,33 +23277,35 @@ i32.const 12 i32.const 11 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Uint64Array#__get local.get $0 + call $~lib/typedarray/Uint64Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Uint64Array#__get i64.ne if @@ -23305,22 +23316,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32> @@ -23332,17 +23343,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Float32Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -23369,19 +23379,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -23391,7 +23401,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 3 i32.and if @@ -23405,33 +23415,35 @@ i32.const 12 i32.const 12 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Float32Array#__get local.get $0 + call $~lib/typedarray/Float32Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Float32Array#__get f32.ne if @@ -23442,22 +23454,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64> @@ -23469,17 +23481,16 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) i32.const 8444 i32.load - local.tee $4 + local.tee $3 call $~lib/typedarray/Float64Array#constructor - local.tee $7 + local.tee $6 call $~lib/rt/pure/__retain local.set $1 loop $for-loop|0 local.get $0 - local.get $4 + local.get $3 i32.lt_s if local.get $1 @@ -23506,19 +23517,19 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 + local.set $4 i32.const 1 global.set $~argumentsLength i32.const 0 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain - local.tee $8 + local.tee $7 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $6 + local.tee $5 i32.gt_u if i32.const 1376 @@ -23528,7 +23539,7 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $5 i32.const 7 i32.and if @@ -23542,33 +23553,35 @@ i32.const 12 i32.const 13 call $~lib/rt/tlsf/__alloc - local.tee $0 - local.get $3 + local.tee $2 + local.get $0 call $~lib/rt/pure/__retain i32.store - local.get $0 - local.get $6 + local.get $2 + local.get $5 i32.store offset=8 + local.get $2 local.get $0 - local.get $3 i32.store offset=4 - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 - local.get $3 + local.set $2 + local.get $0 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release + i32.const 0 + local.set $0 loop $for-loop|1 - local.get $2 - local.get $4 + local.get $0 + local.get $3 i32.lt_s if local.get $1 - local.get $2 - call $~lib/typedarray/Float64Array#__get local.get $0 + call $~lib/typedarray/Float64Array#__get local.get $2 + local.get $0 call $~lib/typedarray/Float64Array#__get f64.ne if @@ -23579,22 +23592,22 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end - local.get $7 + local.get $6 call $~lib/rt/pure/__release i32.const 8432 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $0 i32) diff --git a/tests/compiler/unary.optimized.wat b/tests/compiler/unary.optimized.wat index 495e5af382..28b5241b22 100644 --- a/tests/compiler/unary.optimized.wat +++ b/tests/compiler/unary.optimized.wat @@ -10,8 +10,6 @@ (func $start:unary (local $0 i32) (local $1 i64) - (local $2 f32) - (local $3 f64) global.get $unary/i i32.const 1 i32.add @@ -46,7 +44,7 @@ global.set $unary/i i32.const -1 global.set $unary/i - global.get $unary/i + i32.const -1 local.tee $0 i32.const 1 i32.add @@ -94,7 +92,7 @@ global.set $unary/I i64.const -1 global.set $unary/I - global.get $unary/I + i64.const -1 local.tee $1 i64.const 1 i64.add @@ -144,12 +142,9 @@ global.set $unary/f f32.const 1.25 global.set $unary/f - f32.const 1.25 - local.tee $2 - f32.const 1 - f32.sub + f32.const 0.25 global.set $unary/f - local.get $2 + f32.const 1.25 global.set $unary/f global.get $unary/F f64.const 1 @@ -187,12 +182,9 @@ global.set $unary/F f64.const 1.25 global.set $unary/F - f64.const 1.25 - local.tee $3 - f64.const 1 - f64.sub + f64.const 0.25 global.set $unary/F - local.get $3 + f64.const 1.25 global.set $unary/F ) (func $~start diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 56323337fc..9fdd91ce91 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -693,7 +693,8 @@ unreachable end i32.const 1216 - local.tee $1 + local.set $1 + i32.const 1216 i32.const 0 i32.store i32.const 2784 @@ -718,10 +719,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl From f1f1022c7efab3b894f0e7364e3a1fb471b3ae90 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 09:35:47 +0300 Subject: [PATCH 10/13] remove unnecessary opt instrusion pass --- src/module.ts | 1 - tests/compiler/call-optional.optimized.wat | 2 +- tests/compiler/do.optimized.wat | 18 +- .../extends-baseaggregate.optimized.wat | 28 +- tests/compiler/for.optimized.wat | 18 +- .../implicit-getter-setter.optimized.wat | 20 +- tests/compiler/infer-array.optimized.wat | 6 +- tests/compiler/issues/1095.optimized.wat | 18 +- tests/compiler/issues/1225.optimized.wat | 18 +- tests/compiler/logical.optimized.wat | 18 +- tests/compiler/managed-cast.optimized.wat | 18 +- tests/compiler/number.optimized.wat | 6 +- tests/compiler/object-literal.optimized.wat | 26 +- tests/compiler/rc/local-init.optimized.wat | 18 +- .../rc/logical-and-mismatch.optimized.wat | 18 +- .../rc/logical-or-mismatch.optimized.wat | 18 +- tests/compiler/rc/optimize.optimized.wat | 18 +- tests/compiler/rc/rereturn.optimized.wat | 20 +- .../rc/ternary-mismatch.optimized.wat | 18 +- tests/compiler/resolve-binary.optimized.wat | 6 +- .../resolve-elementaccess.optimized.wat | 70 +- tests/compiler/resolve-ternary.optimized.wat | 26 +- tests/compiler/retain-i32.optimized.wat | 354 +++++++++- .../retain-release-sanity.optimized.wat | 28 +- tests/compiler/retain-return.optimized.wat | 18 +- tests/compiler/rt/finalize.optimized.wat | 26 +- tests/compiler/rt/stub-realloc.optimized.wat | 6 +- tests/compiler/runtime-full.optimized.wat | 20 +- .../compiler/std/array-literal.optimized.wat | 20 +- tests/compiler/std/array.optimized.wat | 663 +++++++++--------- tests/compiler/std/arraybuffer.optimized.wat | 26 +- tests/compiler/std/dataview.optimized.wat | 38 +- tests/compiler/std/map.optimized.wat | 470 ++++++------- tests/compiler/std/math.optimized.wat | 70 +- tests/compiler/std/set.optimized.wat | 32 +- tests/compiler/std/static-array.optimized.wat | 6 +- tests/compiler/std/staticarray.optimized.wat | 26 +- .../std/string-casemapping.optimized.wat | 36 +- .../std/string-encoding.optimized.wat | 28 +- tests/compiler/std/string.optimized.wat | 298 ++++---- tests/compiler/std/symbol.optimized.wat | 8 +- tests/compiler/std/typedarray.optimized.wat | 175 +++-- tests/compiler/wasi/trace.optimized.wat | 66 +- tests/compiler/while.optimized.wat | 18 +- 44 files changed, 1600 insertions(+), 1241 deletions(-) diff --git a/src/module.ts b/src/module.ts index 28048c26b9..4d4af21659 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1529,7 +1529,6 @@ export class Module { // } // passes.push("post-assemblyscript"); // } - passes.push("optimize-instructions"); if (optimizeLevel >= 3 || shrinkLevel >= 1) { passes.push("dce"); passes.push("inlining"); diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index fa906406bf..9477065e7e 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -12,10 +12,10 @@ (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 + local.get $2 i32.add ) (func $call-optional/opt@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 645cbc7c37..df83b2e7b5 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -208,10 +208,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -220,10 +220,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -330,10 +330,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -389,10 +389,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -429,12 +429,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -493,10 +493,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -516,10 +516,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -714,10 +714,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 8df0d5bc9e..5d105429b3 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -133,10 +133,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -145,10 +145,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -255,10 +255,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -314,10 +314,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -354,12 +354,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -418,10 +418,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -441,10 +441,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -639,10 +639,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -860,10 +860,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1259,11 +1259,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1278,11 +1278,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1296,11 +1296,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1380,10 +1380,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 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 7bee507bcf..2a20090d60 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -205,10 +205,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -217,10 +217,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -327,10 +327,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -386,10 +386,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -426,12 +426,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -490,10 +490,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -513,10 +513,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -711,10 +711,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 771460e421..45bb6e7f9b 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -140,10 +140,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -152,10 +152,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -262,10 +262,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -321,10 +321,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -361,12 +361,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -425,10 +425,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -448,10 +448,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -646,10 +646,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -843,10 +843,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/infer-array.optimized.wat b/tests/compiler/infer-array.optimized.wat index ebe9642e9f..4ae753e06d 100644 --- a/tests/compiler/infer-array.optimized.wat +++ b/tests/compiler/infer-array.optimized.wat @@ -231,11 +231,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -250,11 +250,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -268,11 +268,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index cbb5e0e5d7..11081db9bf 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -125,10 +125,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -137,10 +137,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -247,10 +247,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -306,10 +306,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -346,12 +346,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -410,10 +410,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -433,10 +433,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 17abeb9f31..78be67447a 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index b463f0cc17..ed6c28783c 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 0e1539c724..1ffd554d5b 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -128,10 +128,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -140,10 +140,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -250,10 +250,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -309,10 +309,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -349,12 +349,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -413,10 +413,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -436,10 +436,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -634,10 +634,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 3fd153cc6e..ae9839a3d7 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -854,11 +854,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -873,11 +873,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -891,11 +891,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 60fd25cf1b..c8673de096 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -132,10 +132,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -144,10 +144,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -254,10 +254,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -313,10 +313,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -353,12 +353,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -417,10 +417,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -440,10 +440,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -638,10 +638,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -835,10 +835,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1374,11 +1374,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1393,11 +1393,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1411,11 +1411,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 6c1b79feb1..13e7b49d10 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index f456da426b..9eac84ee56 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 20787ee1a7..8402125814 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index 0ea85bef7d..5fb558c12d 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -213,10 +213,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -225,10 +225,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -335,10 +335,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -394,10 +394,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -434,12 +434,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -498,10 +498,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -719,10 +719,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 861e00c16b..5f734bc986 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -829,10 +829,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index cdd6921a4f..21f67e4ecf 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -125,10 +125,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -137,10 +137,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -247,10 +247,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -306,10 +306,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -346,12 +346,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -410,10 +410,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -433,10 +433,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 78726945aa..cf6a0e6e82 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -869,11 +869,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -888,11 +888,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -906,11 +906,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index b6e217bab8..f007d23c77 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -617,19 +617,19 @@ i32.const 1 i32.sub local.set $4 - local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl + local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $4 @@ -751,8 +751,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $8 @@ -944,11 +944,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -963,11 +963,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -981,11 +981,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1273,8 +1273,8 @@ (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 $4 i64) + (local $5 i32) (local $6 i32) (local $7 i64) (local $8 i32) @@ -1319,7 +1319,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -1332,9 +1332,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1349,12 +1349,12 @@ local.get $6 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -1377,7 +1377,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -1388,7 +1388,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 2104 @@ -1399,7 +1399,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 @@ -1422,26 +1422,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $5 + local.get $4 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $5 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1450,11 +1450,11 @@ 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 + global.get $~lib/util/number/_exp_pow + local.tee $0 i32.add i32.const -64 i32.sub @@ -1462,35 +1462,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 + local.tee $4 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $10 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1502,8 +1502,8 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 global.get $~lib/util/number/_exp + local.get $0 i32.add i32.const -64 i32.sub @@ -1512,17 +1512,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -1863,9 +1863,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add local.get $2 i32.store8 @@ -1883,9 +1883,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_u ) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index f9c8a3afe1..cca6ee4e76 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -152,10 +152,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -164,10 +164,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -274,10 +274,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -333,10 +333,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -373,12 +373,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -437,10 +437,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -460,10 +460,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -658,10 +658,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -855,10 +855,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1847,11 +1847,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1866,11 +1866,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1884,11 +1884,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index 99faa43113..bddc861fdb 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -1,11 +1,324 @@ (module (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 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) (data (i32.const 1024) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s") (export "memory" (memory $0)) (start $~start) - (func $~start + (func $retain-i32/test (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.add + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.sub + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.mul + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.and + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.or + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 8 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.xor + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 9 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.shl + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.add + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 13 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.sub + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 14 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.mul + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.and + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.or + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 17 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.xor + i32.const 255 + i32.and + local.tee $2 + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 18 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.shl + i32.const 255 + i32.and + local.tee $0 + local.get $0 + i32.ne + if + i32.const 0 + i32.const 1040 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:retain-i32 (local $0 i32) + i32.const 0 + i32.const 127 + call $retain-i32/test + i32.const 127 + i32.const 0 + call $retain-i32/test + i32.const 1 + i32.const 127 + call $retain-i32/test + i32.const 127 + i32.const 1 + call $retain-i32/test + i32.const -1 + i32.const 127 + call $retain-i32/test + i32.const 127 + i32.const -1 + call $retain-i32/test + i32.const 0 + i32.const -128 + call $retain-i32/test + i32.const -128 + i32.const 0 + call $retain-i32/test + i32.const 1 + i32.const -128 + call $retain-i32/test + i32.const -128 + i32.const 1 + call $retain-i32/test + i32.const -1 + i32.const -128 + call $retain-i32/test + i32.const -128 + i32.const -1 + call $retain-i32/test + i32.const 127 + i32.const 127 + call $retain-i32/test + i32.const -128 + i32.const -128 + call $retain-i32/test + i32.const 127 + i32.const -128 + call $retain-i32/test + i32.const -128 + i32.const 127 + call $retain-i32/test + i32.const 0 + i32.const 255 + call $retain-i32/test + i32.const 255 + i32.const 0 + call $retain-i32/test + i32.const 1 + i32.const 255 + call $retain-i32/test + i32.const 255 + i32.const 1 + call $retain-i32/test + i32.const -1 + i32.const 255 + call $retain-i32/test + i32.const 255 + i32.const -1 + call $retain-i32/test + i32.const 255 + i32.const 255 + call $retain-i32/test i32.const -128 local.set $0 loop $for-loop|0 @@ -13,6 +326,42 @@ i32.const 255 i32.le_s if + i32.const 0 + local.get $0 + call $retain-i32/test + i32.const 1 + local.get $0 + call $retain-i32/test + i32.const -1 + local.get $0 + call $retain-i32/test + i32.const -128 + local.get $0 + call $retain-i32/test + i32.const 127 + local.get $0 + call $retain-i32/test + i32.const 255 + local.get $0 + call $retain-i32/test + i32.const -32768 + local.get $0 + call $retain-i32/test + i32.const 32767 + local.get $0 + call $retain-i32/test + i32.const 65535 + local.get $0 + call $retain-i32/test + i32.const 2147483647 + local.get $0 + call $retain-i32/test + i32.const -2147483648 + local.get $0 + call $retain-i32/test + i32.const -1 + local.get $0 + call $retain-i32/test local.get $0 i32.const 1 i32.add @@ -27,4 +376,7 @@ i32.load8_s drop ) + (func $~start + call $start:retain-i32 + ) ) diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 80bb87a6ea..c361159acf 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -150,10 +150,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -162,10 +162,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -272,10 +272,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -331,10 +331,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -371,12 +371,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -435,10 +435,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -458,10 +458,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -656,10 +656,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -877,10 +877,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1438,11 +1438,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1457,11 +1457,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1475,11 +1475,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1561,10 +1561,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 diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index d3e6749890..f3ffbb52e1 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -128,10 +128,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -140,10 +140,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -250,10 +250,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -309,10 +309,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -349,12 +349,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -413,10 +413,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -436,10 +436,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -634,10 +634,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 19314a04e3..141c2263e2 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -148,10 +148,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -160,10 +160,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -270,10 +270,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -329,10 +329,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -369,12 +369,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -433,10 +433,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -456,10 +456,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -654,10 +654,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -851,10 +851,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1698,11 +1698,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1717,11 +1717,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1735,11 +1735,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/rt/stub-realloc.optimized.wat b/tests/compiler/rt/stub-realloc.optimized.wat index f8dd972f4e..69d15de28b 100644 --- a/tests/compiler/rt/stub-realloc.optimized.wat +++ b/tests/compiler/rt/stub-realloc.optimized.wat @@ -244,11 +244,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -263,11 +263,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -281,11 +281,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index c866b315bd..bc0ffaf702 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -829,10 +829,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 3c9e9cfb9b..754d8c2104 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -178,10 +178,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -190,10 +190,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -300,10 +300,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -359,10 +359,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -399,12 +399,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -463,10 +463,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -486,10 +486,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -684,10 +684,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -881,10 +881,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 7186a80625..21254ca888 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -509,10 +509,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -690,10 +690,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -730,12 +730,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -794,10 +794,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -817,10 +817,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -1015,10 +1015,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1236,10 +1236,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1860,11 +1860,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1879,11 +1879,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1897,11 +1897,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -2385,10 +2385,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 @@ -2919,13 +2919,13 @@ local.get $3 i32.lt_s if - local.get $1 local.get $0 local.get $2 i32.const 2 i32.shl i32.add i32.load + local.get $1 i32.eq if local.get $2 @@ -3582,8 +3582,8 @@ (func $start:std/array~anonymous|16 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 call $~lib/rt/pure/__retain - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3641,8 +3641,8 @@ i32.const 100 call $~lib/array/Array#push drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -3654,8 +3654,8 @@ local.tee $1 call $~lib/array/Array#pop drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -3793,8 +3793,8 @@ i32.const 100 call $~lib/array/Array#push drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -3869,8 +3869,8 @@ (func $start:std/array~anonymous|23 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 call $~lib/rt/pure/__retain - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3882,8 +3882,8 @@ local.tee $1 call $~lib/array/Array#pop drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -3965,8 +3965,8 @@ i32.const 100 call $~lib/array/Array#push drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -3978,8 +3978,8 @@ (func $start:std/array~anonymous|27 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 call $~lib/rt/pure/__retain - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3993,8 +3993,8 @@ local.tee $1 call $~lib/array/Array#pop drop - local.get $0 global.get $std/array/i + local.get $0 i32.add global.set $std/array/i local.get $1 @@ -5847,7 +5847,6 @@ global.get $~lib/math/random_state1_64 local.tee $1 global.set $~lib/math/random_state0_64 - local.get $1 local.get $0 local.get $0 i64.const 23 @@ -5858,6 +5857,7 @@ i64.const 17 i64.shr_u i64.xor + local.get $1 i64.xor local.get $1 i64.const 26 @@ -7402,12 +7402,12 @@ call $~lib/rt/pure/__release return end - local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 11 i32.add + local.get $4 i32.mul i32.const 11 i32.add @@ -7581,12 +7581,12 @@ call $~lib/rt/pure/__release return end - local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 10 i32.add + local.get $4 i32.mul i32.const 10 i32.add @@ -7868,19 +7868,19 @@ i32.const 1 i32.sub local.set $4 - local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl + local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $4 @@ -8002,8 +8002,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $8 @@ -8324,8 +8324,8 @@ (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 $4 i64) + (local $5 i32) (local $6 i32) (local $7 i64) (local $8 i32) @@ -8370,7 +8370,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -8383,9 +8383,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -8400,12 +8400,12 @@ local.get $6 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8418,8 +8418,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -8428,7 +8428,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -8439,7 +8439,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 9720 @@ -8450,7 +8450,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 @@ -8473,26 +8473,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $5 + local.get $4 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $5 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -8501,11 +8501,11 @@ 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 + global.get $~lib/util/number/_exp_pow + local.tee $0 i32.add i32.const -64 i32.sub @@ -8513,35 +8513,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 + local.tee $4 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $10 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -8553,8 +8553,8 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 global.get $~lib/util/number/_exp + local.get $0 i32.add i32.const -64 i32.sub @@ -8563,17 +8563,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -8965,22 +8965,23 @@ local.get $8 if local.get $1 - local.tee $2 + local.get $1 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $2 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $2 + local.set $1 end local.get $3 i32.const 1 @@ -9060,132 +9061,133 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $8 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $7 i32.const 0 i32.lt_s if - local.get $5 + local.get $8 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $7 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $3 + local.get $2 select return end i32.const 7840 local.set $1 - local.get $5 + local.get $8 call $~lib/string/String#get:length - local.set $8 + local.set $5 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $7 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $7 - local.tee $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $5 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $8 call $~lib/string/String.__concat - local.tee $7 - local.tee $1 - local.get $2 + local.tee $6 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end - local.get $7 + local.get $6 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -9193,21 +9195,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $5 + local.get $8 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10093,168 +10095,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10321,12 +10324,12 @@ call $~lib/rt/pure/__release return end - local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 10 i32.add + local.get $4 i32.mul i32.const 10 i32.add @@ -10437,168 +10440,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10620,168 +10624,169 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $2 + local.tee $3 local.get $1 local.get $1 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10807,70 +10812,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $5 + local.set $9 local.get $1 i32.const 1 i32.sub - local.tee $6 + local.tee $8 i32.const 0 i32.lt_s if - local.get $5 + local.get $9 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $6 + local.get $8 i32.eqz if local.get $0 i32.load - local.tee $3 + local.tee $2 if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 end - local.get $3 + local.get $2 if (result i32) - local.get $3 + local.get $2 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $5 + local.get $9 call $~lib/string/String#get:length - local.set $8 + local.set $6 loop $for-loop|0 - local.get $3 - local.get $6 + local.get $2 + local.get $8 i32.lt_s if local.get $4 local.get $0 - local.get $3 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $4 if local.get $1 @@ -10879,67 +10884,68 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $9 - local.tee $2 + local.tee $5 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 local.set $1 end - local.get $8 + local.get $6 if local.get $1 - local.tee $2 - local.get $5 + local.get $1 + local.get $9 call $~lib/string/String.__concat local.tee $7 - local.tee $1 - local.get $2 + local.tee $3 i32.ne if - local.get $1 + local.get $3 call $~lib/rt/pure/__retain - local.set $1 - local.get $2 + local.set $3 + local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release + local.get $3 + local.set $1 end - local.get $3 + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end local.get $4 local.get $0 - local.get $6 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end - local.get $2 + local.get $3 local.tee $0 if local.get $1 @@ -10948,24 +10954,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $3 local.tee $2 + local.tee $3 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $1 call $~lib/rt/pure/__release end 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 $3 local.set $1 end - local.get $5 + local.get $9 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -18014,7 +18020,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $3 + local.tee $2 local.get $1 i32.load offset=12 i32.const 0 @@ -18022,7 +18028,7 @@ select local.tee $4 i32.add - local.tee $2 + local.tee $3 i32.const 1073741808 i32.gt_u if @@ -18033,20 +18039,21 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 0 i32.const 6 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $3 + local.get $2 + local.tee $0 call $~lib/memory/memory.copy - local.get $3 + local.get $0 local.get $5 i32.add local.get $1 @@ -18055,7 +18062,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $3 ) (func $~lib/array/Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -18292,6 +18299,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load offset=12 local.tee $1 @@ -18317,9 +18325,10 @@ i32.const 1 i32.sub local.tee $1 + local.tee $4 call $~lib/memory/memory.copy - local.get $1 local.get $2 + local.get $4 i32.add i32.const 0 i32.store8 @@ -19435,14 +19444,14 @@ local.get $3 if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add @@ -19455,10 +19464,10 @@ i32.const 2 i32.shl i32.add - local.get $6 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $6 call $~lib/rt/pure/__release end local.get $2 @@ -19481,14 +19490,14 @@ local.get $3 if local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add @@ -19501,10 +19510,10 @@ i32.const 2 i32.shl i32.add - local.get $6 + local.get $4 call $~lib/rt/pure/__retain i32.store - local.get $4 + local.get $6 call $~lib/rt/pure/__release end local.get $2 diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 2def9036c8..7482c9da10 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -140,10 +140,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -152,10 +152,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -262,10 +262,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -321,10 +321,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -361,12 +361,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -425,10 +425,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -448,10 +448,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -646,10 +646,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -843,10 +843,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1381,11 +1381,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1400,11 +1400,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1418,11 +1418,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index fe7da19535..54b1768458 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -148,10 +148,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -160,10 +160,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -270,10 +270,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -329,10 +329,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -369,12 +369,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -433,10 +433,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -456,10 +456,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -654,10 +654,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -851,10 +851,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1200,9 +1200,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add local.get $2 i32.store8 @@ -1316,15 +1316,15 @@ end local.get $2 if (result f32) - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add f32.load else - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load call $~lib/polyfills/bswap @@ -1396,9 +1396,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_s ) @@ -1434,9 +1434,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load16_s local.set $0 @@ -1467,9 +1467,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load local.set $0 @@ -1520,9 +1520,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_u ) @@ -1556,9 +1556,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load16_u local.set $0 @@ -1589,9 +1589,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load local.set $0 diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index 43347517fe..da2d726839 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -147,10 +147,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -159,10 +159,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -269,10 +269,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -328,10 +328,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -368,12 +368,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -432,10 +432,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -455,10 +455,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -874,10 +874,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1745,11 +1745,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1764,11 +1764,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1782,11 +1782,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1868,10 +1868,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 @@ -2722,9 +2722,9 @@ if (result i32) i32.const 0 else - local.get $1 local.get $0 i32.load + local.get $1 i32.eq end if @@ -3080,28 +3080,28 @@ i32.const 3 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $7 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $0 + local.get $7 i32.const 3 i32.store offset=4 - local.get $0 + local.get $7 i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $0 + local.get $7 i32.const 4 i32.store offset=12 - local.get $0 + local.get $7 i32.const 0 i32.store offset=16 - local.get $0 + local.get $7 i32.const 0 i32.store offset=20 loop $for-loop|1 - local.get $1 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3109,8 +3109,8 @@ i32.const 100 i32.lt_s if - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has if i32.const 0 @@ -3120,9 +3120,9 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 - local.get $1 + local.get $7 + local.get $6 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3131,8 +3131,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -3143,10 +3143,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3162,14 +3162,14 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $6 i32.const 1 i32.add - local.set $1 + local.set $6 br $for-loop|1 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -3182,9 +3182,9 @@ unreachable end i32.const 0 - local.set $1 + local.set $6 loop $for-loop|3 - local.get $1 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3192,8 +3192,8 @@ i32.const 100 i32.lt_s if - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -3204,10 +3204,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3223,9 +3223,9 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 - local.get $1 + local.get $7 + local.get $6 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3234,8 +3234,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -3246,10 +3246,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 24 i32.shl i32.const 24 @@ -3265,14 +3265,14 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $6 i32.const 1 i32.add - local.set $1 + local.set $6 br $for-loop|3 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -3284,46 +3284,47 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $7 call $~lib/map/Map#keys - local.set $4 - local.get $0 + local.set $5 + local.get $7 call $~lib/map/Map#values - local.set $6 + local.set $3 i32.const 24 i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $1 + local.tee $6 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $1 + local.get $6 i32.const 3 i32.store offset=4 - local.get $1 + local.get $6 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $1 + local.get $6 i32.const 4 i32.store offset=12 - local.get $1 + local.get $6 i32.const 0 i32.store offset=16 - local.get $1 + local.get $6 i32.const 0 i32.store offset=20 call $~lib/map/Map#constructor - local.set $5 + local.set $4 loop $for-loop|4 - local.get $2 - local.get $4 + local.get $1 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $2 - local.get $4 + local.get $1 + local.tee $0 + local.get $5 i32.load offset=12 i32.ge_u if @@ -3334,18 +3335,18 @@ call $~lib/builtins/abort unreachable end - local.get $2 - local.get $4 + local.get $0 + local.get $5 i32.load offset=4 i32.add i32.load8_s - local.set $3 - local.get $6 - local.get $2 - call $~lib/array/Array#__get - local.set $7 - local.get $0 + local.set $1 local.get $3 + local.get $0 + call $~lib/array/Array#__get + local.set $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3356,8 +3357,8 @@ call $~lib/builtins/abort unreachable end - local.get $0 local.get $7 + local.get $2 i32.const 20 i32.sub call $~lib/map/Map#has @@ -3370,27 +3371,27 @@ call $~lib/builtins/abort unreachable end + local.get $6 + local.get $1 local.get $1 - local.get $3 - local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $5 - local.get $7 + local.get $4 + local.get $2 i32.const 20 i32.sub - local.tee $3 - local.get $3 + local.tee $1 + local.get $1 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|4 end end - local.get $1 + local.get $6 i32.load offset=20 i32.const 100 i32.ne @@ -3402,7 +3403,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $4 i32.load offset=20 i32.const 100 i32.ne @@ -3415,9 +3416,9 @@ unreachable end i32.const 0 - local.set $2 + local.set $1 loop $for-loop|6 - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3425,8 +3426,8 @@ i32.const 50 i32.lt_s if - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3437,10 +3438,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#get - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3456,11 +3457,11 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#delete - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -3470,14 +3471,14 @@ 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|6 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 50 i32.ne @@ -3490,9 +3491,9 @@ unreachable end i32.const 0 - local.set $2 + local.set $1 loop $for-loop|8 - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3500,8 +3501,8 @@ i32.const 50 i32.lt_s if - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -3511,9 +3512,9 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $2 + local.get $7 + local.get $1 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3522,8 +3523,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3534,11 +3535,11 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#delete - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -3548,14 +3549,14 @@ 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|8 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 50 i32.ne @@ -3567,9 +3568,9 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $7 call $~lib/map/Map#clear - local.get $0 + local.get $7 i32.load offset=20 if i32.const 0 @@ -3579,15 +3580,15 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 call $~lib/rt/pure/__release - local.get $6 + local.get $3 call $~lib/rt/pure/__release - local.get $1 + local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $7 call $~lib/rt/pure/__release ) (func $~lib/map/Map#has (param $0 i32) (param $1 i32) (result i32) @@ -4312,35 +4313,35 @@ i32.const 8 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $7 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $0 + local.get $7 i32.const 3 i32.store offset=4 - local.get $0 + local.get $7 i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $0 + local.get $7 i32.const 4 i32.store offset=12 - local.get $0 + local.get $7 i32.const 0 i32.store offset=16 - local.get $0 + local.get $7 i32.const 0 i32.store offset=20 loop $for-loop|1 - local.get $1 + local.get $6 i32.const 255 i32.and i32.const 100 i32.lt_u if - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has if i32.const 0 @@ -4350,17 +4351,17 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 - local.get $1 + local.get $7 + local.get $6 + local.get $6 i32.const 255 i32.and i32.const 10 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -4371,10 +4372,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 255 i32.and i32.const 10 @@ -4388,14 +4389,14 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $6 i32.const 1 i32.add - local.set $1 + local.set $6 br $for-loop|1 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -4408,16 +4409,16 @@ unreachable end i32.const 0 - local.set $1 + local.set $6 loop $for-loop|3 - local.get $1 + local.get $6 i32.const 255 i32.and i32.const 100 i32.lt_u if - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -4428,10 +4429,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 255 i32.and i32.const 10 @@ -4445,17 +4446,17 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 - local.get $1 + local.get $7 + local.get $6 + local.get $6 i32.const 255 i32.and i32.const 20 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#has i32.eqz if @@ -4466,10 +4467,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $1 + local.get $7 + local.get $6 call $~lib/map/Map#get - local.get $1 + local.get $6 i32.const 255 i32.and i32.const 20 @@ -4483,14 +4484,14 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $6 i32.const 1 i32.add - local.set $1 + local.set $6 br $for-loop|3 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 100 i32.ne @@ -4502,46 +4503,47 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $7 call $~lib/map/Map#keys - local.set $4 - local.get $0 + local.set $5 + local.get $7 call $~lib/map/Map#values - local.set $6 + local.set $3 i32.const 24 i32.const 10 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $1 + local.tee $6 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $1 + local.get $6 i32.const 3 i32.store offset=4 - local.get $1 + local.get $6 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $1 + local.get $6 i32.const 4 i32.store offset=12 - local.get $1 + local.get $6 i32.const 0 i32.store offset=16 - local.get $1 + local.get $6 i32.const 0 i32.store offset=20 call $~lib/map/Map#constructor - local.set $5 + local.set $4 loop $for-loop|4 - local.get $2 - local.get $4 + local.get $1 + local.get $5 i32.load offset=12 i32.lt_s if - local.get $2 - local.get $4 + local.get $1 + local.tee $0 + local.get $5 i32.load offset=12 i32.ge_u if @@ -4552,18 +4554,18 @@ call $~lib/builtins/abort unreachable end - local.get $2 - local.get $4 + local.get $0 + local.get $5 i32.load offset=4 i32.add i32.load8_u - local.set $3 - local.get $6 - local.get $2 - call $~lib/array/Array#__get - local.set $7 - local.get $0 + local.set $1 local.get $3 + local.get $0 + call $~lib/array/Array#__get + local.set $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4574,8 +4576,8 @@ call $~lib/builtins/abort unreachable end - local.get $0 local.get $7 + local.get $2 i32.const 20 i32.sub call $~lib/map/Map#has @@ -4588,27 +4590,27 @@ call $~lib/builtins/abort unreachable end + local.get $6 + local.get $1 local.get $1 - local.get $3 - local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $5 - local.get $7 + local.get $4 + local.get $2 i32.const 20 i32.sub - local.tee $3 - local.get $3 + local.tee $1 + local.get $1 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|4 end end - local.get $1 + local.get $6 i32.load offset=20 i32.const 100 i32.ne @@ -4620,7 +4622,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $4 i32.load offset=20 i32.const 100 i32.ne @@ -4633,16 +4635,16 @@ unreachable end i32.const 0 - local.set $2 + local.set $1 loop $for-loop|6 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 50 i32.lt_u if - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4653,10 +4655,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#get - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 20 @@ -4670,11 +4672,11 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#delete - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -4684,14 +4686,14 @@ 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|6 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 50 i32.ne @@ -4704,16 +4706,16 @@ unreachable end i32.const 0 - local.set $2 + local.set $1 loop $for-loop|8 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 50 i32.lt_u if - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -4723,17 +4725,17 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $2 + local.get $7 + local.get $1 + local.get $1 i32.const 255 i32.and i32.const 10 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4744,11 +4746,11 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#delete - local.get $0 - local.get $2 + local.get $7 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -4758,14 +4760,14 @@ 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|8 end end - local.get $0 + local.get $7 i32.load offset=20 i32.const 50 i32.ne @@ -4777,9 +4779,9 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $7 call $~lib/map/Map#clear - local.get $0 + local.get $7 i32.load offset=20 if i32.const 0 @@ -4789,15 +4791,15 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 call $~lib/rt/pure/__release - local.get $6 + local.get $3 call $~lib/rt/pure/__release - local.get $1 + local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release - local.get $0 + local.get $7 call $~lib/rt/pure/__release ) (func $~lib/util/hash/hash16 (param $0 i32) (result i32) @@ -8593,9 +8595,9 @@ if (result i32) i32.const 0 else - local.get $1 local.get $0 i64.load + local.get $1 i64.eq end if diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index ebc5c36531..aa921062e9 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -7232,33 +7232,35 @@ i32.shr_s i32.const 1023 i32.sub - local.tee $11 + local.tee $12 i32.const 20 i32.gt_s local.tee $5 select - local.get $11 + local.get $12 i32.sub - local.set $12 - i32.const 2 + local.set $11 local.get $6 local.get $9 local.get $5 select - local.tee $5 - local.get $12 + local.tee $12 + local.get $11 i32.shr_u - local.tee $11 - i32.const 1 - i32.and - i32.sub - i32.const 0 - local.get $5 + local.tee $5 local.get $11 - local.get $12 i32.shl + local.get $12 i32.eq - select + if (result i32) + i32.const 2 + local.get $5 + i32.const 1 + i32.and + i32.sub + else + i32.const 0 + end else i32.const 0 end @@ -7274,10 +7276,10 @@ i32.const 2146435072 i32.eq if - local.get $18 local.get $4 i32.const 1072693248 i32.sub + local.get $18 i32.or if local.get $4 @@ -7378,10 +7380,10 @@ i32.const 0 i32.lt_s if (result f64) - local.get $5 local.get $4 i32.const 1072693248 i32.sub + local.get $5 i32.or if (result f64) local.get $3 @@ -7805,14 +7807,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $12 + local.tee $11 i32.const 1083179008 i32.ge_s if - local.get $5 - local.get $12 + local.get $11 i32.const 1083179008 i32.sub + local.get $5 i32.or local.get $1 f64.const 8.008566259537294e-17 @@ -7824,16 +7826,16 @@ i32.or br_if $folding-inner0 else - local.get $12 + local.get $11 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $5 - local.get $12 + local.get $11 i32.const -1064252416 i32.sub + local.get $5 i32.or local.get $1 local.get $0 @@ -7844,10 +7846,10 @@ select br_if $folding-inner1 end - local.get $12 + local.get $11 i32.const 2147483647 i32.and - local.tee $11 + local.tee $12 i32.const 20 i32.shr_s i32.const 1023 @@ -7856,19 +7858,19 @@ i32.const 0 local.set $6 local.get $1 - local.get $11 + local.get $12 i32.const 1071644672 i32.gt_s if i32.const 1048575 - local.get $12 + local.get $11 i32.const 1048576 local.get $5 i32.const 1 i32.add i32.shr_s i32.add - local.tee $11 + local.tee $12 i32.const 2147483647 i32.and i32.const 20 @@ -7879,7 +7881,7 @@ i32.shr_s i32.const -1 i32.xor - local.get $11 + local.get $12 i32.and i64.extend_i32_s i64.const 32 @@ -7887,7 +7889,7 @@ f64.reinterpret_i64 local.set $0 i32.const 0 - local.get $11 + local.get $12 i32.const 1048575 i32.and i32.const 1048576 @@ -7899,7 +7901,7 @@ local.tee $6 i32.sub local.get $6 - local.get $12 + local.get $11 i32.const 0 i32.lt_s select @@ -8600,10 +8602,10 @@ local.get $5 i64.lt_s if - local.get $5 local.get $3 i64.const 1 i64.add + local.get $5 i64.eq br_if $do-break|0 local.get $0 @@ -8719,10 +8721,10 @@ f64.gt select i32.const 0 - local.get $5 local.get $3 i64.const 1 i64.add + local.get $5 i64.eq select local.get $3 @@ -8853,10 +8855,10 @@ local.get $8 i32.lt_s if - local.get $8 local.get $9 i32.const 1 i32.add + local.get $8 i32.eq br_if $do-break|0 local.get $0 @@ -8969,10 +8971,10 @@ f32.gt select i32.const 0 - local.get $8 local.get $9 i32.const 1 i32.add + local.get $8 i32.eq select local.get $8 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 85dee5ffbe..a88e112b27 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -144,10 +144,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -156,10 +156,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -266,10 +266,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -325,10 +325,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -365,12 +365,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -429,10 +429,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -452,10 +452,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -650,10 +650,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -871,10 +871,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1731,11 +1731,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1750,11 +1750,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1768,11 +1768,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1854,10 +1854,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 @@ -5079,9 +5079,9 @@ if (result i32) i32.const 0 else - local.get $1 local.get $0 i32.load + local.get $1 i32.eq end if @@ -6431,9 +6431,9 @@ if (result i32) i32.const 0 else - local.get $1 local.get $0 i64.load + local.get $1 i64.eq end if diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 5a80874100..6666b93d35 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -210,11 +210,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -229,11 +229,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -247,11 +247,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index f5bd2d5b6b..bddebe04bf 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -178,10 +178,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -190,10 +190,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -300,10 +300,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -359,10 +359,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -399,12 +399,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -463,10 +463,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -486,10 +486,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -684,10 +684,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -881,10 +881,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1210,11 +1210,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1229,11 +1229,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1247,11 +1247,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index fdcb5e7eeb..2c1e7eef71 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -470,10 +470,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -482,10 +482,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -592,10 +592,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -651,10 +651,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -691,12 +691,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -755,10 +755,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -778,10 +778,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -976,10 +976,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1197,10 +1197,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1458,12 +1458,11 @@ loop $while-continue|0 local.get $2 if - local.get $5 + local.get $4 local.get $2 i32.const 1 i32.shr_u local.tee $3 - local.get $4 i32.add i32.const 1 i32.shl @@ -1471,6 +1470,7 @@ i32.add i32.load8_u local.tee $6 + local.get $5 i32.eq if (result i32) local.get $3 @@ -1657,11 +1657,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1676,11 +1676,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1694,11 +1694,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1780,10 +1780,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 @@ -2657,10 +2657,10 @@ i32.and i32.const 55296 i32.eq - local.get $8 local.get $2 i32.const 1 i32.add + local.get $8 i32.ne i32.and if (result i32) @@ -2914,10 +2914,10 @@ if (result i32) i32.const 1 else - local.get $3 local.get $1 i32.const 1 i32.add + local.get $3 i32.eq end if diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index ee00b07e74..39d3e28b48 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -211,10 +211,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -223,10 +223,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -333,10 +333,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -392,10 +392,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -432,12 +432,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -496,10 +496,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -519,10 +519,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -717,10 +717,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -938,10 +938,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1255,11 +1255,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1274,11 +1274,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1292,11 +1292,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -2467,10 +2467,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 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index fe725aad8e..88b1643adf 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -798,10 +798,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -810,10 +810,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -920,10 +920,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -979,10 +979,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -1019,12 +1019,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -1083,10 +1083,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -1106,10 +1106,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -1304,10 +1304,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1525,10 +1525,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -1997,11 +1997,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -2016,11 +2016,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -2034,11 +2034,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -2225,15 +2225,15 @@ i32.div_u local.tee $5 call $~lib/memory/memory.repeat + local.get $3 local.get $4 local.get $5 i32.mul - local.tee $4 - local.get $3 + local.tee $3 i32.add local.get $2 local.get $0 - local.get $4 + local.get $3 i32.sub call $~lib/memory/memory.copy else @@ -2322,10 +2322,10 @@ (func $~lib/string/String#localeCompare (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - local.get $0 local.get $1 call $~lib/rt/pure/__retain local.tee $1 + local.get $0 i32.eq if local.get $1 @@ -3452,14 +3452,13 @@ (local $6 i32) (local $7 i64) (local $8 i32) - (local $9 i32) + (local $9 i64) (local $10 i64) - (local $11 i64) - (local $12 f64) - (local $13 i64) - (local $14 f64) - (local $15 i32) - (local $16 i64) + (local $11 f64) + (local $12 i64) + (local $13 f64) + (local $14 i32) + (local $15 i64) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain @@ -3473,7 +3472,7 @@ i32.load16_u local.set $8 f64.const 1 - local.set $14 + local.set $13 loop $while-continue|0 local.get $6 if (result i32) @@ -3510,7 +3509,7 @@ i32.eqz br_if $folding-inner0 f64.const -1 - local.set $14 + local.set $13 local.get $0 i32.const 2 i32.add @@ -3561,7 +3560,7 @@ local.get $5 call $~lib/rt/pure/__release f64.const inf - local.get $14 + local.get $13 f64.mul return end @@ -3631,7 +3630,7 @@ end br_if $folding-inner0 i32.const 1 - local.set $15 + local.set $14 loop $for-loop|2 local.get $0 i32.load16_u @@ -3679,34 +3678,34 @@ local.get $8 i32.const 48 i32.sub - local.set $9 + local.set $1 loop $for-loop|3 i32.const 1 - local.get $15 + local.get $14 i32.eqz i32.const 0 local.get $8 i32.const 46 i32.eq select - local.get $9 + local.get $1 i32.const 10 i32.lt_u select if block $for-break3 - local.get $9 + local.get $1 i32.const 10 i32.lt_u if - local.get $9 + local.get $1 i64.extend_i32_u local.get $7 i64.const 10 i64.mul i64.add local.get $7 - local.get $9 + local.get $1 i32.eqz i32.eqz i64.extend_i32_u @@ -3724,7 +3723,7 @@ local.get $2 local.set $3 i32.const 1 - local.set $15 + local.set $14 end local.get $6 i32.const 1 @@ -3740,25 +3739,24 @@ local.tee $8 i32.const 48 i32.sub - local.set $9 + local.set $1 br $for-loop|3 end end end - local.get $3 - local.get $2 - local.get $15 - select - i32.const 19 - local.get $2 - i32.const 19 - local.get $2 - i32.lt_s - select - i32.sub - local.set $1 block $~lib/util/string/scientific|inlined.0 i32.const 1 + local.get $3 + local.get $2 + local.get $14 + select + i32.const 19 + local.get $2 + i32.const 19 + local.get $2 + i32.lt_s + select + i32.sub block $~lib/util/string/parseExp|inlined.0 (result i32) i32.const 1 local.set $2 @@ -3775,7 +3773,7 @@ local.get $3 i32.const 2 i32.add - local.tee $9 + local.tee $1 i32.load16_u local.tee $0 i32.const 45 @@ -3791,10 +3789,10 @@ drop i32.const -1 local.set $2 - local.get $9 + local.get $1 i32.const 2 i32.add - local.tee $9 + local.tee $1 i32.load16_u else local.get $0 @@ -3809,10 +3807,10 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $9 + local.get $1 i32.const 2 i32.add - local.tee $9 + local.tee $1 i32.load16_u else local.get $0 @@ -3832,10 +3830,10 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $9 + local.get $1 i32.const 2 i32.add - local.tee $9 + local.tee $1 i32.load16_u local.set $0 br $while-continue|4 @@ -3861,20 +3859,20 @@ i32.ge_s br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $0 local.get $4 i32.const 10 i32.mul + local.get $0 i32.add local.set $4 local.get $6 i32.const 1 i32.sub local.set $6 - local.get $9 + local.get $1 i32.const 2 i32.add - local.tee $9 + local.tee $1 i32.load16_u i32.const 48 i32.sub @@ -3886,7 +3884,6 @@ local.get $4 i32.mul end - local.get $1 i32.add local.tee $0 i32.const -342 @@ -3900,12 +3897,12 @@ i32.gt_s if f64.const inf - local.set $12 + local.set $11 br $~lib/util/string/scientific|inlined.0 end local.get $7 f64.convert_i64_u - local.set $12 + local.set $11 local.get $0 i32.eqz br_if $~lib/util/string/scientific|inlined.0 @@ -3918,7 +3915,7 @@ i32.gt_s select if - local.get $12 + local.get $11 local.get $0 i32.const 3 i32.shl @@ -3926,7 +3923,7 @@ i32.add f64.load f64.mul - local.set $12 + local.set $11 i32.const 22 local.set $0 end @@ -3939,8 +3936,8 @@ i32.shr_s local.tee $2 local.get $0 - local.get $2 i32.add + local.get $2 i32.xor i32.const 22 i32.le_s @@ -3952,7 +3949,7 @@ i32.const 0 i32.gt_s if - local.get $12 + local.get $11 local.get $0 i32.const 3 i32.shl @@ -3960,10 +3957,10 @@ i32.add f64.load f64.mul - local.set $12 + local.set $11 br $~lib/util/string/scientific|inlined.0 end - local.get $12 + local.get $11 i32.const 0 local.get $0 i32.sub @@ -3981,15 +3978,15 @@ local.get $7 local.get $7 i64.clz - local.tee $10 + local.tee $9 i64.shl local.set $7 local.get $0 local.tee $2 i64.extend_i32_s - local.get $10 + local.get $9 i64.sub - local.set $10 + local.set $9 loop $for-loop|6 local.get $2 i32.const -14 @@ -4002,9 +3999,9 @@ local.get $7 i64.const 6103515625 i64.div_u - local.tee $13 + local.tee $12 i64.clz - local.tee $11 + local.tee $10 i64.const 18 i64.sub i64.shl @@ -4012,15 +4009,15 @@ f64.mul f64.nearest i64.trunc_f64_u - local.get $13 - local.get $11 + local.get $12 + local.get $10 i64.shl i64.add local.set $7 + local.get $9 local.get $10 - local.get $11 i64.sub - local.set $10 + local.set $9 local.get $2 i32.const 14 i32.add @@ -4034,32 +4031,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $13 + local.tee $12 i64.div_u - local.tee $16 + local.tee $15 i64.clz - local.set $11 + local.set $10 local.get $7 - local.get $13 + local.get $12 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $11 + local.get $10 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $13 + local.get $12 f64.convert_i64_u f64.div i64.trunc_f64_u - local.get $16 - local.get $11 + local.get $15 + local.get $10 i64.shl i64.add f64.convert_i64_u + local.get $9 local.get $10 - local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4067,10 +4064,10 @@ local.get $7 local.get $7 i64.ctz - local.tee $10 + local.tee $9 i64.shr_u local.set $7 - local.get $10 + local.get $9 local.get $0 local.tee $4 i64.extend_i32_s @@ -4096,7 +4093,7 @@ i64.const 32 i64.shr_u i64.add - local.tee $10 + local.tee $9 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4104,7 +4101,7 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $11 + local.tee $10 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift @@ -4116,14 +4113,14 @@ i64.shr_u i64.const 1 i64.and - local.get $10 + local.get $9 local.get $0 i64.extend_i32_u i64.shl local.get $7 i64.const 4294967295 i64.and - local.get $11 + local.get $10 i64.shr_u i64.or i64.add @@ -4143,7 +4140,7 @@ i64.const 4294967295 i64.and i64.mul - local.set $10 + local.set $9 i64.const 32 local.get $0 i64.extend_i32_u @@ -4151,7 +4148,7 @@ i64.const 32 i64.shr_u i64.mul - local.get $10 + local.get $9 i64.const 32 i64.shr_u i64.add @@ -4163,11 +4160,11 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $11 + local.tee $10 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $10 + local.get $9 local.get $0 i64.extend_i32_u i64.shl @@ -4179,10 +4176,10 @@ local.get $0 i64.extend_i32_u i64.shl - local.get $10 + local.get $9 i64.const 4294967295 i64.and - local.get $11 + local.get $10 i64.shr_u i64.or i64.add @@ -4192,12 +4189,12 @@ call $~lib/math/NativeMath.scalbn end end - local.set $12 + local.set $11 end local.get $5 call $~lib/rt/pure/__release - local.get $12 - local.get $14 + local.get $11 + local.get $13 f64.copysign return end @@ -4567,13 +4564,13 @@ i32.const -1 i32.xor if - local.get $2 - call $~lib/string/String#get:length - local.tee $6 local.get $3 local.get $5 i32.sub local.tee $7 + local.get $2 + call $~lib/string/String#get:length + local.tee $6 i32.add local.tee $3 if @@ -4748,10 +4745,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 @@ -4861,10 +4858,10 @@ br $folding-inner0 end local.get $4 - local.get $2 local.get $4 i32.const 1 i32.add + local.get $2 i32.mul i32.add i32.const 1 @@ -5749,11 +5746,11 @@ i32.const 1280 call $~lib/array/Array<~lib/string/String>#push end - local.get $2 local.get $10 i32.const 1 i32.add local.tee $10 + local.get $2 i32.eq if local.get $1 @@ -6043,11 +6040,11 @@ i32.shl i32.add local.get $1 - local.get $4 local.get $1 local.get $4 i64.div_u local.tee $1 + local.get $4 i64.mul i64.sub i32.wrap_i64 @@ -6160,7 +6157,6 @@ i32.const 16 i32.eq if - local.get $2 i32.const 31 local.get $0 i32.clz @@ -6169,6 +6165,7 @@ i32.shr_s i32.const 1 i32.add + local.get $2 i32.add local.tee $1 i32.const 1 @@ -6582,7 +6579,6 @@ i32.const 16 i32.eq if - local.get $2 i32.const 63 local.get $0 i64.clz @@ -6592,6 +6588,7 @@ i32.shr_s i32.const 1 i32.add + local.get $2 i32.add local.tee $1 i32.const 1 @@ -6812,19 +6809,19 @@ i32.const 1 i32.sub local.set $4 - local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl + local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $4 @@ -6946,8 +6943,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $8 @@ -7268,8 +7265,8 @@ (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 $4 i64) + (local $5 i32) (local $6 i32) (local $7 i64) (local $8 i32) @@ -7314,7 +7311,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -7327,9 +7324,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -7344,12 +7341,12 @@ local.get $6 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7362,8 +7359,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -7372,7 +7369,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -7383,7 +7380,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 20104 @@ -7394,7 +7391,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 @@ -7417,26 +7414,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $5 + local.get $4 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $5 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -7445,11 +7442,11 @@ 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 + global.get $~lib/util/number/_exp_pow + local.tee $0 i32.add i32.const -64 i32.sub @@ -7457,35 +7454,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 + local.tee $4 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $10 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -7497,8 +7494,8 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 global.get $~lib/util/number/_exp + local.get $0 i32.add i32.const -64 i32.sub @@ -7507,17 +7504,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -8136,7 +8133,7 @@ unreachable end global.get $std/string/str - local.set $5 + local.set $2 i32.const 1616 if (result i32) i32.const 1616 @@ -8146,21 +8143,22 @@ i32.const 0 end drop + local.get $2 + call $~lib/string/String#get:length + local.set $5 block $__inlined_func$~lib/string/String#startsWith + i32.const 1616 + call $~lib/string/String#get:length + local.tee $4 i32.const 0 local.get $5 - call $~lib/string/String#get:length - local.tee $2 i32.const 0 - local.get $2 + local.get $5 i32.lt_s select - local.tee $4 - i32.const 1616 - call $~lib/string/String#get:length local.tee $0 i32.add - local.get $2 + local.get $5 i32.gt_s if i32.const 1616 @@ -8169,10 +8167,10 @@ local.set $0 br $__inlined_func$~lib/string/String#startsWith end - local.get $5 - local.get $4 - i32.const 1616 + local.get $2 local.get $0 + i32.const 1616 + local.get $4 call $~lib/util/string/compareImpl i32.eqz local.set $0 diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index b6c2bf59e8..1a32a26de8 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -768,9 +768,9 @@ if (result i32) i32.const 0 else - local.get $1 local.get $0 i32.load + local.get $1 i32.eq end if @@ -1249,11 +1249,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -1268,11 +1268,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1286,11 +1286,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index f0485d996f..dc56ae4989 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -443,10 +443,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -455,10 +455,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -565,10 +565,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -624,10 +624,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -664,12 +664,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -728,10 +728,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -751,10 +751,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -949,10 +949,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -1170,10 +1170,10 @@ i32.and i32.or i32.store - local.get $2 local.get $1 i32.const 16 i32.add + local.get $2 i32.add local.tee $1 local.get $4 @@ -3023,16 +3023,16 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add - local.get $2 i32.const 255 local.get $2 i32.sub i32.const 31 i32.shr_s + local.get $2 i32.or local.get $2 i32.const 31 @@ -3055,9 +3055,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_u ) @@ -3074,9 +3074,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add local.get $2 i32.store8 @@ -3269,11 +3269,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -3288,11 +3288,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -3306,11 +3306,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -3374,9 +3374,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_s ) @@ -3906,9 +3906,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add local.get $2 i32.store8 @@ -4603,9 +4603,9 @@ call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 i32.load offset=4 + local.get $1 i32.add i32.load8_u ) @@ -5591,10 +5591,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 @@ -9064,6 +9064,9 @@ call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $2 + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.and @@ -9438,6 +9441,9 @@ call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) + local.get $2 + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release local.get $0 i64.const 1 i64.and @@ -9915,8 +9921,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10016,8 +10022,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10062,8 +10068,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10150,11 +10156,11 @@ local.get $2 call $~lib/rt/pure/__retain local.set $2 - local.get $0 i32.const 6256 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s + local.get $0 i64.ne if i32.const 0 @@ -10164,8 +10170,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10266,8 +10272,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -10313,8 +10319,8 @@ call $~lib/builtins/abort unreachable end - local.get $1 global.get $std/typedarray/forEachCallCount + local.get $1 i32.ne if i32.const 0 @@ -20814,19 +20820,19 @@ i32.const 1 i32.sub local.set $4 - local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl + local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $4 @@ -20948,8 +20954,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $8 @@ -21270,8 +21276,8 @@ (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 $4 i64) + (local $5 i32) (local $6 i32) (local $7 i64) (local $8 i32) @@ -21316,7 +21322,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -21329,9 +21335,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -21346,12 +21352,12 @@ local.get $6 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21364,8 +21370,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -21374,7 +21380,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -21385,7 +21391,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 8072 @@ -21396,7 +21402,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 @@ -21419,26 +21425,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $5 + local.get $4 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $5 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -21447,11 +21453,11 @@ 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 + global.get $~lib/util/number/_exp_pow + local.tee $0 i32.add i32.const -64 i32.sub @@ -21459,35 +21465,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 + local.tee $4 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $10 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -21499,8 +21505,8 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 global.get $~lib/util/number/_exp + local.get $0 i32.add i32.const -64 i32.sub @@ -21509,17 +21515,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -21979,17 +21985,16 @@ (func $~lib/typedarray/Uint8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 call $~lib/rt/pure/__retain - local.tee $3 + local.tee $0 i32.const 16 i32.sub i32.load offset=12 - local.tee $4 + local.tee $3 i32.gt_u if i32.const 1376 @@ -22007,7 +22012,7 @@ i32.const -1 i32.eq if (result i32) - local.get $4 + local.get $3 local.get $1 i32.sub else @@ -22018,13 +22023,12 @@ call $~lib/builtins/abort unreachable end - local.set $0 + local.set $2 else - local.get $2 - local.tee $0 local.get $1 + local.get $2 i32.add - local.get $4 + local.get $3 i32.gt_s if i32.const 1040 @@ -22038,23 +22042,23 @@ i32.const 12 i32.const 4 call $~lib/rt/tlsf/__alloc - local.tee $2 - local.get $3 + local.tee $3 + local.get $0 call $~lib/rt/pure/__retain i32.store + local.get $3 local.get $2 - local.get $0 i32.store offset=8 - local.get $2 - local.get $1 local.get $3 + local.get $0 + local.get $1 i32.add i32.store offset=4 - local.get $2 - call $~lib/rt/pure/__retain local.get $3 + call $~lib/rt/pure/__retain + local.get $0 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array.wrap@varargs (param $0 i32) (param $1 i32) (result i32) @@ -24265,13 +24269,6 @@ call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array#__uget (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - i32.load offset=4 - i32.add - i32.load8_u - ) - (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -24314,7 +24311,7 @@ local.tee $4 local.get $1 local.get $2 - call $~lib/array/Array#__uget + call $~lib/typedarray/Uint8Array#__uget local.tee $5 i32.ne if @@ -24759,7 +24756,7 @@ local.tee $4 local.get $1 local.get $2 - call $~lib/array/Array#__uget + call $~lib/typedarray/Uint8Array#__uget local.tee $5 i32.ne if @@ -25208,17 +25205,17 @@ i32.add i32.load8_s local.tee $3 - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - local.get $3 i32.const 255 local.get $3 i32.sub i32.const 31 i32.shr_s i32.or + local.get $3 + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor i32.and i32.store8 local.get $1 diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 52c13126ca..82f308b5ea 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -598,19 +598,19 @@ i32.const 1 i32.sub local.set $4 - local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl + local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $4 @@ -732,8 +732,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 global.get $~lib/util/number/_K + local.get $4 i32.add global.set $~lib/util/number/_K local.get $8 @@ -925,11 +925,11 @@ 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 - local.get $0 i32.add local.get $1 local.get $4 @@ -944,11 +944,11 @@ i32.const 8 i32.ge_u if + local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -962,11 +962,11 @@ loop $while-continue|5 local.get $4 if + local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 - local.get $0 i32.add local.get $1 local.get $4 @@ -1254,8 +1254,8 @@ (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 $4 i64) + (local $5 i32) (local $6 i32) (local $7 i64) (local $8 i32) @@ -1300,7 +1300,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $4 + local.tee $5 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -1313,9 +1313,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $4 + local.get $5 i32.sub - local.set $4 + local.set $5 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1330,12 +1330,12 @@ local.get $6 local.get $9 i32.sub - local.get $4 + local.get $5 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $4 + local.get $5 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.convert_i32_s local.get $1 f64.ne @@ -1358,7 +1358,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $4 + local.tee $5 i32.const 3 i32.shl local.tee $9 @@ -1369,7 +1369,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $4 + local.get $5 i32.const 1 i32.shl i32.const 1760 @@ -1380,7 +1380,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $5 + local.set $4 local.get $0 local.get $8 i32.const 1 @@ -1403,26 +1403,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $5 + local.get $4 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $5 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1431,11 +1431,11 @@ 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 + global.get $~lib/util/number/_exp_pow + local.tee $0 i32.add i32.const -64 i32.sub @@ -1443,35 +1443,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $10 - local.get $5 + local.tee $4 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $10 + local.get $4 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $4 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $5 + local.get $4 i64.const 4294967295 i64.and i64.add @@ -1483,8 +1483,8 @@ i64.const 1 i64.sub local.tee $2 - local.get $4 global.get $~lib/util/number/_exp + local.get $0 i32.add i32.const -64 i32.sub @@ -1493,17 +1493,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $5 + local.tee $4 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul + local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 - local.get $5 i64.mul local.get $2 i64.const 4294967295 diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 9fdd91ce91..e88089b82b 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -213,10 +213,10 @@ end local.get $1 local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -225,10 +225,10 @@ i32.eq if local.get $0 - local.get $2 local.get $3 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl @@ -335,10 +335,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $3 local.get $4 i32.const 3 i32.and + local.get $3 i32.or local.tee $4 i32.store @@ -394,10 +394,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 - local.get $8 local.get $7 i32.const 3 i32.and + local.get $8 i32.or local.tee $4 i32.store @@ -434,12 +434,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 local.get $1 i32.const 16 i32.add + local.get $3 i32.add - local.get $5 i32.ne if i32.const 0 @@ -498,10 +498,10 @@ unreachable end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.store offset=16 end local.get $0 - local.get $3 local.get $6 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl @@ -719,10 +719,10 @@ i32.const 16 i32.lt_u if - local.get $2 local.get $0 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl From 72984f53f0251dd855c3805697ee19e1089d6e58 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 09:35:47 +0300 Subject: [PATCH 11/13] Revert "remove unnecessary opt instrusion pass" This reverts commit f1f1022c7efab3b894f0e7364e3a1fb471b3ae90. --- src/module.ts | 1 + tests/compiler/call-optional.optimized.wat | 2 +- tests/compiler/do.optimized.wat | 18 +- .../extends-baseaggregate.optimized.wat | 28 +- tests/compiler/for.optimized.wat | 18 +- .../implicit-getter-setter.optimized.wat | 20 +- tests/compiler/infer-array.optimized.wat | 6 +- tests/compiler/issues/1095.optimized.wat | 18 +- tests/compiler/issues/1225.optimized.wat | 18 +- tests/compiler/logical.optimized.wat | 18 +- tests/compiler/managed-cast.optimized.wat | 18 +- tests/compiler/number.optimized.wat | 6 +- tests/compiler/object-literal.optimized.wat | 26 +- tests/compiler/rc/local-init.optimized.wat | 18 +- .../rc/logical-and-mismatch.optimized.wat | 18 +- .../rc/logical-or-mismatch.optimized.wat | 18 +- tests/compiler/rc/optimize.optimized.wat | 18 +- tests/compiler/rc/rereturn.optimized.wat | 20 +- .../rc/ternary-mismatch.optimized.wat | 18 +- tests/compiler/resolve-binary.optimized.wat | 6 +- .../resolve-elementaccess.optimized.wat | 70 +- tests/compiler/resolve-ternary.optimized.wat | 26 +- tests/compiler/retain-i32.optimized.wat | 354 +--------- .../retain-release-sanity.optimized.wat | 28 +- tests/compiler/retain-return.optimized.wat | 18 +- tests/compiler/rt/finalize.optimized.wat | 26 +- tests/compiler/rt/stub-realloc.optimized.wat | 6 +- tests/compiler/runtime-full.optimized.wat | 20 +- .../compiler/std/array-literal.optimized.wat | 20 +- tests/compiler/std/array.optimized.wat | 663 +++++++++--------- tests/compiler/std/arraybuffer.optimized.wat | 26 +- tests/compiler/std/dataview.optimized.wat | 38 +- tests/compiler/std/map.optimized.wat | 470 +++++++------ tests/compiler/std/math.optimized.wat | 70 +- tests/compiler/std/set.optimized.wat | 32 +- tests/compiler/std/static-array.optimized.wat | 6 +- tests/compiler/std/staticarray.optimized.wat | 26 +- .../std/string-casemapping.optimized.wat | 36 +- .../std/string-encoding.optimized.wat | 28 +- tests/compiler/std/string.optimized.wat | 298 ++++---- tests/compiler/std/symbol.optimized.wat | 8 +- tests/compiler/std/typedarray.optimized.wat | 175 ++--- tests/compiler/wasi/trace.optimized.wat | 66 +- tests/compiler/while.optimized.wat | 18 +- 44 files changed, 1241 insertions(+), 1600 deletions(-) diff --git a/src/module.ts b/src/module.ts index 4d4af21659..28048c26b9 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1529,6 +1529,7 @@ export class Module { // } // passes.push("post-assemblyscript"); // } + passes.push("optimize-instructions"); if (optimizeLevel >= 3 || shrinkLevel >= 1) { passes.push("dce"); passes.push("inlining"); diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index 9477065e7e..fa906406bf 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -12,10 +12,10 @@ (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 - local.get $2 i32.add ) (func $call-optional/opt@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index df83b2e7b5..645cbc7c37 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -208,10 +208,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -220,10 +220,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -330,10 +330,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -389,10 +389,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -429,12 +429,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -493,10 +493,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -516,10 +516,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -714,10 +714,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 5d105429b3..8df0d5bc9e 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -133,10 +133,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -145,10 +145,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -255,10 +255,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -314,10 +314,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -354,12 +354,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -418,10 +418,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -441,10 +441,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -639,10 +639,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -860,10 +860,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1259,11 +1259,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1278,11 +1278,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1296,11 +1296,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1380,10 +1380,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 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 2a20090d60..7bee507bcf 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -205,10 +205,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -217,10 +217,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -327,10 +327,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -386,10 +386,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -426,12 +426,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -490,10 +490,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -513,10 +513,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -711,10 +711,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 45bb6e7f9b..771460e421 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -140,10 +140,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -152,10 +152,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -262,10 +262,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -321,10 +321,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -361,12 +361,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -425,10 +425,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -448,10 +448,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -646,10 +646,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -843,10 +843,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/infer-array.optimized.wat b/tests/compiler/infer-array.optimized.wat index 4ae753e06d..ebe9642e9f 100644 --- a/tests/compiler/infer-array.optimized.wat +++ b/tests/compiler/infer-array.optimized.wat @@ -231,11 +231,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -250,11 +250,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -268,11 +268,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 11081db9bf..cbb5e0e5d7 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -125,10 +125,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -137,10 +137,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -247,10 +247,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -306,10 +306,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -346,12 +346,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -410,10 +410,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -433,10 +433,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 78be67447a..17abeb9f31 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index ed6c28783c..b463f0cc17 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 1ffd554d5b..0e1539c724 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -128,10 +128,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -140,10 +140,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -250,10 +250,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -309,10 +309,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -349,12 +349,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -413,10 +413,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -436,10 +436,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -634,10 +634,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index ae9839a3d7..3fd153cc6e 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -854,11 +854,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -873,11 +873,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -891,11 +891,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index c8673de096..60fd25cf1b 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -132,10 +132,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -144,10 +144,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -254,10 +254,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -313,10 +313,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -353,12 +353,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -417,10 +417,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -440,10 +440,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -638,10 +638,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -835,10 +835,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1374,11 +1374,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1393,11 +1393,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1411,11 +1411,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 13e7b49d10..6c1b79feb1 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 9eac84ee56..f456da426b 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 8402125814..20787ee1a7 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -123,10 +123,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -135,10 +135,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -245,10 +245,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -304,10 +304,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -344,12 +344,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -408,10 +408,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -431,10 +431,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -629,10 +629,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index 5fb558c12d..0ea85bef7d 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -213,10 +213,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -225,10 +225,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -335,10 +335,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -394,10 +394,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -434,12 +434,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -498,10 +498,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -719,10 +719,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 5f734bc986..861e00c16b 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -829,10 +829,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 21f67e4ecf..cdd6921a4f 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -125,10 +125,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -137,10 +137,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -247,10 +247,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -306,10 +306,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -346,12 +346,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -410,10 +410,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -433,10 +433,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index cf6a0e6e82..78726945aa 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -869,11 +869,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -888,11 +888,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -906,11 +906,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index f007d23c77..b6e217bab8 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -617,19 +617,19 @@ i32.const 1 i32.sub local.set $4 + local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl - local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $4 @@ -751,8 +751,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $8 @@ -944,11 +944,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -963,11 +963,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -981,11 +981,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1273,8 +1273,8 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i64) (local $8 i32) @@ -1319,7 +1319,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -1332,9 +1332,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1349,12 +1349,12 @@ local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1367,8 +1367,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1377,7 +1377,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -1388,7 +1388,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 2104 @@ -1399,7 +1399,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 @@ -1422,26 +1422,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $4 + local.get $5 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1450,11 +1450,11 @@ 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 - global.get $~lib/util/number/_exp_pow - local.tee $0 i32.add i32.const -64 i32.sub @@ -1462,35 +1462,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $4 + local.tee $10 + local.get $5 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1502,8 +1502,8 @@ i64.const 1 i64.sub local.tee $2 + local.get $4 global.get $~lib/util/number/_exp - local.get $0 i32.add i32.const -64 i32.sub @@ -1512,17 +1512,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 + local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -1863,9 +1863,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add local.get $2 i32.store8 @@ -1883,9 +1883,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_u ) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index cca6ee4e76..f9c8a3afe1 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -152,10 +152,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -164,10 +164,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -274,10 +274,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -333,10 +333,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -373,12 +373,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -437,10 +437,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -460,10 +460,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -658,10 +658,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -855,10 +855,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1847,11 +1847,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1866,11 +1866,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1884,11 +1884,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index bddc861fdb..99faa43113 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -1,324 +1,11 @@ (module (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 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) (data (i32.const 1024) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00r\00e\00t\00a\00i\00n\00-\00i\003\002\00.\00t\00s") (export "memory" (memory $0)) (start $~start) - (func $retain-i32/test (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - i32.add - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 4 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.sub - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 5 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.mul - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 6 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.and - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 7 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.or - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 8 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.xor - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 9 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.shl - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 10 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.add - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 13 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.sub - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 14 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.mul - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 15 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.and - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 16 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.or - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 17 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.xor - i32.const 255 - i32.and - local.tee $2 - local.get $2 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 18 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.shl - i32.const 255 - i32.and - local.tee $0 - local.get $0 - i32.ne - if - i32.const 0 - i32.const 1040 - i32.const 19 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ) - (func $start:retain-i32 + (func $~start (local $0 i32) - i32.const 0 - i32.const 127 - call $retain-i32/test - i32.const 127 - i32.const 0 - call $retain-i32/test - i32.const 1 - i32.const 127 - call $retain-i32/test - i32.const 127 - i32.const 1 - call $retain-i32/test - i32.const -1 - i32.const 127 - call $retain-i32/test - i32.const 127 - i32.const -1 - call $retain-i32/test - i32.const 0 - i32.const -128 - call $retain-i32/test - i32.const -128 - i32.const 0 - call $retain-i32/test - i32.const 1 - i32.const -128 - call $retain-i32/test - i32.const -128 - i32.const 1 - call $retain-i32/test - i32.const -1 - i32.const -128 - call $retain-i32/test - i32.const -128 - i32.const -1 - call $retain-i32/test - i32.const 127 - i32.const 127 - call $retain-i32/test - i32.const -128 - i32.const -128 - call $retain-i32/test - i32.const 127 - i32.const -128 - call $retain-i32/test - i32.const -128 - i32.const 127 - call $retain-i32/test - i32.const 0 - i32.const 255 - call $retain-i32/test - i32.const 255 - i32.const 0 - call $retain-i32/test - i32.const 1 - i32.const 255 - call $retain-i32/test - i32.const 255 - i32.const 1 - call $retain-i32/test - i32.const -1 - i32.const 255 - call $retain-i32/test - i32.const 255 - i32.const -1 - call $retain-i32/test - i32.const 255 - i32.const 255 - call $retain-i32/test i32.const -128 local.set $0 loop $for-loop|0 @@ -326,42 +13,6 @@ i32.const 255 i32.le_s if - i32.const 0 - local.get $0 - call $retain-i32/test - i32.const 1 - local.get $0 - call $retain-i32/test - i32.const -1 - local.get $0 - call $retain-i32/test - i32.const -128 - local.get $0 - call $retain-i32/test - i32.const 127 - local.get $0 - call $retain-i32/test - i32.const 255 - local.get $0 - call $retain-i32/test - i32.const -32768 - local.get $0 - call $retain-i32/test - i32.const 32767 - local.get $0 - call $retain-i32/test - i32.const 65535 - local.get $0 - call $retain-i32/test - i32.const 2147483647 - local.get $0 - call $retain-i32/test - i32.const -2147483648 - local.get $0 - call $retain-i32/test - i32.const -1 - local.get $0 - call $retain-i32/test local.get $0 i32.const 1 i32.add @@ -376,7 +27,4 @@ i32.load8_s drop ) - (func $~start - call $start:retain-i32 - ) ) diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index c361159acf..80bb87a6ea 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -150,10 +150,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -162,10 +162,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -272,10 +272,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -331,10 +331,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -371,12 +371,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -435,10 +435,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -458,10 +458,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -656,10 +656,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -877,10 +877,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1438,11 +1438,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1457,11 +1457,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1475,11 +1475,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1561,10 +1561,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 diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index f3ffbb52e1..d3e6749890 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -128,10 +128,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -140,10 +140,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -250,10 +250,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -309,10 +309,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -349,12 +349,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -413,10 +413,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -436,10 +436,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -634,10 +634,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 141c2263e2..19314a04e3 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -148,10 +148,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -160,10 +160,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -270,10 +270,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -329,10 +329,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -369,12 +369,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -433,10 +433,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -456,10 +456,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -654,10 +654,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -851,10 +851,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1698,11 +1698,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1717,11 +1717,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1735,11 +1735,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/rt/stub-realloc.optimized.wat b/tests/compiler/rt/stub-realloc.optimized.wat index 69d15de28b..f8dd972f4e 100644 --- a/tests/compiler/rt/stub-realloc.optimized.wat +++ b/tests/compiler/rt/stub-realloc.optimized.wat @@ -244,11 +244,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -263,11 +263,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -281,11 +281,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index bc0ffaf702..c866b315bd 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -126,10 +126,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -138,10 +138,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -248,10 +248,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -307,10 +307,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -347,12 +347,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -411,10 +411,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -434,10 +434,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -632,10 +632,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -829,10 +829,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 754d8c2104..3c9e9cfb9b 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -178,10 +178,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -190,10 +190,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -300,10 +300,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -359,10 +359,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -399,12 +399,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -463,10 +463,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -486,10 +486,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -684,10 +684,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -881,10 +881,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 21254ca888..7186a80625 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -509,10 +509,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -631,10 +631,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -690,10 +690,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -730,12 +730,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -794,10 +794,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -817,10 +817,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -1015,10 +1015,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1236,10 +1236,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1860,11 +1860,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1879,11 +1879,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1897,11 +1897,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -2385,10 +2385,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 @@ -2919,13 +2919,13 @@ local.get $3 i32.lt_s if + local.get $1 local.get $0 local.get $2 i32.const 2 i32.shl i32.add i32.load - local.get $1 i32.eq if local.get $2 @@ -3582,8 +3582,8 @@ (func $start:std/array~anonymous|16 (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 call $~lib/rt/pure/__retain - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3641,8 +3641,8 @@ i32.const 100 call $~lib/array/Array#push drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -3654,8 +3654,8 @@ local.tee $1 call $~lib/array/Array#pop drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -3793,8 +3793,8 @@ i32.const 100 call $~lib/array/Array#push drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -3869,8 +3869,8 @@ (func $start:std/array~anonymous|23 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 call $~lib/rt/pure/__retain - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3882,8 +3882,8 @@ local.tee $1 call $~lib/array/Array#pop drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -3965,8 +3965,8 @@ i32.const 100 call $~lib/array/Array#push drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -3978,8 +3978,8 @@ (func $start:std/array~anonymous|27 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 call $~lib/rt/pure/__retain - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i call $~lib/rt/pure/__release @@ -3993,8 +3993,8 @@ local.tee $1 call $~lib/array/Array#pop drop - global.get $std/array/i local.get $0 + global.get $std/array/i i32.add global.set $std/array/i local.get $1 @@ -5847,6 +5847,7 @@ global.get $~lib/math/random_state1_64 local.tee $1 global.set $~lib/math/random_state0_64 + local.get $1 local.get $0 local.get $0 i64.const 23 @@ -5857,7 +5858,6 @@ i64.const 17 i64.shr_u i64.xor - local.get $1 i64.xor local.get $1 i64.const 26 @@ -7402,12 +7402,12 @@ call $~lib/rt/pure/__release return end + local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 11 i32.add - local.get $4 i32.mul i32.const 11 i32.add @@ -7581,12 +7581,12 @@ call $~lib/rt/pure/__release return end + local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 10 i32.add - local.get $4 i32.mul i32.const 10 i32.add @@ -7868,19 +7868,19 @@ i32.const 1 i32.sub local.set $4 + local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl - local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $4 @@ -8002,8 +8002,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $8 @@ -8324,8 +8324,8 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i64) (local $8 i32) @@ -8370,7 +8370,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -8383,9 +8383,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -8400,12 +8400,12 @@ local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -8418,8 +8418,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -8428,7 +8428,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -8439,7 +8439,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 9720 @@ -8450,7 +8450,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 @@ -8473,26 +8473,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $4 + local.get $5 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8501,11 +8501,11 @@ 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 - global.get $~lib/util/number/_exp_pow - local.tee $0 i32.add i32.const -64 i32.sub @@ -8513,35 +8513,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $4 + local.tee $10 + local.get $5 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -8553,8 +8553,8 @@ i64.const 1 i64.sub local.tee $2 + local.get $4 global.get $~lib/util/number/_exp - local.get $0 i32.add i32.const -64 i32.sub @@ -8563,17 +8563,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 + local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -8965,23 +8965,22 @@ local.get $8 if local.get $1 - local.get $1 + local.tee $2 local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $2 + local.tee $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/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $2 - local.set $1 end local.get $3 i32.const 1 @@ -9061,133 +9060,132 @@ (local $8 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $8 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $7 + local.tee $6 i32.const 0 i32.lt_s if - local.get $8 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $7 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release i32.const 10112 i32.const 7840 - local.get $2 + local.get $3 select return end i32.const 7840 local.set $1 - local.get $8 + local.get $5 call $~lib/string/String#get:length - local.set $5 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 local.get $1 i32.const 10112 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $5 + local.get $8 if local.get $1 - local.get $1 - local.get $8 + local.tee $2 + local.get $5 call $~lib/string/String.__concat - local.tee $6 - local.tee $3 + local.tee $7 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $7 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -9195,21 +9193,21 @@ i32.const 10112 call $~lib/string/String.__concat local.tee $4 - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $8 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10095,169 +10093,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10324,12 +10321,12 @@ call $~lib/rt/pure/__release return end + local.get $4 local.get $2 call $~lib/string/String#get:length local.tee $5 i32.const 10 i32.add - local.get $4 i32.mul i32.const 10 i32.add @@ -10440,169 +10437,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10624,169 +10620,168 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 i32.const 8144 call $~lib/array/Array#join else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $4 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $0 i32.const 8144 call $~lib/array/Array#join - local.tee $3 + local.tee $2 local.get $1 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10812,70 +10807,70 @@ (local $9 i32) i32.const 8144 call $~lib/rt/pure/__retain - local.set $9 + local.set $5 local.get $1 i32.const 1 i32.sub - local.tee $8 + local.tee $6 i32.const 0 i32.lt_s if - local.get $9 + local.get $5 call $~lib/rt/pure/__release i32.const 7840 return end - local.get $8 + local.get $6 i32.eqz if local.get $0 i32.load - local.tee $2 + local.tee $3 if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 end - local.get $2 + local.get $3 if (result i32) - local.get $2 + local.get $3 call $~lib/array/Array<~lib/array/Array>#toString else i32.const 7840 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release - local.get $2 + local.get $3 call $~lib/rt/pure/__release return end i32.const 7840 local.set $1 - local.get $9 + local.get $5 call $~lib/string/String#get:length - local.set $6 + local.set $8 loop $for-loop|0 - local.get $2 - local.get $8 + local.get $3 + local.get $6 i32.lt_s if local.get $4 local.get $0 - local.get $2 + local.get $3 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $4 if local.get $1 @@ -10884,68 +10879,67 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $7 call $~lib/string/String.__concat - local.tee $5 - local.tee $3 + local.tee $9 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $5 + local.get $9 call $~lib/rt/pure/__release - local.get $3 + local.get $2 local.set $1 end - local.get $6 + local.get $8 if local.get $1 - local.get $1 - local.get $9 + local.tee $2 + local.get $5 call $~lib/string/String.__concat local.tee $7 - local.tee $3 + local.tee $1 + local.get $2 i32.ne if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $2 call $~lib/rt/pure/__release end local.get $7 call $~lib/rt/pure/__release - local.get $3 - local.set $1 end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end local.get $4 local.get $0 - local.get $8 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.tee $0 if local.get $1 @@ -10954,24 +10948,24 @@ call $~lib/array/Array<~lib/array/Array>#toString local.tee $4 call $~lib/string/String.__concat - local.tee $2 local.tee $3 + local.tee $2 i32.ne if - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.set $3 + local.set $2 local.get $1 call $~lib/rt/pure/__release end local.get $4 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $3 + call $~lib/rt/pure/__release + local.get $2 local.set $1 end - local.get $9 + local.get $5 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -18020,7 +18014,7 @@ local.set $1 local.get $0 i32.load offset=12 - local.tee $2 + local.tee $3 local.get $1 i32.load offset=12 i32.const 0 @@ -18028,7 +18022,7 @@ select local.tee $4 i32.add - local.tee $3 + local.tee $2 i32.const 1073741808 i32.gt_u if @@ -18039,21 +18033,20 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.const 6 i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.load offset=4 local.tee $5 local.get $0 i32.load offset=4 - local.get $2 - local.tee $0 + local.get $3 call $~lib/memory/memory.copy - local.get $0 + local.get $3 local.get $5 i32.add local.get $1 @@ -18062,7 +18055,7 @@ call $~lib/memory/memory.copy local.get $1 call $~lib/rt/pure/__release - local.get $3 + 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) @@ -18299,7 +18292,6 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) local.get $0 i32.load offset=12 local.tee $1 @@ -18325,10 +18317,9 @@ i32.const 1 i32.sub local.tee $1 - local.tee $4 call $~lib/memory/memory.copy + local.get $1 local.get $2 - local.get $4 i32.add i32.const 0 i32.store8 @@ -19444,14 +19435,14 @@ local.get $3 if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add @@ -19464,10 +19455,10 @@ i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 call $~lib/rt/pure/__retain i32.store - local.get $6 + local.get $4 call $~lib/rt/pure/__release end local.get $2 @@ -19490,14 +19481,14 @@ local.get $3 if local.get $5 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add i32.load local.tee $4 local.get $5 - local.get $1 + local.get $2 i32.const 2 i32.shl i32.add @@ -19510,10 +19501,10 @@ i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 call $~lib/rt/pure/__retain i32.store - local.get $6 + local.get $4 call $~lib/rt/pure/__release end local.get $2 diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 7482c9da10..2def9036c8 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -140,10 +140,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -152,10 +152,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -262,10 +262,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -321,10 +321,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -361,12 +361,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -425,10 +425,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -448,10 +448,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -646,10 +646,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -843,10 +843,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1381,11 +1381,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1400,11 +1400,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1418,11 +1418,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 54b1768458..fe7da19535 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -148,10 +148,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -160,10 +160,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -270,10 +270,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -329,10 +329,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -369,12 +369,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -433,10 +433,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -456,10 +456,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -654,10 +654,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -851,10 +851,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1200,9 +1200,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add local.get $2 i32.store8 @@ -1316,15 +1316,15 @@ end local.get $2 if (result f32) + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add f32.load else + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load call $~lib/polyfills/bswap @@ -1396,9 +1396,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_s ) @@ -1434,9 +1434,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load16_s local.set $0 @@ -1467,9 +1467,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load local.set $0 @@ -1520,9 +1520,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_u ) @@ -1556,9 +1556,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load16_u local.set $0 @@ -1589,9 +1589,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load local.set $0 diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index da2d726839..43347517fe 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -147,10 +147,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -159,10 +159,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -269,10 +269,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -328,10 +328,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -368,12 +368,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -432,10 +432,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -455,10 +455,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -653,10 +653,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -874,10 +874,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1745,11 +1745,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1764,11 +1764,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1782,11 +1782,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1868,10 +1868,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 @@ -2722,9 +2722,9 @@ if (result i32) i32.const 0 else + local.get $1 local.get $0 i32.load - local.get $1 i32.eq end if @@ -3080,28 +3080,28 @@ i32.const 3 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $7 + local.tee $0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $7 + local.get $0 i32.const 3 i32.store offset=4 - local.get $7 + local.get $0 i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $7 + local.get $0 i32.const 4 i32.store offset=12 - local.get $7 + local.get $0 i32.const 0 i32.store offset=16 - local.get $7 + local.get $0 i32.const 0 i32.store offset=20 loop $for-loop|1 - local.get $6 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3109,8 +3109,8 @@ i32.const 100 i32.lt_s if - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -3120,9 +3120,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 - local.get $6 + local.get $0 + local.get $1 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3131,8 +3131,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3143,10 +3143,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3162,14 +3162,14 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 i32.add - local.set $6 + local.set $1 br $for-loop|1 end end - local.get $7 + local.get $0 i32.load offset=20 i32.const 100 i32.ne @@ -3182,9 +3182,9 @@ unreachable end i32.const 0 - local.set $6 + local.set $1 loop $for-loop|3 - local.get $6 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3192,8 +3192,8 @@ i32.const 100 i32.lt_s if - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3204,10 +3204,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3223,9 +3223,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 - local.get $6 + local.get $0 + local.get $1 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3234,8 +3234,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -3246,10 +3246,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -3265,14 +3265,14 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 i32.add - local.set $6 + local.set $1 br $for-loop|3 end end - local.get $7 + local.get $0 i32.load offset=20 i32.const 100 i32.ne @@ -3284,47 +3284,46 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $0 call $~lib/map/Map#keys - local.set $5 - local.get $7 + local.set $4 + local.get $0 call $~lib/map/Map#values - local.set $3 + local.set $6 i32.const 24 i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $6 + local.tee $1 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $6 + local.get $1 i32.const 3 i32.store offset=4 - local.get $6 + local.get $1 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $6 + local.get $1 i32.const 4 i32.store offset=12 - local.get $6 + local.get $1 i32.const 0 i32.store offset=16 - local.get $6 + local.get $1 i32.const 0 i32.store offset=20 call $~lib/map/Map#constructor - local.set $4 + local.set $5 loop $for-loop|4 - local.get $1 - local.get $5 + local.get $2 + local.get $4 i32.load offset=12 i32.lt_s if - local.get $1 - local.tee $0 - local.get $5 + local.get $2 + local.get $4 i32.load offset=12 i32.ge_u if @@ -3335,18 +3334,18 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $5 + local.get $2 + local.get $4 i32.load offset=4 i32.add i32.load8_s - local.set $1 - local.get $3 - local.get $0 + local.set $3 + local.get $6 + local.get $2 call $~lib/array/Array#__get - local.set $2 - local.get $7 - local.get $1 + local.set $7 + local.get $0 + local.get $3 call $~lib/map/Map#has i32.eqz if @@ -3357,8 +3356,8 @@ call $~lib/builtins/abort unreachable end + local.get $0 local.get $7 - local.get $2 i32.const 20 i32.sub call $~lib/map/Map#has @@ -3371,27 +3370,27 @@ call $~lib/builtins/abort unreachable end - local.get $6 - local.get $1 local.get $1 + local.get $3 + local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $4 - local.get $2 + local.get $5 + local.get $7 i32.const 20 i32.sub - local.tee $1 - local.get $1 + local.tee $3 + local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $1 + local.set $2 br $for-loop|4 end end - local.get $6 + local.get $1 i32.load offset=20 i32.const 100 i32.ne @@ -3403,7 +3402,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.load offset=20 i32.const 100 i32.ne @@ -3416,9 +3415,9 @@ unreachable end i32.const 0 - local.set $1 + local.set $2 loop $for-loop|6 - local.get $1 + local.get $2 i32.const 24 i32.shl i32.const 24 @@ -3426,8 +3425,8 @@ i32.const 50 i32.lt_s if - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has i32.eqz if @@ -3438,10 +3437,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#get - local.get $1 + local.get $2 i32.const 24 i32.shl i32.const 24 @@ -3457,11 +3456,11 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#delete - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -3471,14 +3470,14 @@ 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 - local.get $7 + local.get $0 i32.load offset=20 i32.const 50 i32.ne @@ -3491,9 +3490,9 @@ unreachable end i32.const 0 - local.set $1 + local.set $2 loop $for-loop|8 - local.get $1 + local.get $2 i32.const 24 i32.shl i32.const 24 @@ -3501,8 +3500,8 @@ i32.const 50 i32.lt_s if - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -3512,9 +3511,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 - local.get $1 + local.get $0 + local.get $2 + local.get $2 i32.const 24 i32.shl i32.const 24 @@ -3523,8 +3522,8 @@ i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has i32.eqz if @@ -3535,11 +3534,11 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#delete - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -3549,14 +3548,14 @@ 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 - local.get $7 + local.get $0 i32.load offset=20 i32.const 50 i32.ne @@ -3568,9 +3567,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $0 call $~lib/map/Map#clear - local.get $7 + local.get $0 i32.load offset=20 if i32.const 0 @@ -3580,15 +3579,15 @@ call $~lib/builtins/abort unreachable end - local.get $5 - call $~lib/rt/pure/__release - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $1 call $~lib/rt/pure/__release - local.get $7 + 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) @@ -4313,35 +4312,35 @@ i32.const 8 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $7 + local.tee $0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $7 + local.get $0 i32.const 3 i32.store offset=4 - local.get $7 + local.get $0 i32.const 48 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $7 + local.get $0 i32.const 4 i32.store offset=12 - local.get $7 + local.get $0 i32.const 0 i32.store offset=16 - local.get $7 + local.get $0 i32.const 0 i32.store offset=20 loop $for-loop|1 - local.get $6 + local.get $1 i32.const 255 i32.and i32.const 100 i32.lt_u if - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has if i32.const 0 @@ -4351,17 +4350,17 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 - local.get $6 + local.get $0 + local.get $1 + local.get $1 i32.const 255 i32.and i32.const 10 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4372,10 +4371,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 255 i32.and i32.const 10 @@ -4389,14 +4388,14 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 i32.add - local.set $6 + local.set $1 br $for-loop|1 end end - local.get $7 + local.get $0 i32.load offset=20 i32.const 100 i32.ne @@ -4409,16 +4408,16 @@ unreachable end i32.const 0 - local.set $6 + local.set $1 loop $for-loop|3 - local.get $6 + local.get $1 i32.const 255 i32.and i32.const 100 i32.lt_u if - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4429,10 +4428,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 255 i32.and i32.const 10 @@ -4446,17 +4445,17 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 - local.get $6 + local.get $0 + local.get $1 + local.get $1 i32.const 255 i32.and i32.const 20 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#has i32.eqz if @@ -4467,10 +4466,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $6 + local.get $0 + local.get $1 call $~lib/map/Map#get - local.get $6 + local.get $1 i32.const 255 i32.and i32.const 20 @@ -4484,14 +4483,14 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 i32.add - local.set $6 + local.set $1 br $for-loop|3 end end - local.get $7 + local.get $0 i32.load offset=20 i32.const 100 i32.ne @@ -4503,47 +4502,46 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $0 call $~lib/map/Map#keys - local.set $5 - local.get $7 + local.set $4 + local.get $0 call $~lib/map/Map#values - local.set $3 + local.set $6 i32.const 24 i32.const 10 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $6 + local.tee $1 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store - local.get $6 + local.get $1 i32.const 3 i32.store offset=4 - local.get $6 + local.get $1 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 - local.get $6 + local.get $1 i32.const 4 i32.store offset=12 - local.get $6 + local.get $1 i32.const 0 i32.store offset=16 - local.get $6 + local.get $1 i32.const 0 i32.store offset=20 call $~lib/map/Map#constructor - local.set $4 + local.set $5 loop $for-loop|4 - local.get $1 - local.get $5 + local.get $2 + local.get $4 i32.load offset=12 i32.lt_s if - local.get $1 - local.tee $0 - local.get $5 + local.get $2 + local.get $4 i32.load offset=12 i32.ge_u if @@ -4554,18 +4552,18 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $5 + local.get $2 + local.get $4 i32.load offset=4 i32.add i32.load8_u - local.set $1 - local.get $3 - local.get $0 + local.set $3 + local.get $6 + local.get $2 call $~lib/array/Array#__get - local.set $2 - local.get $7 - local.get $1 + local.set $7 + local.get $0 + local.get $3 call $~lib/map/Map#has i32.eqz if @@ -4576,8 +4574,8 @@ call $~lib/builtins/abort unreachable end + local.get $0 local.get $7 - local.get $2 i32.const 20 i32.sub call $~lib/map/Map#has @@ -4590,27 +4588,27 @@ call $~lib/builtins/abort unreachable end - local.get $6 - local.get $1 local.get $1 + local.get $3 + local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $4 - local.get $2 + local.get $5 + local.get $7 i32.const 20 i32.sub - local.tee $1 - local.get $1 + local.tee $3 + local.get $3 call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $1 + local.set $2 br $for-loop|4 end end - local.get $6 + local.get $1 i32.load offset=20 i32.const 100 i32.ne @@ -4622,7 +4620,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.load offset=20 i32.const 100 i32.ne @@ -4635,16 +4633,16 @@ unreachable end i32.const 0 - local.set $1 + local.set $2 loop $for-loop|6 - local.get $1 + local.get $2 i32.const 255 i32.and i32.const 50 i32.lt_u if - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has i32.eqz if @@ -4655,10 +4653,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#get - local.get $1 + local.get $2 i32.const 255 i32.and i32.const 20 @@ -4672,11 +4670,11 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#delete - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -4686,14 +4684,14 @@ 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 - local.get $7 + local.get $0 i32.load offset=20 i32.const 50 i32.ne @@ -4706,16 +4704,16 @@ unreachable end i32.const 0 - local.set $1 + local.set $2 loop $for-loop|8 - local.get $1 + local.get $2 i32.const 255 i32.and i32.const 50 i32.lt_u if - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -4725,17 +4723,17 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 - local.get $1 + local.get $0 + local.get $2 + local.get $2 i32.const 255 i32.and i32.const 10 i32.add call $~lib/map/Map#set call $~lib/rt/pure/__release - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has i32.eqz if @@ -4746,11 +4744,11 @@ call $~lib/builtins/abort unreachable end - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#delete - local.get $7 - local.get $1 + local.get $0 + local.get $2 call $~lib/map/Map#has if i32.const 0 @@ -4760,14 +4758,14 @@ 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 - local.get $7 + local.get $0 i32.load offset=20 i32.const 50 i32.ne @@ -4779,9 +4777,9 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $0 call $~lib/map/Map#clear - local.get $7 + local.get $0 i32.load offset=20 if i32.const 0 @@ -4791,15 +4789,15 @@ call $~lib/builtins/abort unreachable end - local.get $5 - call $~lib/rt/pure/__release - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $4 + local.get $1 call $~lib/rt/pure/__release - local.get $7 + local.get $5 + call $~lib/rt/pure/__release + local.get $0 call $~lib/rt/pure/__release ) (func $~lib/util/hash/hash16 (param $0 i32) (result i32) @@ -8595,9 +8593,9 @@ if (result i32) i32.const 0 else + local.get $1 local.get $0 i64.load - local.get $1 i64.eq end if diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index aa921062e9..ebc5c36531 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -7232,35 +7232,33 @@ i32.shr_s i32.const 1023 i32.sub - local.tee $12 + local.tee $11 i32.const 20 i32.gt_s local.tee $5 select - local.get $12 + local.get $11 i32.sub - local.set $11 + local.set $12 + i32.const 2 local.get $6 local.get $9 local.get $5 select - local.tee $12 - local.get $11 - i32.shr_u local.tee $5 + local.get $12 + i32.shr_u + local.tee $11 + i32.const 1 + i32.and + i32.sub + i32.const 0 + local.get $5 local.get $11 - i32.shl local.get $12 + i32.shl i32.eq - if (result i32) - i32.const 2 - local.get $5 - i32.const 1 - i32.and - i32.sub - else - i32.const 0 - end + select else i32.const 0 end @@ -7276,10 +7274,10 @@ i32.const 2146435072 i32.eq if + local.get $18 local.get $4 i32.const 1072693248 i32.sub - local.get $18 i32.or if local.get $4 @@ -7380,10 +7378,10 @@ i32.const 0 i32.lt_s if (result f64) + local.get $5 local.get $4 i32.const 1072693248 i32.sub - local.get $5 i32.or if (result f64) local.get $3 @@ -7807,14 +7805,14 @@ i64.const 32 i64.shr_u i32.wrap_i64 - local.tee $11 + local.tee $12 i32.const 1083179008 i32.ge_s if - local.get $11 + local.get $5 + local.get $12 i32.const 1083179008 i32.sub - local.get $5 i32.or local.get $1 f64.const 8.008566259537294e-17 @@ -7826,16 +7824,16 @@ i32.or br_if $folding-inner0 else - local.get $11 + local.get $12 i32.const 2147483647 i32.and i32.const 1083231232 i32.ge_s i32.const 0 - local.get $11 + local.get $5 + local.get $12 i32.const -1064252416 i32.sub - local.get $5 i32.or local.get $1 local.get $0 @@ -7846,10 +7844,10 @@ select br_if $folding-inner1 end - local.get $11 + local.get $12 i32.const 2147483647 i32.and - local.tee $12 + local.tee $11 i32.const 20 i32.shr_s i32.const 1023 @@ -7858,19 +7856,19 @@ i32.const 0 local.set $6 local.get $1 - local.get $12 + local.get $11 i32.const 1071644672 i32.gt_s if i32.const 1048575 - local.get $11 + local.get $12 i32.const 1048576 local.get $5 i32.const 1 i32.add i32.shr_s i32.add - local.tee $12 + local.tee $11 i32.const 2147483647 i32.and i32.const 20 @@ -7881,7 +7879,7 @@ i32.shr_s i32.const -1 i32.xor - local.get $12 + local.get $11 i32.and i64.extend_i32_s i64.const 32 @@ -7889,7 +7887,7 @@ f64.reinterpret_i64 local.set $0 i32.const 0 - local.get $12 + local.get $11 i32.const 1048575 i32.and i32.const 1048576 @@ -7901,7 +7899,7 @@ local.tee $6 i32.sub local.get $6 - local.get $11 + local.get $12 i32.const 0 i32.lt_s select @@ -8602,10 +8600,10 @@ local.get $5 i64.lt_s if + local.get $5 local.get $3 i64.const 1 i64.add - local.get $5 i64.eq br_if $do-break|0 local.get $0 @@ -8721,10 +8719,10 @@ f64.gt select i32.const 0 + local.get $5 local.get $3 i64.const 1 i64.add - local.get $5 i64.eq select local.get $3 @@ -8855,10 +8853,10 @@ local.get $8 i32.lt_s if + local.get $8 local.get $9 i32.const 1 i32.add - local.get $8 i32.eq br_if $do-break|0 local.get $0 @@ -8971,10 +8969,10 @@ f32.gt select i32.const 0 + local.get $8 local.get $9 i32.const 1 i32.add - local.get $8 i32.eq select local.get $8 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index a88e112b27..85dee5ffbe 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -144,10 +144,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -156,10 +156,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -266,10 +266,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -325,10 +325,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -365,12 +365,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -429,10 +429,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -452,10 +452,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -650,10 +650,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -871,10 +871,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1731,11 +1731,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1750,11 +1750,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1768,11 +1768,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1854,10 +1854,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 @@ -5079,9 +5079,9 @@ if (result i32) i32.const 0 else + local.get $1 local.get $0 i32.load - local.get $1 i32.eq end if @@ -6431,9 +6431,9 @@ if (result i32) i32.const 0 else + local.get $1 local.get $0 i64.load - local.get $1 i64.eq end if diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 6666b93d35..5a80874100 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -210,11 +210,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -229,11 +229,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -247,11 +247,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index bddebe04bf..f5bd2d5b6b 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -178,10 +178,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -190,10 +190,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -300,10 +300,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -359,10 +359,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -399,12 +399,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -463,10 +463,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -486,10 +486,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -684,10 +684,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -881,10 +881,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1210,11 +1210,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1229,11 +1229,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1247,11 +1247,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 2c1e7eef71..fdcb5e7eeb 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -470,10 +470,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -482,10 +482,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -592,10 +592,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -651,10 +651,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -691,12 +691,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -755,10 +755,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -778,10 +778,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -976,10 +976,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1197,10 +1197,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1458,11 +1458,12 @@ loop $while-continue|0 local.get $2 if - local.get $4 + local.get $5 local.get $2 i32.const 1 i32.shr_u local.tee $3 + local.get $4 i32.add i32.const 1 i32.shl @@ -1470,7 +1471,6 @@ i32.add i32.load8_u local.tee $6 - local.get $5 i32.eq if (result i32) local.get $3 @@ -1657,11 +1657,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1676,11 +1676,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1694,11 +1694,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1780,10 +1780,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 @@ -2657,10 +2657,10 @@ i32.and i32.const 55296 i32.eq + local.get $8 local.get $2 i32.const 1 i32.add - local.get $8 i32.ne i32.and if (result i32) @@ -2914,10 +2914,10 @@ if (result i32) i32.const 1 else + local.get $3 local.get $1 i32.const 1 i32.add - local.get $3 i32.eq end if diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 39d3e28b48..ee00b07e74 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -211,10 +211,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -223,10 +223,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -333,10 +333,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -392,10 +392,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -432,12 +432,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -496,10 +496,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -519,10 +519,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -717,10 +717,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -938,10 +938,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1255,11 +1255,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1274,11 +1274,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1292,11 +1292,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -2467,10 +2467,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 diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 88b1643adf..fe725aad8e 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -798,10 +798,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -810,10 +810,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -920,10 +920,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -979,10 +979,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -1019,12 +1019,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -1083,10 +1083,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -1106,10 +1106,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -1304,10 +1304,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1525,10 +1525,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -1997,11 +1997,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -2016,11 +2016,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -2034,11 +2034,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -2225,15 +2225,15 @@ i32.div_u local.tee $5 call $~lib/memory/memory.repeat - local.get $3 local.get $4 local.get $5 i32.mul - local.tee $3 + local.tee $4 + local.get $3 i32.add local.get $2 local.get $0 - local.get $3 + local.get $4 i32.sub call $~lib/memory/memory.copy else @@ -2322,10 +2322,10 @@ (func $~lib/string/String#localeCompare (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + local.get $0 local.get $1 call $~lib/rt/pure/__retain local.tee $1 - local.get $0 i32.eq if local.get $1 @@ -3452,13 +3452,14 @@ (local $6 i32) (local $7 i64) (local $8 i32) - (local $9 i64) + (local $9 i32) (local $10 i64) - (local $11 f64) - (local $12 i64) - (local $13 f64) - (local $14 i32) - (local $15 i64) + (local $11 i64) + (local $12 f64) + (local $13 i64) + (local $14 f64) + (local $15 i32) + (local $16 i64) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain @@ -3472,7 +3473,7 @@ i32.load16_u local.set $8 f64.const 1 - local.set $13 + local.set $14 loop $while-continue|0 local.get $6 if (result i32) @@ -3509,7 +3510,7 @@ i32.eqz br_if $folding-inner0 f64.const -1 - local.set $13 + local.set $14 local.get $0 i32.const 2 i32.add @@ -3560,7 +3561,7 @@ local.get $5 call $~lib/rt/pure/__release f64.const inf - local.get $13 + local.get $14 f64.mul return end @@ -3630,7 +3631,7 @@ end br_if $folding-inner0 i32.const 1 - local.set $14 + local.set $15 loop $for-loop|2 local.get $0 i32.load16_u @@ -3678,34 +3679,34 @@ local.get $8 i32.const 48 i32.sub - local.set $1 + local.set $9 loop $for-loop|3 i32.const 1 - local.get $14 + local.get $15 i32.eqz i32.const 0 local.get $8 i32.const 46 i32.eq select - local.get $1 + local.get $9 i32.const 10 i32.lt_u select if block $for-break3 - local.get $1 + local.get $9 i32.const 10 i32.lt_u if - local.get $1 + local.get $9 i64.extend_i32_u local.get $7 i64.const 10 i64.mul i64.add local.get $7 - local.get $1 + local.get $9 i32.eqz i32.eqz i64.extend_i32_u @@ -3723,7 +3724,7 @@ local.get $2 local.set $3 i32.const 1 - local.set $14 + local.set $15 end local.get $6 i32.const 1 @@ -3739,24 +3740,25 @@ local.tee $8 i32.const 48 i32.sub - local.set $1 + local.set $9 br $for-loop|3 end end end + local.get $3 + local.get $2 + local.get $15 + select + i32.const 19 + local.get $2 + i32.const 19 + local.get $2 + i32.lt_s + select + i32.sub + local.set $1 block $~lib/util/string/scientific|inlined.0 i32.const 1 - local.get $3 - local.get $2 - local.get $14 - select - i32.const 19 - local.get $2 - i32.const 19 - local.get $2 - i32.lt_s - select - i32.sub block $~lib/util/string/parseExp|inlined.0 (result i32) i32.const 1 local.set $2 @@ -3773,7 +3775,7 @@ local.get $3 i32.const 2 i32.add - local.tee $1 + local.tee $9 i32.load16_u local.tee $0 i32.const 45 @@ -3789,10 +3791,10 @@ drop i32.const -1 local.set $2 - local.get $1 + local.get $9 i32.const 2 i32.add - local.tee $1 + local.tee $9 i32.load16_u else local.get $0 @@ -3807,10 +3809,10 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $1 + local.get $9 i32.const 2 i32.add - local.tee $1 + local.tee $9 i32.load16_u else local.get $0 @@ -3830,10 +3832,10 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $1 + local.get $9 i32.const 2 i32.add - local.tee $1 + local.tee $9 i32.load16_u local.set $0 br $while-continue|4 @@ -3859,20 +3861,20 @@ i32.ge_s br_if $~lib/util/string/parseExp|inlined.0 drop + local.get $0 local.get $4 i32.const 10 i32.mul - local.get $0 i32.add local.set $4 local.get $6 i32.const 1 i32.sub local.set $6 - local.get $1 + local.get $9 i32.const 2 i32.add - local.tee $1 + local.tee $9 i32.load16_u i32.const 48 i32.sub @@ -3884,6 +3886,7 @@ local.get $4 i32.mul end + local.get $1 i32.add local.tee $0 i32.const -342 @@ -3897,12 +3900,12 @@ i32.gt_s if f64.const inf - local.set $11 + local.set $12 br $~lib/util/string/scientific|inlined.0 end local.get $7 f64.convert_i64_u - local.set $11 + local.set $12 local.get $0 i32.eqz br_if $~lib/util/string/scientific|inlined.0 @@ -3915,7 +3918,7 @@ i32.gt_s select if - local.get $11 + local.get $12 local.get $0 i32.const 3 i32.shl @@ -3923,7 +3926,7 @@ i32.add f64.load f64.mul - local.set $11 + local.set $12 i32.const 22 local.set $0 end @@ -3936,8 +3939,8 @@ i32.shr_s local.tee $2 local.get $0 - i32.add local.get $2 + i32.add i32.xor i32.const 22 i32.le_s @@ -3949,7 +3952,7 @@ i32.const 0 i32.gt_s if - local.get $11 + local.get $12 local.get $0 i32.const 3 i32.shl @@ -3957,10 +3960,10 @@ i32.add f64.load f64.mul - local.set $11 + local.set $12 br $~lib/util/string/scientific|inlined.0 end - local.get $11 + local.get $12 i32.const 0 local.get $0 i32.sub @@ -3978,15 +3981,15 @@ local.get $7 local.get $7 i64.clz - local.tee $9 + local.tee $10 i64.shl local.set $7 local.get $0 local.tee $2 i64.extend_i32_s - local.get $9 + local.get $10 i64.sub - local.set $9 + local.set $10 loop $for-loop|6 local.get $2 i32.const -14 @@ -3999,9 +4002,9 @@ local.get $7 i64.const 6103515625 i64.div_u - local.tee $12 + local.tee $13 i64.clz - local.tee $10 + local.tee $11 i64.const 18 i64.sub i64.shl @@ -4009,15 +4012,15 @@ f64.mul f64.nearest i64.trunc_f64_u - local.get $12 - local.get $10 + local.get $13 + local.get $11 i64.shl i64.add local.set $7 - local.get $9 local.get $10 + local.get $11 i64.sub - local.set $9 + local.set $10 local.get $2 i32.const 14 i32.add @@ -4031,32 +4034,32 @@ i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $12 + local.tee $13 i64.div_u - local.tee $15 + local.tee $16 i64.clz - local.set $10 + local.set $11 local.get $7 - local.get $12 + local.get $13 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 - local.get $10 + local.get $11 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $12 + local.get $13 f64.convert_i64_u f64.div i64.trunc_f64_u - local.get $15 - local.get $10 + local.get $16 + local.get $11 i64.shl i64.add f64.convert_i64_u - local.get $9 local.get $10 + local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn @@ -4064,10 +4067,10 @@ local.get $7 local.get $7 i64.ctz - local.tee $9 + local.tee $10 i64.shr_u local.set $7 - local.get $9 + local.get $10 local.get $0 local.tee $4 i64.extend_i32_s @@ -4093,7 +4096,7 @@ i64.const 32 i64.shr_u i64.add - local.tee $9 + local.tee $10 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4101,7 +4104,7 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $10 + local.tee $11 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift @@ -4113,14 +4116,14 @@ i64.shr_u i64.const 1 i64.and - local.get $9 + local.get $10 local.get $0 i64.extend_i32_u i64.shl local.get $7 i64.const 4294967295 i64.and - local.get $10 + local.get $11 i64.shr_u i64.or i64.add @@ -4140,7 +4143,7 @@ i64.const 4294967295 i64.and i64.mul - local.set $9 + local.set $10 i64.const 32 local.get $0 i64.extend_i32_u @@ -4148,7 +4151,7 @@ i64.const 32 i64.shr_u i64.mul - local.get $9 + local.get $10 i64.const 32 i64.shr_u i64.add @@ -4160,11 +4163,11 @@ local.tee $0 i64.extend_i32_u i64.sub - local.tee $10 + local.tee $11 global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $9 + local.get $10 local.get $0 i64.extend_i32_u i64.shl @@ -4176,10 +4179,10 @@ local.get $0 i64.extend_i32_u i64.shl - local.get $9 + local.get $10 i64.const 4294967295 i64.and - local.get $10 + local.get $11 i64.shr_u i64.or i64.add @@ -4189,12 +4192,12 @@ call $~lib/math/NativeMath.scalbn end end - local.set $11 + local.set $12 end local.get $5 call $~lib/rt/pure/__release - local.get $11 - local.get $13 + local.get $12 + local.get $14 f64.copysign return end @@ -4564,13 +4567,13 @@ i32.const -1 i32.xor if + local.get $2 + call $~lib/string/String#get:length + local.tee $6 local.get $3 local.get $5 i32.sub local.tee $7 - local.get $2 - call $~lib/string/String#get:length - local.tee $6 i32.add local.tee $3 if @@ -4745,10 +4748,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 @@ -4858,10 +4861,10 @@ br $folding-inner0 end local.get $4 + local.get $2 local.get $4 i32.const 1 i32.add - local.get $2 i32.mul i32.add i32.const 1 @@ -5746,11 +5749,11 @@ i32.const 1280 call $~lib/array/Array<~lib/string/String>#push end + local.get $2 local.get $10 i32.const 1 i32.add local.tee $10 - local.get $2 i32.eq if local.get $1 @@ -6040,11 +6043,11 @@ i32.shl i32.add local.get $1 + local.get $4 local.get $1 local.get $4 i64.div_u local.tee $1 - local.get $4 i64.mul i64.sub i32.wrap_i64 @@ -6157,6 +6160,7 @@ i32.const 16 i32.eq if + local.get $2 i32.const 31 local.get $0 i32.clz @@ -6165,7 +6169,6 @@ i32.shr_s i32.const 1 i32.add - local.get $2 i32.add local.tee $1 i32.const 1 @@ -6579,6 +6582,7 @@ i32.const 16 i32.eq if + local.get $2 i32.const 63 local.get $0 i64.clz @@ -6588,7 +6592,6 @@ i32.shr_s i32.const 1 i32.add - local.get $2 i32.add local.tee $1 i32.const 1 @@ -6809,19 +6812,19 @@ i32.const 1 i32.sub local.set $4 + local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl - local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $4 @@ -6943,8 +6946,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $8 @@ -7265,8 +7268,8 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i64) (local $8 i32) @@ -7311,7 +7314,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -7324,9 +7327,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -7341,12 +7344,12 @@ local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -7359,8 +7362,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -7369,7 +7372,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -7380,7 +7383,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 20104 @@ -7391,7 +7394,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 @@ -7414,26 +7417,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $4 + local.get $5 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7442,11 +7445,11 @@ 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 - global.get $~lib/util/number/_exp_pow - local.tee $0 i32.add i32.const -64 i32.sub @@ -7454,35 +7457,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $4 + local.tee $10 + local.get $5 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -7494,8 +7497,8 @@ i64.const 1 i64.sub local.tee $2 + local.get $4 global.get $~lib/util/number/_exp - local.get $0 i32.add i32.const -64 i32.sub @@ -7504,17 +7507,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 + local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -8133,7 +8136,7 @@ unreachable end global.get $std/string/str - local.set $2 + local.set $5 i32.const 1616 if (result i32) i32.const 1616 @@ -8143,22 +8146,21 @@ i32.const 0 end drop - local.get $2 - call $~lib/string/String#get:length - local.set $5 block $__inlined_func$~lib/string/String#startsWith - i32.const 1616 - call $~lib/string/String#get:length - local.tee $4 i32.const 0 local.get $5 + call $~lib/string/String#get:length + local.tee $2 i32.const 0 - local.get $5 + local.get $2 i32.lt_s select + local.tee $4 + i32.const 1616 + call $~lib/string/String#get:length local.tee $0 i32.add - local.get $5 + local.get $2 i32.gt_s if i32.const 1616 @@ -8167,10 +8169,10 @@ local.set $0 br $__inlined_func$~lib/string/String#startsWith end - local.get $2 - local.get $0 - i32.const 1616 + local.get $5 local.get $4 + i32.const 1616 + local.get $0 call $~lib/util/string/compareImpl i32.eqz local.set $0 diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 1a32a26de8..b6c2bf59e8 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -768,9 +768,9 @@ if (result i32) i32.const 0 else + local.get $1 local.get $0 i32.load - local.get $1 i32.eq end if @@ -1249,11 +1249,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -1268,11 +1268,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1286,11 +1286,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index dc56ae4989..f0485d996f 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -443,10 +443,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -455,10 +455,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -565,10 +565,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -624,10 +624,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -664,12 +664,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -728,10 +728,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -751,10 +751,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -949,10 +949,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -1170,10 +1170,10 @@ i32.and i32.or i32.store + local.get $2 local.get $1 i32.const 16 i32.add - local.get $2 i32.add local.tee $1 local.get $4 @@ -3023,16 +3023,16 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add + local.get $2 i32.const 255 local.get $2 i32.sub i32.const 31 i32.shr_s - local.get $2 i32.or local.get $2 i32.const 31 @@ -3055,9 +3055,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_u ) @@ -3074,9 +3074,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add local.get $2 i32.store8 @@ -3269,11 +3269,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -3288,11 +3288,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -3306,11 +3306,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -3374,9 +3374,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_s ) @@ -3906,9 +3906,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add local.get $2 i32.store8 @@ -4603,9 +4603,9 @@ call $~lib/builtins/abort unreachable end + local.get $1 local.get $0 i32.load offset=4 - local.get $1 i32.add i32.load8_u ) @@ -5591,10 +5591,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 @@ -9064,9 +9064,6 @@ call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $2 - call $~lib/rt/pure/__retain - call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.and @@ -9441,9 +9438,6 @@ call $~lib/rt/pure/__release ) (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32) - local.get $2 - call $~lib/rt/pure/__retain - call $~lib/rt/pure/__release local.get $0 i64.const 1 i64.and @@ -9921,8 +9915,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10022,8 +10016,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10068,8 +10062,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10156,11 +10150,11 @@ local.get $2 call $~lib/rt/pure/__retain local.set $2 + local.get $0 i32.const 6256 local.get $1 call $~lib/array/Array#__get i64.extend_i32_s - local.get $0 i64.ne if i32.const 0 @@ -10170,8 +10164,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10272,8 +10266,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -10319,8 +10313,8 @@ call $~lib/builtins/abort unreachable end - global.get $std/typedarray/forEachCallCount local.get $1 + global.get $std/typedarray/forEachCallCount i32.ne if i32.const 0 @@ -20820,19 +20814,19 @@ i32.const 1 i32.sub local.set $4 + local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl - local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $4 @@ -20954,8 +20948,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $8 @@ -21276,8 +21270,8 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i64) (local $8 i32) @@ -21322,7 +21316,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -21335,9 +21329,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -21352,12 +21346,12 @@ local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -21370,8 +21364,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -21380,7 +21374,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -21391,7 +21385,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 8072 @@ -21402,7 +21396,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 @@ -21425,26 +21419,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $4 + local.get $5 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21453,11 +21447,11 @@ 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 - global.get $~lib/util/number/_exp_pow - local.tee $0 i32.add i32.const -64 i32.sub @@ -21465,35 +21459,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $4 + local.tee $10 + local.get $5 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -21505,8 +21499,8 @@ i64.const 1 i64.sub local.tee $2 + local.get $4 global.get $~lib/util/number/_exp - local.get $0 i32.add i32.const -64 i32.sub @@ -21515,17 +21509,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 + local.get $5 i64.mul local.get $2 i64.const 4294967295 @@ -21985,16 +21979,17 @@ (func $~lib/typedarray/Uint8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $1 local.get $0 call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 call $~lib/rt/pure/__retain - local.tee $0 + local.tee $3 i32.const 16 i32.sub i32.load offset=12 - local.tee $3 + local.tee $4 i32.gt_u if i32.const 1376 @@ -22012,7 +22007,7 @@ i32.const -1 i32.eq if (result i32) - local.get $3 + local.get $4 local.get $1 i32.sub else @@ -22023,12 +22018,13 @@ call $~lib/builtins/abort unreachable end - local.set $2 + local.set $0 else - local.get $1 local.get $2 + local.tee $0 + local.get $1 i32.add - local.get $3 + local.get $4 i32.gt_s if i32.const 1040 @@ -22042,23 +22038,23 @@ i32.const 12 i32.const 4 call $~lib/rt/tlsf/__alloc - local.tee $3 - local.get $0 + local.tee $2 + local.get $3 call $~lib/rt/pure/__retain i32.store - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $0 + i32.store offset=8 + local.get $2 local.get $1 + local.get $3 i32.add i32.store offset=4 - local.get $3 + local.get $2 call $~lib/rt/pure/__retain - local.get $0 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array.wrap@varargs (param $0 i32) (param $1 i32) (result i32) @@ -24269,6 +24265,13 @@ call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array#__uget (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=4 + i32.add + i32.load8_u + ) + (func $~lib/array/Array#__uget (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -24311,7 +24314,7 @@ local.tee $4 local.get $1 local.get $2 - call $~lib/typedarray/Uint8Array#__uget + call $~lib/array/Array#__uget local.tee $5 i32.ne if @@ -24756,7 +24759,7 @@ local.tee $4 local.get $1 local.get $2 - call $~lib/typedarray/Uint8Array#__uget + call $~lib/array/Array#__uget local.tee $5 i32.ne if @@ -25205,17 +25208,17 @@ i32.add i32.load8_s local.tee $3 + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + local.get $3 i32.const 255 local.get $3 i32.sub i32.const 31 i32.shr_s i32.or - local.get $3 - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor i32.and i32.store8 local.get $1 diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 82f308b5ea..52c13126ca 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -598,19 +598,19 @@ i32.const 1 i32.sub local.set $4 + local.get $8 local.get $7 i64.extend_i32_u local.get $10 i64.extend_i32_s i64.shl - local.get $8 i64.add local.tee $1 local.get $5 i64.le_u if - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $4 @@ -732,8 +732,8 @@ local.get $5 i64.ge_u br_if $while-continue|4 - global.get $~lib/util/number/_K local.get $4 + global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K local.get $8 @@ -925,11 +925,11 @@ 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 + local.get $0 i32.add local.get $1 local.get $4 @@ -944,11 +944,11 @@ i32.const 8 i32.ge_u if - local.get $0 local.get $4 i32.const 8 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -962,11 +962,11 @@ loop $while-continue|5 local.get $4 if - local.get $0 local.get $4 i32.const 1 i32.sub local.tee $4 + local.get $0 i32.add local.get $1 local.get $4 @@ -1254,8 +1254,8 @@ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i64) (local $8 i32) @@ -1300,7 +1300,7 @@ local.get $3 i64.clz i32.wrap_i64 - local.tee $5 + local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus @@ -1313,9 +1313,9 @@ local.tee $6 i32.const 1 i32.sub - local.get $5 + local.get $4 i32.sub - local.set $5 + local.set $4 local.get $2 local.get $2 i64.const 4503599627370496 @@ -1330,12 +1330,12 @@ local.get $6 local.get $9 i32.sub - local.get $5 + local.get $4 i32.sub i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_minus - local.get $5 + local.get $4 global.set $~lib/util/number/_exp i32.const 348 i32.const -61 @@ -1348,8 +1348,8 @@ f64.add local.tee $1 i32.trunc_f64_s - local.tee $5 - local.get $5 + local.tee $4 + local.get $4 f64.convert_i32_s local.get $1 f64.ne @@ -1358,7 +1358,7 @@ i32.shr_s i32.const 1 i32.add - local.tee $5 + local.tee $4 i32.const 3 i32.shl local.tee $9 @@ -1369,7 +1369,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - local.get $5 + local.get $4 i32.const 1 i32.shl i32.const 1760 @@ -1380,7 +1380,7 @@ local.tee $3 i64.const 4294967295 i64.and - local.set $4 + local.set $5 local.get $0 local.get $8 i32.const 1 @@ -1403,26 +1403,26 @@ i64.shr_u local.tee $10 i64.mul - local.get $4 + local.get $5 local.get $7 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $10 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1431,11 +1431,11 @@ 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 - global.get $~lib/util/number/_exp_pow - local.tee $0 i32.add i32.const -64 i32.sub @@ -1443,35 +1443,35 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and - local.tee $4 + local.tee $10 + local.get $5 i64.mul local.get $2 i64.const 4294967295 i64.and local.tee $2 - local.get $4 + local.get $10 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $4 + local.tee $5 i64.const 32 i64.shr_u i64.add local.get $2 local.get $7 i64.mul - local.get $4 + local.get $5 i64.const 4294967295 i64.and i64.add @@ -1483,8 +1483,8 @@ i64.const 1 i64.sub local.tee $2 + local.get $4 global.get $~lib/util/number/_exp - local.get $0 i32.add i32.const -64 i32.sub @@ -1493,17 +1493,17 @@ local.tee $2 i64.const 32 i64.shr_u - local.tee $4 + local.tee $5 local.get $3 i64.const 32 i64.shr_u local.tee $7 i64.mul - local.get $4 local.get $3 i64.const 4294967295 i64.and local.tee $3 + local.get $5 i64.mul local.get $2 i64.const 4294967295 diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index e88089b82b..9fdd91ce91 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -213,10 +213,10 @@ end local.get $1 local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -225,10 +225,10 @@ i32.eq if local.get $0 + local.get $2 local.get $3 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl @@ -335,10 +335,10 @@ local.get $5 call $~lib/rt/tlsf/removeBlock local.get $1 + local.get $3 local.get $4 i32.const 3 i32.and - local.get $3 i32.or local.tee $4 i32.store @@ -394,10 +394,10 @@ local.get $3 call $~lib/rt/tlsf/removeBlock local.get $3 + local.get $8 local.get $7 i32.const 3 i32.and - local.get $8 i32.or local.tee $4 i32.store @@ -434,12 +434,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $3 local.get $1 i32.const 16 i32.add - local.get $3 i32.add + local.get $5 i32.ne if i32.const 0 @@ -498,10 +498,10 @@ unreachable end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -521,10 +521,10 @@ i32.store offset=16 end local.get $0 + local.get $3 local.get $6 i32.const 4 i32.shl - local.get $3 i32.add i32.const 2 i32.shl @@ -719,10 +719,10 @@ i32.const 16 i32.lt_u if + local.get $2 local.get $0 i32.const 4 i32.shl - local.get $2 i32.add i32.const 2 i32.shl From 2fba78013eeaaef19f438dbe2676103f71bafbe0 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 09:42:11 +0300 Subject: [PATCH 12/13] better --- src/module.ts | 8 ++++---- tests/compiler/memory.optimized.wat | 11 ----------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/module.ts b/src/module.ts index 28048c26b9..e6d741b34d 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1537,16 +1537,16 @@ export class Module { passes.push("remove-unused-brs"); passes.push("remove-unused-names"); passes.push("inlining-optimizing"); - if (optimizeLevel >= 2 || shrinkLevel >= 1) { - passes.push("pick-load-signs"); - passes.push("simplify-globals-optimizing"); - } if (optimizeLevel >= 3 || shrinkLevel >= 2) { passes.push("precompute-propagate"); } else { passes.push("precompute"); } passes.push("vacuum"); + if (optimizeLevel >= 2 || shrinkLevel >= 1) { + passes.push("pick-load-signs"); + passes.push("simplify-globals-optimizing"); + } if (optimizeLevel >= 3 && shrinkLevel <= 1) { passes.push("licm"); } diff --git a/tests/compiler/memory.optimized.wat b/tests/compiler/memory.optimized.wat index b9acc22e85..bf670ac375 100644 --- a/tests/compiler/memory.optimized.wat +++ b/tests/compiler/memory.optimized.wat @@ -158,17 +158,6 @@ global.set $memory/ptr i32.const 1167 global.set $memory/ptr - global.get $memory/ptr - i32.const 1167 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 39 - i32.const 1 - call $~lib/builtins/abort - unreachable - end i32.const 1169 global.set $memory/ptr i32.const 1169 From b70d049e52103e4bda9bb0b8178dd7d1b3034001 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 3 Aug 2020 09:59:15 +0300 Subject: [PATCH 13/13] early merge blocks --- src/module.ts | 3 + tests/compiler/binary.optimized.wat | 16 +- tests/compiler/do.optimized.wat | 40 +- .../extends-baseaggregate.optimized.wat | 61 +- tests/compiler/for.optimized.wat | 44 +- tests/compiler/if.optimized.wat | 6 +- .../implicit-getter-setter.optimized.wat | 38 +- tests/compiler/issues/1095.optimized.wat | 24 +- tests/compiler/issues/1225.optimized.wat | 24 +- tests/compiler/logical.optimized.wat | 24 +- tests/compiler/loop-flow.optimized.wat | 24 +- tests/compiler/managed-cast.optimized.wat | 24 +- tests/compiler/memcpy.optimized.wat | 21 +- tests/compiler/number.optimized.wat | 208 ++- tests/compiler/object-literal.optimized.wat | 31 +- tests/compiler/rc/local-init.optimized.wat | 24 +- .../rc/logical-and-mismatch.optimized.wat | 24 +- .../rc/logical-or-mismatch.optimized.wat | 24 +- tests/compiler/rc/optimize.optimized.wat | 24 +- tests/compiler/rc/rereturn.optimized.wat | 31 +- .../rc/ternary-mismatch.optimized.wat | 24 +- tests/compiler/resolve-binary.optimized.wat | 226 ++- .../resolve-elementaccess.optimized.wat | 381 +++-- tests/compiler/resolve-ternary.optimized.wat | 239 ++- .../retain-release-sanity.optimized.wat | 242 ++- tests/compiler/retain-return.optimized.wat | 24 +- tests/compiler/rt/finalize.optimized.wat | 136 +- tests/compiler/runtime-full.optimized.wat | 31 +- .../compiler/std/array-literal.optimized.wat | 31 +- tests/compiler/std/array.optimized.wat | 755 ++++----- tests/compiler/std/arraybuffer.optimized.wat | 31 +- tests/compiler/std/dataview.optimized.wat | 31 +- tests/compiler/std/map.optimized.wat | 1447 ++++++++--------- tests/compiler/std/math.optimized.wat | 721 ++++---- tests/compiler/std/mod.optimized.wat | 86 +- tests/compiler/std/set.optimized.wat | 535 +++--- tests/compiler/std/staticarray.optimized.wat | 31 +- .../std/string-casemapping.optimized.wat | 246 ++- .../std/string-encoding.optimized.wat | 31 +- tests/compiler/std/string.optimized.wat | 911 +++++------ tests/compiler/std/symbol.optimized.wat | 9 +- tests/compiler/std/typedarray.optimized.wat | 556 +++---- tests/compiler/super-inline.optimized.wat | 2 +- tests/compiler/wasi/trace.optimized.wat | 381 +++-- tests/compiler/while.optimized.wat | 40 +- 45 files changed, 3741 insertions(+), 4121 deletions(-) diff --git a/src/module.ts b/src/module.ts index e6d741b34d..064e438866 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1511,6 +1511,9 @@ export class Module { passes.push("vacuum"); passes.push("ssa-nomerge"); passes.push("simplify-globals-optimizing"); + passes.push("remove-unused-brs"); + passes.push("remove-unused-names"); + passes.push("merge-blocks"); } if (optimizeLevel >= 3) { passes.push("flatten"); diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 12db290bd5..77b7d23daf 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -50,6 +50,10 @@ local.get $0 i32.reinterpret_f32 local.tee $1 + i32.const -2147483648 + i32.and + local.set $4 + local.get $1 i32.const 23 i32.shr_u i32.const 255 @@ -63,10 +67,6 @@ f32.div return end - local.get $1 - i32.const -2147483648 - i32.and - local.set $4 block $folding-inner0 local.get $1 i32.const 1 @@ -191,6 +191,10 @@ local.get $0 i64.reinterpret_f64 local.tee $1 + i64.const 63 + i64.shr_u + local.set $4 + local.get $1 i64.const 52 i64.shr_u i64.const 2047 @@ -204,10 +208,6 @@ 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 diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 645cbc7c37..565621a65f 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -128,15 +128,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -411,15 +409,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1190,14 +1186,14 @@ global.set $do/ran i32.const 0 local.set $0 - loop $do-continue|06 + loop $do-continue|03 local.get $0 i32.const 1 i32.add local.tee $0 i32.const 10 i32.ne - br_if $do-continue|06 + br_if $do-continue|03 end local.get $0 i32.const 10 @@ -1218,7 +1214,7 @@ local.set $1 i32.const 0 local.set $0 - loop $do-continue|03 + loop $do-continue|04 local.get $1 i32.const 1 i32.add @@ -1235,7 +1231,7 @@ i32.rem_s br_if $do-continue|1 end - br $do-continue|03 + br $do-continue|04 end end local.get $1 @@ -1266,7 +1262,7 @@ global.set $do/ran call $do/Ref#constructor local.set $1 - loop $do-continue|04 + loop $do-continue|05 local.get $2 i32.const 1 i32.add @@ -1289,7 +1285,7 @@ end local.get $0 local.tee $1 - br_if $do-continue|04 + br_if $do-continue|05 end local.get $2 i32.const 10 @@ -1331,7 +1327,7 @@ local.set $2 call $do/Ref#constructor local.set $1 - loop $do-continue|05 + loop $do-continue|06 block $do-break|0 local.get $2 i32.const 1 @@ -1353,7 +1349,7 @@ local.tee $0 call $~lib/rt/pure/__release local.get $0 - br_if $do-continue|05 + br_if $do-continue|06 end end local.get $2 diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 8df0d5bc9e..a67611b82c 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -53,15 +53,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -336,15 +334,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -710,6 +706,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -726,11 +723,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1784,18 +1781,16 @@ local.get $0 i32.load offset=4 local.tee $1 + i32.const -2147483648 + i32.and + i32.eqz + i32.const 0 + local.get $1 i32.const 1879048192 i32.and i32.const 536870912 i32.eq - if (result i32) - local.get $1 - i32.const -2147483648 - i32.and - i32.eqz - else - i32.const 0 - end + select if local.get $0 local.get $1 @@ -1835,19 +1830,17 @@ local.tee $5 i32.load offset=4 local.tee $2 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.const 0 + local.get $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq - if (result i32) - local.get $2 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - else - i32.const 0 - end + select if local.get $5 call $~lib/rt/pure/markGray diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 7bee507bcf..8680bc669c 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -125,15 +125,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -408,15 +406,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1163,12 +1159,12 @@ global.set $for/ran i32.const 10 local.set $0 - loop $for-loop|04 + loop $for-loop|03 local.get $0 i32.const 1 i32.sub local.tee $0 - br_if $for-loop|04 + br_if $for-loop|03 end local.get $0 if @@ -1185,14 +1181,14 @@ global.set $for/ran i32.const 0 local.set $0 - loop $for-loop|06 + loop $for-loop|04 local.get $0 i32.const 1 i32.add local.tee $0 i32.const 10 i32.ne - br_if $for-loop|06 + br_if $for-loop|04 end local.get $0 i32.const 10 @@ -1215,7 +1211,7 @@ global.set $for/ran i32.const 0 local.set $0 - loop $for-loop|07 + loop $for-loop|05 local.get $0 i32.const 10 i32.lt_s @@ -1224,7 +1220,7 @@ i32.const 1 i32.add local.set $0 - br $for-loop|07 + br $for-loop|05 end end local.get $0 @@ -1265,7 +1261,7 @@ global.set $for/ran call $for/Ref#constructor local.set $0 - loop $for-loop|03 + loop $for-loop|06 local.get $0 if local.get $2 @@ -1290,7 +1286,7 @@ end local.get $1 local.set $0 - br $for-loop|03 + br $for-loop|06 end end local.get $2 @@ -1335,7 +1331,7 @@ call $for/Ref#constructor local.set $0 call $~lib/rt/pure/__release - loop $for-loop|05 + loop $for-loop|07 block $for-break0 call $for/Ref#constructor local.tee $1 @@ -1362,7 +1358,7 @@ local.get $0 call $~lib/rt/pure/__release local.set $0 - br $for-loop|05 + br $for-loop|07 end end end diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat index 5e7036cc7b..313c758fd6 100644 --- a/tests/compiler/if.optimized.wat +++ b/tests/compiler/if.optimized.wat @@ -27,9 +27,8 @@ ) (func $if/ifAlwaysReturns (param $0 i32) (result i32) local.get $0 - if (result i32) - i32.const 1 - else + i32.eqz + if i32.const 1072 i32.const 1040 i32.const 37 @@ -37,6 +36,7 @@ call $~lib/builtins/abort unreachable end + i32.const 1 ) (func $~start i32.const 0 diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 771460e421..9c33c3adf4 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -60,15 +60,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -343,15 +341,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -693,6 +689,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -709,11 +706,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1164,18 +1161,17 @@ (local $2 i32) local.get $1 local.get $0 - local.tee $2 i32.load - local.tee $0 + local.tee $2 i32.ne if local.get $1 call $~lib/rt/pure/__retain drop - local.get $0 + local.get $2 call $~lib/rt/pure/__release end - local.get $2 + local.get $0 local.get $1 i32.store ) diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index cbb5e0e5d7..4913000374 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -45,15 +45,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -328,15 +326,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 17abeb9f31..717e09b3a0 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -46,15 +46,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -329,15 +327,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index b463f0cc17..ce3a0a2d5d 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -43,15 +43,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -326,15 +324,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/loop-flow.optimized.wat b/tests/compiler/loop-flow.optimized.wat index 2e104b2226..638f2185d5 100644 --- a/tests/compiler/loop-flow.optimized.wat +++ b/tests/compiler/loop-flow.optimized.wat @@ -29,11 +29,10 @@ i32.const 1 i32.eq local.set $1 - loop $while-continue|0 (result i32) + loop $while-continue|0 local.get $1 - if (result i32) - i32.const 1 - else + i32.eqz + if local.get $0 i32.const 2 i32.ne @@ -46,6 +45,7 @@ unreachable end end + i32.const 1 ) (func $loop-flow/forAny (param $0 i32) (result i32) (local $1 i32) @@ -53,11 +53,10 @@ i32.const 1 i32.eq local.set $1 - loop $for-loop|0 (result i32) + loop $for-loop|0 local.get $1 - if (result i32) - i32.const 1 - else + i32.eqz + if local.get $0 i32.const 2 i32.eq @@ -72,6 +71,7 @@ br $for-loop|0 end end + i32.const 1 ) (func $loop-flow/doAny (param $0 i32) (result i32) (local $1 i32) @@ -79,11 +79,10 @@ i32.const 1 i32.eq local.set $1 - loop $do-continue|0 (result i32) + loop $do-continue|0 local.get $1 - if (result i32) - i32.const 1 - else + i32.eqz + if local.get $0 i32.const 2 i32.ne @@ -96,6 +95,7 @@ unreachable end end + i32.const 1 ) (func $loop-flow/whileThrow (result i32) i32.const 1088 diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 0e1539c724..ba0ca816f5 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -48,15 +48,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -331,15 +329,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index 8952f746c9..c55ff71226 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -160,22 +160,13 @@ block $break|2 block $case2|2 block $case1|2 - local.get $0 - i32.const 3 - i32.and - local.tee $3 - i32.const 1 - i32.ne - if - local.get $3 - i32.const 2 - i32.eq - br_if $case1|2 - local.get $3 + block $case0|2 + local.get $0 i32.const 3 - i32.eq - br_if $case2|2 - br $break|2 + i32.and + i32.const 1 + i32.sub + br_table $case0|2 $case1|2 $case2|2 $break|2 end local.get $1 i32.load diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 3fd153cc6e..91bd1ef485 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -349,8 +349,8 @@ ) (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 i32) - (local $8 i64) + (local $7 i64) + (local $8 i32) (local $9 i64) (local $10 i32) (local $11 i64) @@ -372,17 +372,17 @@ i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $8 loop $while-continue|0 - local.get $4 + local.get $8 i32.const 0 i32.gt_s if @@ -397,115 +397,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if - local.get $4 + block $case0|1 + local.get $8 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -514,7 +511,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -525,12 +522,12 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $8 local.get $7 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -540,11 +537,11 @@ local.get $5 i64.le_u if - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $8 i32.const 2 i32.shl i32.const 2440 @@ -563,7 +560,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 local.get $9 @@ -572,11 +569,11 @@ local.get $1 local.get $3 i64.add - local.tee $8 + local.tee $7 local.get $9 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $9 i64.lt_u select @@ -593,10 +590,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $3 i64.add @@ -605,7 +602,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 return @@ -621,13 +618,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $7 local.get $6 i64.extend_i32_s i64.or @@ -639,7 +636,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $7 i32.wrap_i64 i32.const 65535 i32.and @@ -651,27 +648,27 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 + local.set $8 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 end - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 local.get $9 i32.const 0 - local.get $4 + local.get $8 i32.sub i32.const 2 i32.shl @@ -689,7 +686,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 local.get $3 @@ -698,11 +695,11 @@ local.get $1 local.get $11 i64.add - local.tee $8 + local.tee $7 local.get $3 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $3 i64.lt_u select @@ -719,10 +716,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $11 i64.add @@ -731,7 +728,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 ) @@ -926,18 +923,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -1158,6 +1153,7 @@ (local $2 i64) (local $3 i64) (local $4 f64) + (local $5 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 1920 @@ -1166,28 +1162,39 @@ i32.const 2352 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 31 - i64.shl + local.set $3 local.get $2 i64.const 4294967295 i64.and local.tee $2 i64.const 31 i64.shl + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u + i64.add + local.set $1 + local.get $0 + local.get $0 + local.get $3 + i64.const 31 + i64.shl + local.get $2 + i64.const 31 + i64.shl i64.const 0 i64.add - local.tee $1 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $5 i64.const 4294967295 i64.and i64.const 0 @@ -1204,16 +1211,7 @@ local.get $3 i64.const 31 i64.shl - local.get $2 - i64.const 31 - i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u - i64.add - local.tee $1 + local.get $1 i64.const 32 i64.shr_u i64.add diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 60fd25cf1b..42a5e9eaa8 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -52,15 +52,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -335,15 +333,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -685,6 +681,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -701,11 +698,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 6c1b79feb1..a3e22c6a0e 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -43,15 +43,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -326,15 +324,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index f456da426b..ed8cf871e1 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -43,15 +43,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -326,15 +324,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 20787ee1a7..28dd6e3978 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -43,15 +43,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -326,15 +324,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index 0ea85bef7d..995319d8fa 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -133,15 +133,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -416,15 +414,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 861e00c16b..1082f8c402 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -46,15 +46,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -329,15 +327,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -679,6 +675,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -695,11 +692,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index cdd6921a4f..e2dcc99097 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -45,15 +45,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -328,15 +326,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 78726945aa..81ca43caa9 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -364,8 +364,8 @@ ) (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 i32) - (local $8 i64) + (local $7 i64) + (local $8 i32) (local $9 i64) (local $10 i32) (local $11 i64) @@ -387,17 +387,17 @@ i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $8 loop $while-continue|0 - local.get $4 + local.get $8 i32.const 0 i32.gt_s if @@ -412,115 +412,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if - local.get $4 + block $case0|1 + local.get $8 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -529,7 +526,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -540,12 +537,12 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $8 local.get $7 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -555,11 +552,11 @@ local.get $5 i64.le_u if - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $8 i32.const 2 i32.shl i32.const 2584 @@ -578,7 +575,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 local.get $9 @@ -587,11 +584,11 @@ local.get $1 local.get $3 i64.add - local.tee $8 + local.tee $7 local.get $9 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $9 i64.lt_u select @@ -608,10 +605,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $3 i64.add @@ -620,7 +617,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 return @@ -636,13 +633,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $7 local.get $6 i64.extend_i32_s i64.or @@ -654,7 +651,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $7 i32.wrap_i64 i32.const 65535 i32.and @@ -666,27 +663,27 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 + local.set $8 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 end - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 local.get $9 i32.const 0 - local.get $4 + local.get $8 i32.sub i32.const 2 i32.shl @@ -704,7 +701,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 local.get $3 @@ -713,11 +710,11 @@ local.get $1 local.get $11 i64.add - local.tee $8 + local.tee $7 local.get $3 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $3 i64.lt_u select @@ -734,10 +731,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $11 i64.add @@ -746,7 +743,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 ) @@ -941,18 +938,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -1172,6 +1167,7 @@ (local $1 i64) (local $2 i64) (local $3 i64) + (local $4 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2064 @@ -1180,28 +1176,39 @@ i32.const 2496 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 + local.tee $1 i64.const 32 i64.shr_u - local.tee $3 - i64.const 31 - i64.shl - local.get $2 + local.set $3 + local.get $1 i64.const 4294967295 i64.and - local.tee $2 + local.tee $1 + i64.const 31 + i64.shl + local.get $1 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u + i64.add + local.set $2 + local.get $0 + local.get $0 + local.get $3 + i64.const 31 + i64.shl + local.get $1 i64.const 31 i64.shl i64.const 0 i64.add - local.tee $1 + local.tee $4 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $4 i64.const 4294967295 i64.and i64.const 0 @@ -1219,19 +1226,10 @@ i64.const 31 i64.shl local.get $2 - i64.const 31 - i64.shl - local.get $2 - i64.const 10 - i64.shl i64.const 32 i64.shr_u i64.add - local.tee $1 - i64.const 32 - i64.shr_u - i64.add - local.get $1 + local.get $2 i64.const 4294967295 i64.and local.get $3 @@ -1245,31 +1243,31 @@ i64.add i64.const 1 i64.sub - local.tee $1 + local.tee $2 local.get $0 i32.const 3 i32.add - local.get $1 + local.get $2 local.get $3 i64.const 2147483647 i64.mul - local.get $2 + local.get $1 i64.const 2147483647 i64.mul - local.get $2 + local.get $1 i64.const 4294966784 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $1 + local.tee $2 i64.const 32 i64.shr_u i64.add local.get $3 i64.const 4294966784 i64.mul - local.get $1 + local.get $2 i64.const 4294967295 i64.and i64.add diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index b6e217bab8..7b40aaa0fe 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -435,41 +435,41 @@ 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) - (local $7 i32) + (local $7 i64) (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 i64) local.get $3 local.get $1 i64.sub - local.set $9 + local.set $8 local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $10 + local.tee $11 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 - local.get $10 + local.get $11 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $9 loop $while-continue|0 - local.get $4 + local.get $9 i32.const 0 i32.gt_s if @@ -484,116 +484,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $9 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -602,7 +598,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -613,14 +609,14 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $9 local.get $7 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl i64.add @@ -628,20 +624,20 @@ local.get $5 i64.le_u if - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $9 i32.const 2 i32.shl i32.const 2280 i32.add i64.load32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl - local.set $3 + local.set $10 local.get $0 local.get $6 i32.const 1 @@ -649,52 +645,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $3 + local.get $10 i64.add - local.get $9 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 local.get $3 - i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $3 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $3 + local.get $10 i64.add local.set $1 br $while-continue|3 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 return @@ -702,7 +697,7 @@ br $while-continue|0 end end - local.get $10 + local.get $11 i64.extend_i32_s local.set $13 loop $while-continue|4 (result i32) @@ -710,7 +705,7 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 @@ -740,26 +735,26 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 + local.set $9 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 - local.get $9 + local.get $8 i32.const 0 - local.get $4 + local.get $9 i32.sub i32.const 2 i32.shl @@ -767,7 +762,7 @@ i32.add i64.load32_u i64.mul - local.set $3 + local.set $8 local.get $0 local.get $6 i32.const 1 @@ -775,52 +770,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 - local.get $3 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add - local.get $3 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 - local.get $11 - i64.add local.get $3 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $3 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 end @@ -1043,18 +1037,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -1275,15 +1267,15 @@ (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $9 if (result f64) local.get $0 i32.const 45 @@ -1294,60 +1286,60 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $8 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.tee $3 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i64.clz i32.wrap_i64 local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $8 i32.const 1 - local.get $6 + local.get $8 select i32.const 1075 i32.sub - local.tee $6 + local.tee $8 i32.const 1 i32.sub local.get $4 i32.sub local.set $4 - local.get $2 - local.get $2 + local.get $3 + local.get $3 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 + local.get $8 + local.get $10 i32.sub local.get $4 i32.sub @@ -1380,10 +1372,10 @@ local.tee $4 i32.const 3 i32.shl - local.tee $9 + local.tee $10 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $10 i32.const 1408 i32.add i64.load @@ -1396,52 +1388,40 @@ i32.load16_s global.set $~lib/util/number/_exp_pow global.get $~lib/util/number/_frc_pow - local.tee $3 + local.tee $6 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 + local.set $2 + local.get $6 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 + local.tee $6 + global.get $~lib/util/number/_frc_plus + local.tee $5 i64.const 32 i64.shr_u - local.tee $10 + local.tee $7 i64.mul - local.get $5 + local.get $2 local.get $7 i64.mul local.get $2 + local.get $5 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $10 - i64.mul local.get $5 + local.get $6 + i64.mul + local.get $7 i64.const 4294967295 i64.and i64.add @@ -1450,47 +1430,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + i64.const 1 + i64.sub + local.set $5 local.get $0 - i32.sub + local.get $9 + i32.const 1 + i32.shl 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 $0 + local.get $6 local.get $3 + local.get $3 + i64.clz + i32.wrap_i64 + local.tee $0 + i64.extend_i32_s + i64.shl + local.tee $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 + local.get $2 + local.get $7 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 + local.get $3 + local.get $6 i64.mul - local.get $5 + local.get $7 i64.const 4294967295 i64.and i64.add @@ -1499,36 +1480,36 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $8 + local.get $0 + i32.sub + i32.add + i32.const -64 + i32.sub + local.get $5 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub - local.get $2 + local.get $5 + local.get $6 global.get $~lib/util/number/_frc_minus - local.tee $2 + local.tee $3 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 $2 local.get $5 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and local.tee $2 - local.get $3 i64.mul i64.const 32 i64.shr_u @@ -1538,7 +1519,7 @@ i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul local.get $3 i64.const 4294967295 @@ -1552,13 +1533,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $9 call $~lib/util/number/genDigits - local.get $8 + local.get $9 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $9 i32.add ) (func $~lib/string/String#get:length (param $0 i32) (result i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index f9c8a3afe1..86bb1d91ff 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -72,15 +72,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -355,15 +353,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -705,6 +701,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -721,11 +718,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1342,8 +1339,8 @@ ) (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 i32) - (local $8 i64) + (local $7 i64) + (local $8 i32) (local $9 i64) (local $10 i32) (local $11 i64) @@ -1365,17 +1362,17 @@ i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 local.get $10 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $8 loop $while-continue|0 - local.get $4 + local.get $8 i32.const 0 i32.gt_s if @@ -1390,115 +1387,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - i32.const 10 - i32.ne - if - local.get $4 + block $case0|1 + local.get $8 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -1507,7 +1501,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -1518,12 +1512,12 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $8 local.get $7 + local.get $2 i64.extend_i32_u local.get $10 i64.extend_i32_s @@ -1533,11 +1527,11 @@ local.get $5 i64.le_u if - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $8 i32.const 2 i32.shl i32.const 2616 @@ -1556,7 +1550,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 local.get $9 @@ -1565,11 +1559,11 @@ local.get $1 local.get $3 i64.add - local.tee $8 + local.tee $7 local.get $9 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $9 i64.lt_u select @@ -1586,10 +1580,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $3 i64.add @@ -1598,7 +1592,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 return @@ -1614,13 +1608,13 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 local.get $1 i64.shr_u - local.tee $8 + local.tee $7 local.get $6 i64.extend_i32_s i64.or @@ -1632,7 +1626,7 @@ i32.const 1 i32.shl i32.add - local.get $8 + local.get $7 i32.wrap_i64 i32.const 65535 i32.and @@ -1644,27 +1638,27 @@ i32.add local.set $6 end - local.get $4 + local.get $8 i32.const 1 i32.sub - local.set $4 + local.set $8 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 end - local.get $4 + local.get $8 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 local.get $9 i32.const 0 - local.get $4 + local.get $8 i32.sub i32.const 2 i32.shl @@ -1682,7 +1676,7 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 local.get $3 @@ -1691,11 +1685,11 @@ local.get $1 local.get $11 i64.add - local.tee $8 + local.tee $7 local.get $3 i64.sub i64.gt_u - local.get $8 + local.get $7 local.get $3 i64.lt_u select @@ -1712,10 +1706,10 @@ select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 local.get $11 i64.add @@ -1724,7 +1718,7 @@ end end local.get $0 - local.get $4 + local.get $2 i32.store16 local.get $6 ) @@ -1919,18 +1913,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -2151,6 +2143,7 @@ (local $2 i64) (local $3 i64) (local $4 f64) + (local $5 i64) i32.const -4 global.set $~lib/util/number/_K i32.const 2096 @@ -2159,28 +2152,39 @@ i32.const 2528 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 31 - i64.shl + local.set $3 local.get $2 i64.const 4294967295 i64.and local.tee $2 i64.const 31 i64.shl + local.get $2 + i64.const 10 + i64.shl + i64.const 32 + i64.shr_u + i64.add + local.set $1 + local.get $0 + local.get $0 + local.get $3 + i64.const 31 + i64.shl + local.get $2 + i64.const 31 + i64.shl i64.const 0 i64.add - local.tee $1 + local.tee $5 i64.const 32 i64.shr_u i64.add - local.get $1 + local.get $5 i64.const 4294967295 i64.and i64.const 0 @@ -2197,16 +2201,7 @@ local.get $3 i64.const 31 i64.shl - local.get $2 - i64.const 31 - i64.shl - local.get $2 - i64.const 10 - i64.shl - i64.const 32 - i64.shr_u - i64.add - local.tee $1 + local.get $1 i64.const 32 i64.shr_u i64.add diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 80bb87a6ea..686f1bd9d3 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -70,15 +70,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -353,15 +351,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -727,6 +723,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -743,11 +740,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1782,16 +1779,16 @@ i32.const 3 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 12 @@ -1801,8 +1798,9 @@ i32.const 12 call $~lib/memory/memory.fill local.get $1 - local.tee $0 - local.get $3 + local.set $0 + local.get $1 + local.get $2 i32.load local.tee $4 i32.ne @@ -1813,23 +1811,23 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.get $0 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 i32.const 12 i32.store offset=8 - local.get $3 + local.get $2 i32.const 3 i32.store offset=12 - local.get $3 + local.get $2 call $~lib/array/Array#push - local.get $3 + local.get $2 call $~lib/array/Array#push - local.get $3 + local.get $2 i32.load offset=12 local.tee $1 i32.const 1 @@ -1842,7 +1840,7 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.load offset=4 local.get $1 i32.const 1 @@ -1853,25 +1851,25 @@ i32.add i32.load drop - local.get $3 + local.get $2 local.get $1 i32.store offset=12 - local.get $3 + local.get $2 call $~lib/rt/pure/__release i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 @@ -1881,8 +1879,9 @@ i32.const 0 call $~lib/memory/memory.fill local.get $1 - local.tee $0 - local.get $3 + local.set $0 + local.get $1 + local.get $2 i32.load local.tee $4 i32.ne @@ -1893,21 +1892,21 @@ local.get $4 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.get $0 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 - local.get $3 + local.get $2 loop $for-loop|0 - local.get $2 + local.get $3 i32.const 10 i32.lt_s if @@ -1915,16 +1914,16 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 @@ -1934,8 +1933,9 @@ i32.const 0 call $~lib/memory/memory.fill local.get $1 - local.tee $0 - local.get $3 + local.set $0 + local.get $1 + local.get $2 i32.load local.tee $5 i32.ne @@ -1946,16 +1946,16 @@ local.get $5 call $~lib/rt/pure/__release end - local.get $3 + local.get $2 local.get $0 i32.store - local.get $3 + local.get $2 local.get $1 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 @@ -1965,15 +1965,15 @@ i32.const 10 i32.lt_s if - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=12 local.tee $1 i32.const 1 i32.add local.tee $5 call $~lib/array/ensureSize - local.get $3 + local.get $2 i32.load offset=4 local.get $1 i32.const 2 @@ -1982,7 +1982,7 @@ i32.const 1344 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $2 local.get $5 i32.store offset=12 i32.const 1344 @@ -1994,12 +1994,12 @@ br $for-loop|1 end end - local.get $3 - call $~lib/rt/pure/__release local.get $2 + call $~lib/rt/pure/__release + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|0 end end @@ -2007,15 +2007,15 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $2 - call $~lib/rt/pure/__retain local.tee $3 + call $~lib/rt/pure/__retain + local.tee $2 i32.const 1456 call $~lib/string/String.__concat - local.get $2 - call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 i32.const 6 @@ -2028,111 +2028,113 @@ i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 - local.tee $0 + local.get $2 + local.set $0 + local.get $2 local.get $1 - local.tee $2 i32.load - local.tee $4 + local.tee $3 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $2 + local.get $1 local.get $0 i32.store - local.get $2 + local.get $1 local.set $0 - local.get $3 - local.tee $2 - local.get $0 + local.get $2 + local.tee $3 + local.get $1 i32.load local.tee $4 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $2 + local.get $3 i32.store local.get $0 - local.tee $2 - local.get $3 - local.tee $0 + local.set $3 + local.get $1 + local.get $2 i32.load - local.tee $4 + local.tee $0 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $0 call $~lib/rt/pure/__release end - local.get $0 local.get $2 + local.get $3 i32.store local.get $1 - local.tee $2 - local.get $0 + local.tee $3 + local.get $2 i32.load - local.tee $4 + local.tee $0 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $3 + local.get $0 call $~lib/rt/pure/__release end - local.get $0 local.get $2 - i32.store local.get $3 + i32.store + local.get $2 + local.set $0 + local.get $2 local.get $1 - local.tee $2 i32.load - local.tee $4 + local.tee $3 i32.ne if local.get $0 call $~lib/rt/pure/__retain local.set $0 - local.get $4 + local.get $3 call $~lib/rt/pure/__release end - local.get $2 + local.get $1 local.get $0 i32.store local.get $1 - local.get $3 + local.tee $3 + local.get $2 i32.load local.tee $0 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 + local.set $3 local.get $0 call $~lib/rt/pure/__release end - local.get $3 local.get $2 + local.get $3 i32.store local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) @@ -2382,18 +2384,16 @@ local.get $0 i32.load offset=4 local.tee $1 + i32.const -2147483648 + i32.and + i32.eqz + i32.const 0 + local.get $1 i32.const 1879048192 i32.and i32.const 536870912 i32.eq - if (result i32) - local.get $1 - i32.const -2147483648 - i32.and - i32.eqz - else - i32.const 0 - end + select if local.get $0 local.get $1 @@ -2433,19 +2433,17 @@ local.tee $5 i32.load offset=4 local.tee $2 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.const 0 + local.get $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq - if (result i32) - local.get $2 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - else - i32.const 0 - end + select if local.get $5 call $~lib/rt/pure/markGray diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index d3e6749890..2265222389 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -48,15 +48,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -331,15 +329,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index 19314a04e3..cad0f1fc39 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -68,15 +68,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -351,15 +349,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -701,6 +697,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -717,11 +714,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1335,55 +1332,56 @@ i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 i32.store - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $0 i32.const 0 call $~lib/memory/memory.fill + local.get $0 + local.set $1 + local.get $0 local.get $2 - local.tee $0 - local.get $3 i32.load - local.tee $1 + local.tee $3 i32.ne if - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 local.get $1 + call $~lib/rt/pure/__retain + local.set $1 + local.get $3 call $~lib/rt/pure/__release end - local.get $3 - local.get $0 + local.get $2 + local.get $1 i32.store - local.get $3 local.get $2 + local.get $0 i32.store offset=4 - local.get $3 + local.get $2 i32.const 0 i32.store offset=8 - local.get $3 + local.get $2 i32.const 0 i32.store offset=12 - local.get $3 + local.get $2 i32.load call $rt/finalize/expect - local.get $3 + local.get $2 call $rt/finalize/expect - local.get $3 + local.get $2 call $~lib/rt/pure/__release global.get $rt/finalize/expectedWriteIndex i32.const 2 @@ -1411,56 +1409,56 @@ i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.store i32.const 4 i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 i32.const 0 i32.store - local.get $0 - local.tee $1 local.get $2 + local.set $0 + local.get $2 + local.get $1 i32.load local.tee $3 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $3 call $~lib/rt/pure/__release end - local.get $2 - local.tee $3 local.get $1 - i32.store - local.get $3 - local.tee $1 local.get $0 + i32.store + local.get $1 + local.tee $0 + local.get $2 i32.load local.tee $3 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $3 call $~lib/rt/pure/__release end + local.get $2 local.get $0 - local.get $1 i32.store - local.get $0 - call $rt/finalize/expect local.get $2 call $rt/finalize/expect - local.get $2 + local.get $1 + call $rt/finalize/expect + local.get $1 call $~lib/rt/pure/__release - local.get $0 + local.get $2 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect global.get $rt/finalize/expectedWriteIndex @@ -2030,18 +2028,16 @@ local.get $0 i32.load offset=4 local.tee $1 + i32.const -2147483648 + i32.and + i32.eqz + i32.const 0 + local.get $1 i32.const 1879048192 i32.and i32.const 536870912 i32.eq - if (result i32) - local.get $1 - i32.const -2147483648 - i32.and - i32.eqz - else - i32.const 0 - end + select if local.get $0 local.get $1 @@ -2080,19 +2076,17 @@ local.tee $5 i32.load offset=4 local.tee $2 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.const 0 + local.get $2 i32.const 1879048192 i32.and i32.const 805306368 i32.eq - if (result i32) - local.get $2 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - else - i32.const 0 - end + select if local.get $5 call $~lib/rt/pure/markGray diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index c866b315bd..b1cfbd7047 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -46,15 +46,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -329,15 +327,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -679,6 +675,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -695,11 +692,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 3c9e9cfb9b..0360098a44 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -98,15 +98,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -381,15 +379,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -731,6 +727,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -747,11 +744,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 7186a80625..afe414b4f6 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -429,15 +429,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -712,15 +710,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1086,6 +1082,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -1102,11 +1099,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -2882,16 +2879,14 @@ ) (func $~lib/array/Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + local.get $2 local.get $0 i32.load offset=12 local.tee $3 - if (result i32) - local.get $2 - local.get $3 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $3 + select if i32.const -1 return @@ -6631,26 +6626,23 @@ (func $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 block $folding-inner0 - local.get $0 - call $~lib/rt/pure/__retain - local.tee $0 + i32.const 1 local.get $1 call $~lib/rt/pure/__retain local.tee $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 i32.eq - if (result i32) - i32.const 1 - else - local.get $0 - i32.eqz - end - if (result i32) - i32.const 1 - else - local.get $1 - i32.eqz - end + select + select br_if $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -7686,41 +7678,41 @@ call $~lib/rt/pure/__release ) (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 $7 i64) (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 i64) local.get $3 local.get $1 i64.sub - local.set $9 + local.set $8 local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $10 + local.tee $11 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 - local.get $10 + local.get $11 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $9 loop $while-continue|0 - local.get $4 + local.get $9 i32.const 0 i32.gt_s if @@ -7735,116 +7727,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $9 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -7853,7 +7841,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -7864,14 +7852,14 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $9 local.get $7 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl i64.add @@ -7879,20 +7867,20 @@ local.get $5 i64.le_u if - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $9 i32.const 2 i32.shl i32.const 9896 i32.add i64.load32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl - local.set $3 + local.set $10 local.get $0 local.get $6 i32.const 1 @@ -7900,52 +7888,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $3 + local.get $10 i64.add - local.get $9 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 local.get $3 - i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $3 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $3 + local.get $10 i64.add local.set $1 br $while-continue|3 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 return @@ -7953,7 +7940,7 @@ br $while-continue|0 end end - local.get $10 + local.get $11 i64.extend_i32_s local.set $13 loop $while-continue|4 (result i32) @@ -7961,7 +7948,7 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 @@ -7991,26 +7978,26 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 + local.set $9 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 - local.get $9 + local.get $8 i32.const 0 - local.get $4 + local.get $9 i32.sub i32.const 2 i32.shl @@ -8018,7 +8005,7 @@ i32.add i64.load32_u i64.mul - local.set $3 + local.set $8 local.get $0 local.get $6 i32.const 1 @@ -8026,52 +8013,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 - local.get $3 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add - local.get $3 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 - local.get $11 - i64.add local.get $3 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $3 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 end @@ -8094,18 +8080,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -8326,15 +8310,15 @@ (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $9 if (result f64) local.get $0 i32.const 45 @@ -8345,61 +8329,61 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $8 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.tee $3 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i64.clz i32.wrap_i64 local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $8 i32.const 1 - local.get $6 + local.get $8 select i32.const 1075 i32.sub - local.tee $6 + local.tee $8 i32.const 1 i32.sub local.get $4 i32.sub local.set $4 - local.get $2 - local.get $2 + local.get $3 + local.get $3 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 - i32.sub + local.get $8 + local.get $10 + i32.sub local.get $4 i32.sub i64.extend_i32_s @@ -8431,10 +8415,10 @@ local.tee $4 i32.const 3 i32.shl - local.tee $9 + local.tee $10 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $10 i32.const 9024 i32.add i64.load @@ -8447,52 +8431,40 @@ i32.load16_s global.set $~lib/util/number/_exp_pow global.get $~lib/util/number/_frc_pow - local.tee $3 + local.tee $6 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 + local.set $2 + local.get $6 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 + local.tee $6 + global.get $~lib/util/number/_frc_plus + local.tee $5 i64.const 32 i64.shr_u - local.tee $10 + local.tee $7 i64.mul - local.get $5 + local.get $2 local.get $7 i64.mul local.get $2 + local.get $5 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $10 - i64.mul local.get $5 + local.get $6 + i64.mul + local.get $7 i64.const 4294967295 i64.and i64.add @@ -8501,47 +8473,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + i64.const 1 + i64.sub + local.set $5 local.get $0 - i32.sub + local.get $9 + i32.const 1 + i32.shl 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 $0 + local.get $6 local.get $3 + local.get $3 + i64.clz + i32.wrap_i64 + local.tee $0 + i64.extend_i32_s + i64.shl + local.tee $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 + local.get $2 + local.get $7 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 + local.get $3 + local.get $6 i64.mul - local.get $5 + local.get $7 i64.const 4294967295 i64.and i64.add @@ -8550,36 +8523,36 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $8 + local.get $0 + i32.sub + i32.add + i32.const -64 + i32.sub + local.get $5 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub - local.get $2 + local.get $5 + local.get $6 global.get $~lib/util/number/_frc_minus - local.tee $2 + local.tee $3 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 $2 local.get $5 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and local.tee $2 - local.get $3 i64.mul i64.const 32 i64.shr_u @@ -8589,7 +8562,7 @@ i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul local.get $3 i64.const 4294967295 @@ -8603,13 +8576,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $9 call $~lib/util/number/genDigits - local.get $8 + local.get $9 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $9 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) @@ -11345,13 +11318,13 @@ i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 0 i32.const 6 @@ -11369,20 +11342,20 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 0 i32.const 6 i32.const 1568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 call $std/array/isArraysEqual i32.eqz if @@ -11393,13 +11366,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 0 i32.const 6 @@ -11417,13 +11390,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 2 i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 0 i32.const 6 @@ -11441,13 +11414,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 0 i32.const 6 @@ -11465,11 +11438,11 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -11483,13 +11456,13 @@ i32.const 1696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -11508,20 +11481,20 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 2 i32.const 7 i32.const 1792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11533,13 +11506,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -11558,13 +11531,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 2 i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -11583,13 +11556,13 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -11608,11 +11581,11 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -11910,9 +11883,9 @@ call $~lib/rt/pure/__release i32.const 0 call $~lib/array/Array#constructor - local.set $5 + local.set $4 global.get $std/array/arr - local.get $5 + local.get $4 call $~lib/array/Array#concat local.set $1 global.get $std/array/arr @@ -12012,16 +11985,16 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $4 i32.const 46 call $~lib/array/Array#push drop - local.get $5 + local.get $4 i32.const 47 call $~lib/array/Array#push drop global.get $std/array/arr - local.get $5 + local.get $4 call $~lib/array/Array#concat local.set $6 local.get $1 @@ -12038,7 +12011,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $4 i32.load offset=12 i32.const 2 i32.ne @@ -12186,7 +12159,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release @@ -12495,7 +12468,7 @@ i32.const -3 i32.const -2 call $~lib/array/Array#copyWithin - local.tee $4 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 @@ -12527,7 +12500,7 @@ i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $5 + local.tee $4 i32.const 5 i32.const 2 i32.const 3 @@ -12617,11 +12590,11 @@ call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -13207,21 +13180,19 @@ i32.const 3216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $6 local.set $0 i32.const 0 local.set $3 block $__inlined_func$~lib/array/Array#indexOf - local.get $4 + i32.const 0 + local.get $6 i32.load offset=12 - local.tee $5 - if (result i32) - i32.const 0 - local.get $5 - i32.ge_s - else - i32.const 1 - end + local.tee $1 + i32.ge_s + i32.const 1 + local.get $1 + select if i32.const -1 local.set $3 @@ -13232,7 +13203,7 @@ local.set $0 loop $while-continue|0 local.get $3 - local.get $5 + local.get $1 i32.lt_s if local.get $0 @@ -13271,21 +13242,19 @@ i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $4 local.set $0 i32.const 0 local.set $3 block $__inlined_func$~lib/array/Array#indexOf - local.get $6 + i32.const 0 + local.get $4 i32.load offset=12 - local.tee $5 - if (result i32) - i32.const 0 - local.get $5 - i32.ge_s - else - i32.const 1 - end + local.tee $1 + i32.ge_s + i32.const 1 + local.get $1 + select if i32.const -1 local.set $3 @@ -13296,7 +13265,7 @@ local.set $0 loop $while-continue|019 local.get $3 - local.get $5 + local.get $1 i32.lt_s if local.get $0 @@ -13329,10 +13298,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 44 i32.const 0 @@ -13473,32 +13442,31 @@ i32.const 0 local.set $2 i32.const 0 + i32.const 0 i32.const 1 i32.const 2 i32.const 9 i32.const 3280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $6 i32.load offset=12 - local.tee $3 - if (result i32) - i32.const 0 - local.get $3 - i32.ge_s - else - i32.const 1 - end + local.tee $1 + i32.ge_s + i32.const 1 + local.get $1 + select br_if $__inlined_func$~lib/array/Array#includes drop - local.get $4 + local.get $6 i32.load offset=4 local.set $0 loop $while-continue|020 local.get $2 - local.get $3 + local.get $1 i32.lt_s if + i32.const 1 i32.const 1 local.get $0 local.get $2 @@ -13507,15 +13475,12 @@ i32.add f32.load local.tee $30 + local.get $30 + f32.ne + local.get $30 f32.const nan:0x400000 f32.eq - if (result i32) - i32.const 1 - else - local.get $30 - local.get $30 - f32.ne - end + select br_if $__inlined_func$~lib/array/Array#includes drop local.get $2 @@ -13540,32 +13505,31 @@ i32.const 0 local.set $3 i32.const 0 + i32.const 0 i32.const 1 i32.const 3 i32.const 10 i32.const 3312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $4 i32.load offset=12 - local.tee $5 - if (result i32) - i32.const 0 - local.get $5 - i32.ge_s - else - i32.const 1 - end + local.tee $1 + i32.ge_s + i32.const 1 + local.get $1 + select br_if $__inlined_func$~lib/array/Array#includes drop - local.get $6 + local.get $4 i32.load offset=4 local.set $0 loop $while-continue|021 local.get $3 - local.get $5 + local.get $1 i32.lt_s if + i32.const 1 i32.const 1 local.get $0 local.get $3 @@ -13574,15 +13538,12 @@ i32.add f64.load local.tee $31 + local.get $31 + f64.ne + local.get $31 f64.const nan:0x8000000000000 f64.eq - if (result i32) - i32.const 1 - else - local.get $31 - local.get $31 - f64.ne - end + select br_if $__inlined_func$~lib/array/Array#includes drop local.get $3 @@ -13658,10 +13619,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release i32.const 5 i32.const 2 i32.const 3 @@ -14399,23 +14360,23 @@ call $~lib/rt/pure/__retain local.tee $25 i32.load offset=4 - local.tee $5 + local.tee $4 i32.const 1 call $std/array/Ref#constructor i32.store - local.get $5 + local.get $4 i32.const 2 call $std/array/Ref#constructor i32.store offset=4 - local.get $5 + local.get $4 i32.const 3 call $std/array/Ref#constructor i32.store offset=8 - local.get $5 + local.get $4 i32.const 4 call $std/array/Ref#constructor i32.store offset=12 - local.get $5 + local.get $4 i32.const 5 call $std/array/Ref#constructor i32.store offset=16 @@ -14484,7 +14445,7 @@ local.get $25 i32.const 0 call $~lib/array/Array#__get - local.tee $4 + local.tee $5 i32.load i32.const 1 i32.ne @@ -14514,7 +14475,7 @@ local.get $25 i32.const 2 call $~lib/array/Array#__get - local.tee $5 + local.tee $4 i32.load i32.const 5 i32.ne @@ -14723,11 +14684,11 @@ call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $33 call $~lib/rt/pure/__release @@ -15258,9 +15219,9 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.load offset=4 - local.set $5 + local.set $4 loop $for-loop|039 local.get $3 local.get $6 @@ -15285,7 +15246,7 @@ i32.const 3 global.set $~argumentsLength local.get $1 - local.get $5 + local.get $4 i32.add local.get $0 local.get $3 @@ -15303,7 +15264,7 @@ end i32.const 5760 call $~lib/rt/pure/__release - local.get $4 + local.get $5 i32.load offset=12 i32.const 4 i32.ne @@ -15315,7 +15276,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 0 call $~lib/array/Array#__get global.get $std/array/arr @@ -15426,7 +15387,7 @@ i32.const 3 call $~lib/array/Array#push drop - local.get $4 + local.get $5 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 5888 @@ -15874,7 +15835,7 @@ i32.const 6784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 call $std/array/isArraysEqual i32.eqz if @@ -15939,7 +15900,7 @@ i32.const 7104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -16156,7 +16117,7 @@ call $std/array/assertSortedDefault local.get $17 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $18 call $~lib/rt/pure/__release @@ -16164,7 +16125,7 @@ call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $12 call $~lib/rt/pure/__release @@ -16250,12 +16211,12 @@ local.tee $3 i32.const 7952 call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 call $~lib/array/Array<~lib/array/Array>#sort local.tee $1 call $~lib/rt/pure/__retain local.set $8 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain local.set $7 i32.const 1 @@ -16273,14 +16234,14 @@ i32.const 1 i32.sub call $~lib/array/Array#__get - local.set $4 + local.set $5 local.get $8 local.get $2 call $~lib/array/Array#__get local.set $6 i32.const 2 global.set $~argumentsLength - local.get $4 + local.get $5 local.get $6 local.get $7 i32.load @@ -16292,14 +16253,14 @@ call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release i32.const 0 br $__inlined_func$std/array/isSorted<~lib/string/String|null> end - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release @@ -16329,7 +16290,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release i32.const 7952 call $~lib/rt/pure/__release @@ -16360,14 +16321,14 @@ f64.const 32 f64.mul i32.trunc_f64_s - local.set $4 + local.set $5 i32.const 0 local.set $7 i32.const 7840 local.set $3 loop $for-loop|049 local.get $7 - local.get $4 + local.get $5 i32.lt_s if local.get $3 @@ -16391,7 +16352,7 @@ i32.const 2 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $5 + local.tee $4 local.get $6 i32.const 1 i32.shl @@ -16399,10 +16360,10 @@ i32.add i32.load16_u i32.store16 - local.get $5 + local.get $4 call $~lib/rt/pure/__retain end - local.tee $5 + local.tee $4 call $~lib/string/String.__concat local.tee $6 local.tee $3 @@ -16415,7 +16376,7 @@ local.get $1 call $~lib/rt/pure/__release end - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release @@ -16526,7 +16487,7 @@ i32.const 8672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.const 8704 call $~lib/array/Array#join local.tee $6 @@ -16573,7 +16534,7 @@ i32.const 10080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.const 7840 call $~lib/array/Array<~lib/string/String|null>#join local.tee $3 @@ -16663,7 +16624,7 @@ call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release @@ -16671,7 +16632,7 @@ call $~lib/rt/pure/__release local.get $15 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -16888,7 +16849,7 @@ i32.const 10912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join local.tee $0 @@ -16911,7 +16872,7 @@ i32.const 11072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.const 8144 call $~lib/array/Array<~lib/string/String|null>#join local.tee $0 @@ -17092,11 +17053,11 @@ call $~lib/rt/pure/__release local.get $15 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -17114,7 +17075,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $5 i32.load offset=4 local.tee $0 i32.const 1 @@ -17148,7 +17109,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 - local.get $4 + local.get $5 call $~lib/array/Array<~lib/array/Array>#flat local.tee $6 i32.load offset=12 @@ -17195,7 +17156,7 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.load offset=4 local.tee $0 i32.const 1 @@ -17229,7 +17190,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain i32.store offset=12 - local.get $5 + local.get $4 call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat local.set $7 i32.const 8 @@ -17342,11 +17303,11 @@ call $~lib/rt/pure/__release local.get $20 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $5 + local.get $4 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release @@ -17923,16 +17884,14 @@ ) (func $~lib/array/Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + local.get $2 local.get $0 i32.load offset=12 local.tee $3 - if (result i32) - local.get $2 - local.get $3 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $3 + select if i32.const -1 return @@ -19117,16 +19076,14 @@ local.get $1 call $~lib/rt/pure/__retain local.set $1 + local.get $2 local.get $0 i32.load offset=12 local.tee $3 - if (result i32) - local.get $2 - local.get $3 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $1 call $~lib/rt/pure/__release diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 2def9036c8..74e1c922e2 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -60,15 +60,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -343,15 +341,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -693,6 +689,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -709,11 +706,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index fe7da19535..f710a3aca4 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -68,15 +68,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -351,15 +349,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -701,6 +697,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -717,11 +714,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index 43347517fe..826e9f51d9 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -67,15 +67,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -350,15 +348,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -724,6 +720,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -740,11 +737,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1380,55 +1377,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -1436,72 +1434,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -2407,55 +2402,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load8_s i32.store8 - local.get $3 local.get $2 + local.get $5 i32.load8_s offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load8_s call $~lib/util/hash/hash8 local.get $1 @@ -2463,72 +2459,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=4 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -2752,55 +2745,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load i32.store - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load call $~lib/util/hash/hash32 local.get $1 @@ -2808,72 +2802,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3612,55 +3603,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -3668,72 +3660,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -3978,55 +3967,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load8_u i32.store8 - local.get $3 local.get $2 + local.get $5 i32.load8_u offset=1 i32.store8 offset=1 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load8_u call $~lib/util/hash/hash8 local.get $1 @@ -4034,72 +4024,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=4 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -4882,55 +4869,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 - i32.load offset=8 - i32.const 1 + local.get $6 + local.set $5 + local.get $6 + i32.load offset=8 + i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -4938,72 +4926,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -5306,55 +5291,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load16_s i32.store16 - local.get $3 local.get $2 + local.get $5 i32.load16_s offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load16_s call $~lib/util/hash/hash16 local.get $1 @@ -5362,72 +5348,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=4 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6179,55 +6162,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6235,72 +6219,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -6549,55 +6530,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 - i32.const 3 + local.set $4 + local.get $3 + 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=4 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i32.load16_u i32.store16 - local.get $3 local.get $2 + local.get $5 i32.load16_u offset=2 i32.store16 offset=2 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i32.load16_u call $~lib/util/hash/hash16 local.get $1 @@ -6605,72 +6587,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=4 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 8 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 8 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -8632,55 +8611,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i64.load i64.store - local.get $3 local.get $2 + local.get $5 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -8688,72 +8668,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=12 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32) @@ -9121,55 +9098,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 i64.load i64.store - local.get $3 local.get $2 + local.get $5 i64.load offset=8 i64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 i64.load call $~lib/util/hash/hash64 local.get $1 @@ -9177,72 +9155,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=16 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32) @@ -10594,55 +10569,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 f32.load f32.store - local.get $3 local.get $2 + local.get $5 i32.load offset=4 i32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -10651,72 +10627,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32) @@ -10997,55 +10970,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 12 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=8 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 f32.load f32.store - local.get $3 local.get $2 + local.get $5 f32.load offset=4 f32.store offset=4 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 f32.load i32.reinterpret_f32 call $~lib/util/hash/hash32 @@ -11054,72 +11028,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=8 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 12 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 12 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32) @@ -11830,55 +11801,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=12 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 f64.load f64.store - local.get $3 local.get $2 + local.get $5 i32.load offset=8 i32.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -11887,72 +11859,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=12 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 16 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 16 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32) @@ -12233,55 +12202,56 @@ local.get $1 i32.const 1 i32.add - local.tee $5 + local.tee $3 i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $6 - local.get $5 + local.set $4 + local.get $3 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 $5 + local.set $3 local.get $0 i32.load offset=8 - local.tee $4 + local.tee $6 local.get $0 i32.load offset=16 i32.const 24 i32.mul i32.add - local.set $8 - local.get $5 - local.set $3 + local.set $7 + local.get $3 + local.set $2 loop $while-continue|0 - local.get $4 - local.get $8 + local.get $6 + local.get $7 i32.ne if - local.get $4 - local.tee $2 + local.get $6 + local.set $5 + local.get $6 i32.load offset=16 i32.const 1 i32.and i32.eqz if - local.get $3 local.get $2 + local.get $5 f64.load f64.store - local.get $3 local.get $2 + local.get $5 f64.load offset=8 f64.store offset=8 - local.get $3 - local.get $6 local.get $2 + local.get $4 + local.get $5 f64.load i64.reinterpret_f64 call $~lib/util/hash/hash64 @@ -12290,72 +12260,69 @@ i32.const 2 i32.shl i32.add - local.tee $2 + local.tee $5 i32.load i32.store offset=16 + local.get $5 local.get $2 - local.get $3 i32.store - local.get $3 + local.get $2 i32.const 24 i32.add - local.set $3 + local.set $2 end - local.get $4 + local.get $6 i32.const 24 i32.add - local.set $4 + local.set $6 br $while-continue|0 end end - local.get $6 - local.tee $4 - local.get $0 + local.get $4 local.tee $2 + local.get $0 i32.load - local.tee $3 + local.tee $6 i32.ne if - local.get $4 + local.get $2 call $~lib/rt/pure/__retain - local.set $4 - local.get $3 + local.set $2 + local.get $6 call $~lib/rt/pure/__release end + local.get $0 local.get $2 - local.get $4 i32.store - local.get $2 + local.get $0 local.get $1 i32.store offset=4 - local.get $2 - local.set $1 - local.get $5 - local.tee $2 - local.get $1 + local.get $3 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $4 + local.tee $2 i32.ne if - local.get $2 + local.get $1 call $~lib/rt/pure/__retain - local.set $2 - local.get $4 + local.set $1 + local.get $2 call $~lib/rt/pure/__release 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 + local.get $4 call $~lib/rt/pure/__release - local.get $5 + local.get $3 call $~lib/rt/pure/__release ) (func $~lib/map/Map#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index ebc5c36531..f5b08a4674 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -850,21 +850,19 @@ (local $7 f64) i32.const 1 local.set $3 + i32.const 1 local.get $0 i64.reinterpret_f64 i64.const 32 i64.shr_u i32.wrap_i64 local.tee $2 + i32.const 31 + i32.shr_u + local.get $2 i32.const 1071284858 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $2 - i32.const 31 - i32.shr_u - end + select if local.get $2 i32.const -1074790400 @@ -1046,6 +1044,7 @@ (local $3 f64) (local $4 f64) (local $5 i32) + i32.const 1 local.get $0 i64.reinterpret_f64 local.tee $2 @@ -1053,15 +1052,12 @@ i64.shr_u i32.wrap_i64 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 1048576 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $2 i64.const 1 @@ -1285,18 +1281,16 @@ (local $6 f32) i32.const 1 local.set $3 + i32.const 1 local.get $0 i32.reinterpret_f32 local.tee $2 + i32.const 31 + i32.shr_u + local.get $2 i32.const 1054086096 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $2 - i32.const 31 - i32.shr_u - end + select if local.get $2 i32.const -1082130432 @@ -1453,18 +1447,16 @@ (local $2 f32) (local $3 f32) (local $4 i32) + i32.const 1 local.get $0 i32.reinterpret_f32 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 8388608 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $1 i32.const 1 @@ -2045,7 +2037,7 @@ i32.wrap_i64 i32.const 2147483647 i32.and - local.tee $4 + local.tee $3 i32.const 1141899264 i32.ge_u if @@ -2061,11 +2053,11 @@ f64.copysign return end - local.get $4 + local.get $3 i32.const 1071382528 i32.lt_u if - local.get $4 + local.get $3 i32.const 1044381696 i32.lt_u if @@ -2073,16 +2065,16 @@ return end i32.const -1 - local.set $3 + local.set $4 else local.get $0 f64.abs local.set $0 - local.get $4 + local.get $3 i32.const 1072889856 i32.lt_u if (result f64) - local.get $4 + local.get $3 i32.const 1072037888 i32.lt_u if (result f64) @@ -2097,7 +2089,7 @@ f64.div else i32.const 1 - local.set $3 + local.set $4 local.get $0 f64.const 1 f64.sub @@ -2107,12 +2099,12 @@ f64.div end else - local.get $4 + local.get $3 i32.const 1073971200 i32.lt_u if (result f64) i32.const 2 - local.set $3 + local.set $4 local.get $0 f64.const 1.5 f64.sub @@ -2124,7 +2116,7 @@ f64.div else i32.const 3 - local.set $3 + local.set $4 f64.const -1 local.get $0 f64.div @@ -2185,7 +2177,7 @@ f64.add f64.mul local.set $2 - local.get $3 + local.get $4 i32.const 0 i32.lt_s if @@ -2199,12 +2191,9 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $3 - if - local.get $3 - i32.const 1 - i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 + block $case0|0 + local.get $4 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 end f64.const 0.4636476090008061 local.get $2 @@ -2280,7 +2269,7 @@ i32.reinterpret_f32 i32.const 2147483647 i32.and - local.tee $4 + local.tee $3 i32.const 1283457024 i32.ge_u if @@ -2296,11 +2285,11 @@ f32.copysign return end - local.get $4 + local.get $3 i32.const 1054867456 i32.lt_u if - local.get $4 + local.get $3 i32.const 964689920 i32.lt_u if @@ -2308,16 +2297,16 @@ return end i32.const -1 - local.set $3 + local.set $4 else local.get $0 f32.abs local.set $0 - local.get $4 + local.get $3 i32.const 1066926080 i32.lt_u if (result f32) - local.get $4 + local.get $3 i32.const 1060110336 i32.lt_u if (result f32) @@ -2332,7 +2321,7 @@ f32.div else i32.const 1 - local.set $3 + local.set $4 local.get $0 f32.const 1 f32.sub @@ -2342,12 +2331,12 @@ f32.div end else - local.get $4 + local.get $3 i32.const 1075576832 i32.lt_u if (result f32) i32.const 2 - local.set $3 + local.set $4 local.get $0 f32.const 1.5 f32.sub @@ -2359,7 +2348,7 @@ f32.div else i32.const 3 - local.set $3 + local.set $4 f32.const -1 local.get $0 f32.div @@ -2396,7 +2385,7 @@ f32.add f32.mul local.set $2 - local.get $3 + local.get $4 i32.const 0 i32.lt_s if @@ -2410,12 +2399,9 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $3 - if - local.get $3 - i32.const 1 - i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 + block $case0|0 + local.get $4 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 end f32.const 0.46364760398864746 local.get $2 @@ -2902,31 +2888,41 @@ i32.const 2139095040 i32.eq if - f32.const 2.356194496154785 - f32.const 0.7853981852531433 - local.get $2 - i32.const 2 - i32.and - select - f32.const 3.1415927410125732 - f32.const 0 - local.get $2 - i32.const 2 - i32.and - select local.get $3 i32.const 2139095040 i32.eq - select - local.set $0 - local.get $0 - f32.neg - local.get $0 - local.get $2 - i32.const 1 - i32.and - select - return + if + f32.const 2.356194496154785 + f32.const 0.7853981852531433 + local.get $2 + i32.const 2 + i32.and + select + local.tee $0 + f32.neg + local.get $0 + local.get $2 + i32.const 1 + i32.and + select + return + else + f32.const 3.1415927410125732 + f32.const 0 + local.get $2 + i32.const 2 + i32.and + select + local.tee $0 + f32.neg + local.get $0 + local.get $2 + i32.const 1 + i32.and + select + return + end + unreachable end i32.const 1 local.get $3 @@ -3778,47 +3774,55 @@ end local.set $6 global.get $~lib/math/rempio2_y0 - local.set $3 + local.set $0 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 + local.get $0 + local.get $0 f64.mul - local.set $1 - local.get $3 + local.tee $3 local.get $0 - f64.const 0.5 - local.get $4 f64.mul - local.get $1 + local.tee $1 + f64.const -0.16666666666666632 + local.get $3 f64.const 0.00833333333332249 - local.get $0 + local.get $3 f64.const -1.984126982985795e-04 - local.get $0 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.tee $7 + f64.mul + f64.add + f64.mul + drop + local.get $0 + local.get $3 + f64.const 0.5 + local.get $4 + f64.mul + local.get $1 + local.get $7 f64.mul f64.sub f64.mul @@ -3832,10 +3836,10 @@ else f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 + local.get $0 + local.get $0 f64.mul - local.tee $0 + local.tee $3 f64.mul local.tee $1 f64.sub @@ -3845,28 +3849,28 @@ f64.sub local.get $1 f64.sub - local.get $0 - local.get $0 + local.get $3 + local.get $3 f64.const 0.0416666666666666 - local.get $0 + local.get $3 f64.const -0.001388888888887411 - local.get $0 + local.get $3 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $0 - local.get $0 + local.get $3 + local.get $3 f64.mul local.tee $1 local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $3 f64.const 2.087572321298175e-09 - local.get $0 + local.get $3 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -3875,15 +3879,14 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $0 local.get $4 f64.mul f64.sub f64.add f64.add end - local.set $0 - local.get $0 + local.tee $0 f64.neg local.get $0 local.get $6 @@ -4165,8 +4168,7 @@ f64.add f32.demote_f64 end - local.set $0 - local.get $0 + local.tee $0 f32.neg local.get $0 local.get $1 @@ -5182,6 +5184,7 @@ (local $7 f64) block $~lib/util/math/exp2_lut|inlined.0 (result f64) local.get $0 + local.tee $2 i64.reinterpret_f64 local.tee $3 i64.const 52 @@ -5214,7 +5217,7 @@ br_if $~lib/util/math/exp2_lut|inlined.0 drop f64.const 1 - local.get $0 + local.get $2 f64.add local.get $1 i32.const 2047 @@ -5245,10 +5248,10 @@ select local.set $1 end - local.get $0 + local.get $2 f64.const 52776558133248 f64.add - local.tee $2 + local.tee $0 i64.reinterpret_f64 local.tee $5 i64.const 127 @@ -5267,8 +5270,8 @@ i64.shl i64.add local.set $3 - local.get $0 local.get $2 + local.get $0 f64.const 52776558133248 f64.sub f64.sub @@ -5840,6 +5843,7 @@ (local $9 f64) (local $10 f64) (local $11 f64) + i32.const 1 local.get $0 i64.reinterpret_f64 local.tee $2 @@ -5847,15 +5851,12 @@ i64.shr_u i32.wrap_i64 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 1048576 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $2 i64.const 1 @@ -6056,18 +6057,16 @@ (local $4 f32) (local $5 i32) (local $6 f32) + i32.const 1 local.get $0 i32.reinterpret_f32 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 8388608 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $1 i32.const 1 @@ -6247,6 +6246,7 @@ (local $8 i32) (local $9 f64) (local $10 f64) + i32.const 1 local.get $0 i64.reinterpret_f64 local.tee $2 @@ -6254,15 +6254,12 @@ i64.shr_u i32.wrap_i64 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 1048576 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $2 i64.const 1 @@ -6455,18 +6452,16 @@ (local $3 f32) (local $4 f32) (local $5 i32) + i32.const 1 local.get $0 i32.reinterpret_f32 local.tee $1 + i32.const 31 + i32.shr_u + local.get $1 i32.const 8388608 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 31 - i32.shr_u - end + select if local.get $1 i32.const 1 @@ -6665,41 +6660,40 @@ (local $6 i64) (local $7 i64) (local $8 i64) - local.get $0 + local.get $1 i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.set $4 - local.get $1 + local.set $5 + local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 + i64.const 63 + i64.shr_u + local.set $7 + i32.const 1 + local.get $1 + local.get $1 + f64.ne + i32.const 1 + local.get $2 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.set $5 + local.tee $4 + i64.const 2047 + i64.eq local.get $3 i64.const 1 i64.shl local.tee $6 i64.eqz - if (result i32) - i32.const 1 - else - local.get $4 - i64.const 2047 - i64.eq - end - if (result i32) - i32.const 1 - else - local.get $1 - local.get $1 - f64.ne - end + select + select if local.get $0 local.get $1 @@ -6709,10 +6703,6 @@ f64.div return end - local.get $2 - i64.const 63 - i64.shr_u - local.set $7 block $folding-inner0 local.get $2 i64.const 1 @@ -6886,40 +6876,39 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 + local.get $1 i32.reinterpret_f32 - local.tee $2 + local.tee $3 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $4 - local.get $1 + local.set $5 + local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 + i32.const -2147483648 + i32.and + local.set $7 + i32.const 1 + local.get $1 + local.get $1 + f32.ne + local.get $2 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $5 + local.tee $4 + i32.const 255 + i32.eq + i32.const 1 local.get $3 i32.const 1 i32.shl local.tee $6 - if (result i32) - local.get $4 - i32.const 255 - i32.eq - else - i32.const 1 - end - if (result i32) - i32.const 1 - else - local.get $1 - local.get $1 - f32.ne - end + select + select if local.get $0 local.get $1 @@ -6929,10 +6918,6 @@ f32.div return end - local.get $2 - i32.const -2147483648 - i32.and - local.set $7 block $folding-inner0 local.get $2 i32.const 1 @@ -7284,11 +7269,11 @@ i32.const 1072693248 i32.ge_s if - f64.const 0 local.get $1 + f64.const 0 local.get $8 i32.const 0 - i32.lt_s + i32.ge_s select return else @@ -8131,18 +8116,16 @@ i32.const 2147483647 i32.and local.set $6 + local.get $1 + f32.nearest + local.get $1 + f32.eq + i32.const 0 local.get $4 i32.const 31 i32.shr_u local.tee $4 - if (result i32) - local.get $1 - f32.nearest - local.get $1 - f32.eq - else - i32.const 0 - end + select if i32.const 0 local.set $4 @@ -8494,8 +8477,8 @@ (local $4 i64) (local $5 i64) (local $6 i32) - (local $7 f64) - (local $8 i32) + (local $7 i32) + (local $8 f64) local.get $1 i64.reinterpret_f64 local.tee $4 @@ -8504,14 +8487,19 @@ i64.const 2047 i64.and local.set $5 + local.get $0 + i64.reinterpret_f64 + local.tee $2 + i64.const 63 + i64.shr_u + i32.wrap_i64 + local.set $7 i32.const 1 local.get $1 local.get $1 f64.ne i32.const 1 - local.get $0 - i64.reinterpret_f64 - local.tee $2 + local.get $2 i64.const 52 i64.shr_u i64.const 2047 @@ -8542,11 +8530,6 @@ local.get $0 return end - local.get $2 - i64.const 63 - i64.shr_u - i32.wrap_i64 - local.set $8 local.get $3 i64.eqz if (result i64) @@ -8675,6 +8658,12 @@ local.set $2 end end + i32.const 1 + i32.const 1 + local.get $6 + i32.const 1 + i32.and + i32.const 0 local.get $2 i64.const 4503599627370496 i64.sub @@ -8697,24 +8686,13 @@ local.tee $0 local.get $0 f64.add - local.set $7 - local.get $0 + local.tee $8 local.get $1 f64.abs local.tee $1 - f64.sub - local.get $0 - i32.const 1 - i32.const 1 - local.get $6 - i32.const 1 - i32.and - i32.const 0 - local.get $7 - local.get $1 f64.eq select - local.get $7 + local.get $8 local.get $1 f64.gt select @@ -8729,12 +8707,16 @@ local.get $5 i64.eq select - select - local.set $0 + if + local.get $0 + local.get $1 + f64.sub + local.set $0 + end local.get $0 f64.neg local.get $0 - local.get $8 + local.get $7 select ) (func $std/math/test_rem (param $0 f64) (param $1 f64) (param $2 f64) (result i32) @@ -8748,20 +8730,12 @@ (func $~lib/math/NativeMathf.rem (param $0 f32) (param $1 f32) (result f32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 f32) + (local $4 f32) + (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) - local.get $0 - i32.reinterpret_f32 - local.tee $2 - i32.const 23 - i32.shr_u - i32.const 255 - i32.and - local.set $9 local.get $1 i32.reinterpret_f32 local.tee $6 @@ -8770,13 +8744,23 @@ i32.const 255 i32.and local.set $8 - local.get $2 - local.set $3 + local.get $0 + i32.reinterpret_f32 + local.tee $3 + i32.const 31 + i32.shr_u + local.set $5 i32.const 1 local.get $1 local.get $1 f32.ne - local.get $9 + local.get $3 + local.tee $2 + i32.const 23 + i32.shr_u + i32.const 255 + i32.and + local.tee $9 i32.const 255 i32.eq i32.const 1 @@ -8794,7 +8778,7 @@ f32.div return end - local.get $3 + local.get $2 i32.const 1 i32.shl i32.eqz @@ -8802,22 +8786,18 @@ local.get $0 return end - local.get $3 - i32.const 31 - i32.shr_u - local.set $4 local.get $9 if (result i32) - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 i32.or else - local.get $3 + local.get $2 i32.const 1 local.get $9 - local.get $3 + local.get $2 i32.const 9 i32.shl i32.clz @@ -8927,6 +8907,12 @@ local.set $9 end end + i32.const 1 + i32.const 1 + local.get $7 + i32.const 1 + i32.and + i32.const 0 local.get $2 i32.const 8388608 i32.sub @@ -8947,24 +8933,13 @@ local.tee $0 local.get $0 f32.add - local.set $5 - local.get $0 + local.tee $4 local.get $1 f32.abs local.tee $1 - f32.sub - local.get $0 - i32.const 1 - i32.const 1 - local.get $7 - i32.const 1 - i32.and - i32.const 0 - local.get $5 - local.get $1 f32.eq select - local.get $5 + local.get $4 local.get $1 f32.gt select @@ -8979,12 +8954,16 @@ local.get $9 i32.eq select - select - local.set $0 + if + local.get $0 + local.get $1 + f32.sub + local.set $0 + end local.get $0 f32.neg local.get $0 - local.get $4 + local.get $5 select ) (func $std/math/test_remf (param $0 f32) (param $1 f32) (param $2 f32) (result i32) @@ -9195,7 +9174,7 @@ end local.set $6 global.get $~lib/math/rempio2_y0 - local.set $3 + local.set $0 global.get $~lib/math/rempio2_y1 local.set $4 local.get $6 @@ -9204,10 +9183,10 @@ if (result f64) f64.const 1 f64.const 0.5 - local.get $3 - local.get $3 + local.get $0 + local.get $0 f64.mul - local.tee $0 + local.tee $3 f64.mul local.tee $1 f64.sub @@ -9217,28 +9196,28 @@ f64.sub local.get $1 f64.sub - local.get $0 - local.get $0 + local.get $3 + local.get $3 f64.const 0.0416666666666666 - local.get $0 + local.get $3 f64.const -0.001388888888887411 - local.get $0 + local.get $3 f64.const 2.480158728947673e-05 f64.mul f64.add f64.mul f64.add f64.mul - local.get $0 - local.get $0 + local.get $3 + local.get $3 f64.mul local.tee $1 local.get $1 f64.mul f64.const -2.7557314351390663e-07 - local.get $0 + local.get $3 f64.const 2.087572321298175e-09 - local.get $0 + local.get $3 f64.const -1.1359647557788195e-11 f64.mul f64.add @@ -9247,47 +9226,55 @@ f64.mul f64.add f64.mul - local.get $3 + local.get $0 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 + local.get $0 + local.get $0 f64.mul - local.set $1 - local.get $3 + local.tee $3 local.get $0 - f64.const 0.5 - local.get $4 f64.mul - local.get $1 + local.tee $1 + f64.const -0.16666666666666632 + local.get $3 f64.const 0.00833333333332249 - local.get $0 + local.get $3 f64.const -1.984126982985795e-04 - local.get $0 + local.get $3 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $3 + local.get $3 + local.get $3 f64.mul f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $3 f64.const 1.58969099521155e-10 f64.mul f64.add f64.mul f64.add + local.tee $7 + f64.mul + f64.add + f64.mul + drop + local.get $0 + local.get $3 + f64.const 0.5 + local.get $4 + f64.mul + local.get $1 + local.get $7 f64.mul f64.sub f64.mul @@ -9299,8 +9286,7 @@ f64.sub f64.sub end - local.set $0 - local.get $0 + local.tee $0 f64.neg local.get $0 local.get $6 @@ -9583,8 +9569,7 @@ f64.add f32.demote_f64 end - local.set $0 - local.get $0 + local.tee $0 f32.neg local.get $0 local.get $1 @@ -10169,9 +10154,9 @@ end ) (func $~lib/math/NativeMathf.tan (param $0 f32) (result f32) - (local $1 f64) + (local $1 i32) (local $2 i32) - (local $3 i32) + (local $3 f64) (local $4 f64) (local $5 f64) (local $6 i64) @@ -10183,18 +10168,18 @@ (local $12 i64) local.get $0 i32.reinterpret_f32 - local.tee $2 + local.tee $1 i32.const 31 i32.shr_u local.set $11 - local.get $2 + local.get $1 i32.const 2147483647 i32.and - local.tee $3 + local.tee $2 i32.const 1061752794 i32.le_u if - local.get $3 + local.get $2 i32.const 964689920 i32.lt_u if @@ -10209,9 +10194,9 @@ local.tee $4 local.get $5 f64.mul - local.set $1 + local.set $3 local.get $5 - local.get $1 + local.get $3 f64.const 0.3333313950307914 local.get $4 f64.const 0.13339200271297674 @@ -10219,18 +10204,18 @@ f64.add f64.mul f64.add - local.get $1 + local.get $3 local.get $4 local.get $4 f64.mul - local.tee $1 + local.tee $3 f64.mul f64.const 0.05338123784456704 local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $3 f64.const 0.002974357433599673 local.get $4 f64.const 0.009465647849436732 @@ -10243,7 +10228,7 @@ f32.demote_f64 return end - local.get $3 + local.get $2 i32.const 2139095040 i32.ge_u if @@ -10253,7 +10238,7 @@ return end block $~lib/math/rempio2f|inlined.2 (result i32) - local.get $3 + local.get $2 i32.const 1305022427 i32.lt_u if @@ -10264,25 +10249,25 @@ f64.const 0.6366197723675814 f64.mul f64.nearest - local.tee $1 + local.tee $3 f64.const 1.5707963109016418 f64.mul f64.sub - local.get $1 + local.get $3 f64.const 1.5893254773528196e-08 f64.mul f64.sub global.set $~lib/math/rempio2f_y - local.get $1 + local.get $3 i32.trunc_f64_s br $~lib/math/rempio2f|inlined.2 end - local.get $3 + local.get $2 i32.const 23 i32.shr_s i32.const 152 i32.sub - local.tee $2 + local.tee $1 i32.const 6 i32.shr_s i32.const 3 @@ -10295,7 +10280,7 @@ local.get $10 i64.load offset=8 local.set $8 - local.get $2 + local.get $1 i32.const 63 i32.and i64.extend_i32_s @@ -10327,7 +10312,7 @@ local.get $0 f64.promote_f32 f64.copysign - local.get $3 + local.get $2 i32.const 8388607 i32.and i32.const 8388608 @@ -10366,13 +10351,13 @@ i64.shr_u i64.add i32.wrap_i64 - local.tee $2 + local.tee $1 i32.sub - local.get $2 + local.get $1 local.get $11 select end - local.set $2 + local.set $1 global.get $~lib/math/rempio2f_y local.tee $5 local.get $5 @@ -10380,9 +10365,10 @@ local.tee $4 local.get $5 f64.mul - local.set $1 + local.set $3 + f64.const -1 local.get $5 - local.get $1 + local.get $3 f64.const 0.3333313950307914 local.get $4 f64.const 0.13339200271297674 @@ -10390,18 +10376,18 @@ f64.add f64.mul f64.add - local.get $1 + local.get $3 local.get $4 local.get $4 f64.mul - local.tee $1 + local.tee $3 f64.mul f64.const 0.05338123784456704 local.get $4 f64.const 0.024528318116654728 f64.mul f64.add - local.get $1 + local.get $3 f64.const 0.002974357433599673 local.get $4 f64.const 0.009465647849436732 @@ -10411,12 +10397,10 @@ f64.add f64.mul f64.add - local.set $1 - f64.const -1 - local.get $1 + local.tee $3 f64.div + local.get $3 local.get $1 - local.get $2 i32.const 1 i32.and select @@ -10630,6 +10614,7 @@ (local $7 f64) (local $8 f64) (local $9 f64) + (local $10 f64) local.get $0 i64.reinterpret_f64 local.tee $3 @@ -10679,6 +10664,7 @@ local.get $2 local.get $2 f64.mul + local.tee $1 f64.mul f64.const -2.5050760253406863e-08 local.get $2 @@ -10694,16 +10680,13 @@ 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 + local.get $2 f64.mul local.tee $4 f64.sub - local.tee $1 + local.tee $7 f64.const 1 - local.get $1 + local.get $7 f64.sub local.get $4 f64.sub @@ -10719,11 +10702,8 @@ f64.mul f64.add f64.mul - local.get $2 - local.get $2 - f64.mul - local.tee $4 - local.get $4 + local.get $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 local.get $2 @@ -10885,33 +10865,34 @@ local.tee $4 local.get $4 f64.mul - local.tee $0 + local.tee $2 local.get $4 f64.mul - local.set $2 + local.set $0 local.get $4 - local.get $0 + local.get $2 f64.const 0.5 global.get $~lib/math/rempio2_y1 - local.tee $1 + local.tee $7 f64.mul - local.get $2 - f64.const 0.00833333333332249 local.get $0 + f64.const 0.00833333333332249 + local.get $2 f64.const -1.984126982985795e-04 - local.get $0 + local.get $2 f64.const 2.7557313707070068e-06 f64.mul f64.add f64.mul f64.add - local.get $0 - local.get $0 - local.get $0 + local.get $2 + local.get $2 + local.get $2 f64.mul + local.tee $1 f64.mul f64.const -2.5050760253406863e-08 - local.get $0 + local.get $2 f64.const 1.58969099521155e-10 f64.mul f64.add @@ -10920,9 +10901,9 @@ f64.mul f64.sub f64.mul - local.get $1 + local.get $7 f64.sub - local.get $2 + local.get $0 f64.const -0.16666666666666632 f64.mul f64.sub @@ -10931,18 +10912,15 @@ local.set $0 f64.const 1 f64.const 0.5 - local.get $4 - local.get $4 - f64.mul - local.tee $2 + local.get $2 f64.mul - local.tee $7 - f64.sub local.tee $9 + f64.sub + local.tee $10 f64.const 1 - local.get $9 + local.get $10 f64.sub - local.get $7 + local.get $9 f64.sub local.get $2 local.get $2 @@ -10956,11 +10934,8 @@ f64.mul f64.add f64.mul - local.get $2 - local.get $2 - f64.mul - local.tee $7 - local.get $7 + local.get $1 + local.get $1 f64.mul f64.const -2.7557314351390663e-07 local.get $2 @@ -10975,7 +10950,7 @@ f64.add f64.mul local.get $4 - local.get $1 + local.get $7 f64.mul f64.sub f64.add diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 1ab531e51f..2bc12c1b9c 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -21,41 +21,40 @@ (local $6 i64) (local $7 i64) (local $8 i64) - local.get $0 + local.get $1 i64.reinterpret_f64 - local.tee $2 + local.tee $3 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.set $4 - local.get $1 + local.set $5 + local.get $0 i64.reinterpret_f64 - local.tee $3 + local.tee $2 + i64.const 63 + i64.shr_u + local.set $7 + i32.const 1 + local.get $1 + local.get $1 + f64.ne + i32.const 1 + local.get $2 i64.const 52 i64.shr_u i64.const 2047 i64.and - local.set $5 + local.tee $4 + i64.const 2047 + i64.eq local.get $3 i64.const 1 i64.shl local.tee $6 i64.eqz - if (result i32) - i32.const 1 - else - local.get $4 - i64.const 2047 - i64.eq - end - if (result i32) - i32.const 1 - else - local.get $1 - local.get $1 - f64.ne - end + select + select if local.get $0 local.get $1 @@ -65,10 +64,6 @@ f64.div return end - local.get $2 - i64.const 63 - i64.shr_u - local.set $7 block $folding-inner0 local.get $2 i64.const 1 @@ -267,40 +262,39 @@ (local $6 i32) (local $7 i32) (local $8 i32) - local.get $0 + local.get $1 i32.reinterpret_f32 - local.tee $2 + local.tee $3 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $4 - local.get $1 + local.set $5 + local.get $0 i32.reinterpret_f32 - local.tee $3 + local.tee $2 + i32.const -2147483648 + i32.and + local.set $7 + i32.const 1 + local.get $1 + local.get $1 + f32.ne + local.get $2 i32.const 23 i32.shr_u i32.const 255 i32.and - local.set $5 + local.tee $4 + i32.const 255 + i32.eq + i32.const 1 local.get $3 i32.const 1 i32.shl local.tee $6 - if (result i32) - local.get $4 - i32.const 255 - i32.eq - else - i32.const 1 - end - if (result i32) - i32.const 1 - else - local.get $1 - local.get $1 - f32.ne - end + select + select if local.get $0 local.get $1 @@ -310,10 +304,6 @@ f32.div return end - local.get $2 - i32.const -2147483648 - i32.and - local.set $7 block $folding-inner0 local.get $2 i32.const 1 diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 85dee5ffbe..a3e5c8a21d 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -64,15 +64,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -347,15 +345,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -721,6 +717,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -737,11 +734,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -1409,34 +1406,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -1448,7 +1445,7 @@ i32.load8_s i32.store8 local.get $2 - local.get $5 + local.get $6 local.get $3 i32.load8_s call $~lib/util/hash/hash8 @@ -1468,59 +1465,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -2647,34 +2641,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -2686,7 +2680,7 @@ i32.load8_u i32.store8 local.get $2 - local.get $5 + local.get $6 local.get $3 i32.load8_u call $~lib/util/hash/hash8 @@ -2706,59 +2700,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -3464,34 +3455,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -3503,7 +3494,7 @@ i32.load16_s i32.store16 local.get $2 - local.get $5 + local.get $6 local.get $3 i32.load16_s call $~lib/util/hash/hash16 @@ -3523,59 +3514,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -4289,34 +4277,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -4328,7 +4316,7 @@ i32.load16_u i32.store16 local.get $2 - local.get $5 + local.get $6 local.get $3 i32.load16_u call $~lib/util/hash/hash16 @@ -4348,59 +4336,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -5122,34 +5107,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -5161,7 +5146,7 @@ i32.load i32.store local.get $2 - local.get $5 + local.get $6 local.get $3 i32.load call $~lib/util/hash/hash32 @@ -5181,59 +5166,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -6474,34 +6456,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=8 i32.const 1 @@ -6513,7 +6495,7 @@ i64.load i64.store local.get $2 - local.get $5 + local.get $6 local.get $3 i64.load call $~lib/util/hash/hash64 @@ -6533,59 +6515,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 16 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -7797,34 +7776,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 3 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=4 i32.const 1 @@ -7836,7 +7815,7 @@ f32.load f32.store local.get $2 - local.get $5 + local.get $6 local.get $3 f32.load i32.reinterpret_f32 @@ -7857,59 +7836,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 8 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -8627,34 +8603,34 @@ i32.const 2 i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 + local.set $6 local.get $4 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 $4 local.get $0 i32.load offset=8 - local.tee $6 + local.tee $5 local.get $0 i32.load offset=16 i32.const 4 i32.shl i32.add - local.set $7 + local.set $8 local.get $4 local.set $2 loop $while-continue|0 - local.get $6 - local.get $7 + local.get $5 + local.get $8 i32.ne if - local.get $6 + local.get $5 local.tee $3 i32.load offset=8 i32.const 1 @@ -8666,7 +8642,7 @@ f64.load f64.store local.get $2 - local.get $5 + local.get $6 local.get $3 f64.load i64.reinterpret_f64 @@ -8687,59 +8663,56 @@ i32.add local.set $2 end - local.get $6 + local.get $5 i32.const 16 i32.add - local.set $6 + local.set $5 br $while-continue|0 end end - local.get $5 - local.tee $2 - local.get $0 + local.get $6 local.tee $3 + local.get $0 i32.load - local.tee $6 + local.tee $2 i32.ne if - local.get $2 + local.get $3 call $~lib/rt/pure/__retain - local.set $2 - local.get $6 + local.set $3 + local.get $2 call $~lib/rt/pure/__release end + local.get $0 local.get $3 - local.get $2 i32.store - local.get $3 + local.get $0 local.get $1 i32.store offset=4 - local.get $3 - local.set $1 local.get $4 - local.tee $3 - local.get $1 + local.tee $1 + local.get $0 i32.load offset=8 - local.tee $2 + local.tee $3 i32.ne if - local.get $3 + local.get $1 call $~lib/rt/pure/__retain - local.set $3 - local.get $2 + local.set $1 + local.get $3 call $~lib/rt/pure/__release end + local.get $0 local.get $1 - local.get $3 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 + local.get $6 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index f5bd2d5b6b..7f77b4bb9f 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -98,15 +98,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -381,15 +379,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -731,6 +727,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -747,11 +744,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index fdcb5e7eeb..b6b4a4b087 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -390,15 +390,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -673,15 +671,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1047,6 +1043,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -1063,11 +1060,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -2369,23 +2366,24 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/string/String#get:length - local.tee $8 + local.tee $12 i32.eqz if local.get $0 call $~lib/rt/pure/__retain return end - local.get $8 + local.get $12 i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc local.set $10 loop $for-loop|0 local.get $4 - local.get $8 + local.get $12 i32.lt_u if local.get $0 @@ -2394,20 +2392,20 @@ i32.shl i32.add i32.load16_u - local.tee $2 + local.tee $3 local.set $1 - local.get $2 + local.get $3 i32.const 7 i32.shr_u if block $for-continue|0 local.get $4 - local.get $8 + local.get $12 i32.const 1 i32.sub i32.lt_u i32.const 0 - local.get $2 + local.get $3 i32.const 55295 i32.sub i32.const 1025 @@ -2420,7 +2418,7 @@ i32.shl i32.add i32.load16_u offset=2 - local.tee $5 + local.tee $7 i32.const 56319 i32.sub i32.const 1025 @@ -2430,10 +2428,10 @@ i32.const 1 i32.add local.set $4 - local.get $5 + local.get $7 i32.const 1023 i32.and - local.get $2 + local.get $3 local.tee $1 i32.const 1023 i32.and @@ -2442,67 +2440,67 @@ i32.or i32.const 65536 i32.add - local.tee $2 + local.tee $3 i32.const 131072 i32.ge_u if local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add local.get $1 - local.get $5 + local.get $7 i32.const 16 i32.shl i32.or i32.store - local.get $9 + local.get $11 i32.const 1 i32.add - local.set $9 + local.set $11 br $for-continue|0 end end end - local.get $2 + local.get $3 i32.const 304 i32.eq if local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add i32.const 50790505 i32.store - local.get $9 + local.get $11 i32.const 1 i32.add - local.set $9 + local.set $11 else - local.get $2 + local.get $3 i32.const 931 i32.eq if local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add - local.get $8 + local.get $12 i32.const 1 i32.gt_u if (result i32) block $~lib/util/string/isFinalSigma|inlined.0 (result i32) local.get $0 - local.set $5 + local.set $7 local.get $4 i32.const 0 - local.set $3 + local.set $2 i32.const 0 local.get $4 - local.tee $2 + local.tee $3 i32.const 30 i32.sub local.tee $1 @@ -2510,22 +2508,22 @@ local.get $1 i32.gt_s select - local.set $11 + local.set $8 loop $while-continue|1 - local.get $2 - local.get $11 + local.get $3 + 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 + local.get $3 + local.set $1 + i32.const -1 + local.set $6 + block $~lib/util/string/codePointBefore|inlined.0 + local.get $3 i32.const 0 i32.le_s br_if $~lib/util/string/codePointBefore|inlined.0 - drop - local.get $5 + local.get $7 local.get $1 i32.const 1 i32.sub @@ -2533,7 +2531,7 @@ i32.shl i32.add i32.load16_u - local.tee $7 + local.tee $9 i32.const 64512 i32.and i32.const 56320 @@ -2545,7 +2543,10 @@ i32.ge_s i32.and if - local.get $5 + local.get $9 + i32.const 1023 + i32.and + local.get $7 local.get $1 i32.const 2 i32.sub @@ -2554,42 +2555,38 @@ i32.add i32.load16_u local.tee $1 + i32.const 1023 + i32.and + i32.const 10 + i32.shl + i32.add + i32.const 65536 + i32.add + local.set $6 + local.get $1 i32.const 64512 i32.and i32.const 55296 i32.eq - if - local.get $7 - 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 + br_if $~lib/util/string/codePointBefore|inlined.0 end i32.const 65533 - local.get $7 - local.get $7 + local.get $9 + local.get $9 i32.const 63488 i32.and i32.const 55296 i32.eq select + local.set $6 end + local.get $6 local.tee $1 - local.set $7 - local.get $1 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $7 + local.get $1 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2611,43 +2608,43 @@ br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 - local.set $3 + local.set $2 end - local.get $2 + local.get $3 local.get $1 i32.const 65536 i32.ge_s i32.const 1 i32.add i32.sub - local.set $2 + local.set $3 br $while-continue|1 end end i32.const 0 - local.get $3 + local.get $2 i32.eqz br_if $~lib/util/string/isFinalSigma|inlined.0 drop i32.const 1 i32.add - local.tee $2 + local.tee $3 i32.const 30 i32.add local.tee $1 - local.get $8 + local.get $12 local.get $1 - local.get $8 + local.get $12 i32.lt_s select - local.set $6 + local.set $5 loop $while-continue|2 - local.get $2 - local.get $6 + local.get $3 + local.get $5 i32.lt_s if - local.get $5 - local.get $2 + local.get $7 + local.get $3 i32.const 1 i32.shl i32.add @@ -2657,20 +2654,20 @@ i32.and i32.const 55296 i32.eq - local.get $8 - local.get $2 + local.get $12 + local.get $3 i32.const 1 i32.add i32.ne i32.and if (result i32) - local.get $5 - local.get $2 + local.get $7 + local.get $3 i32.const 1 i32.shl i32.add i32.load16_u offset=2 - local.tee $7 + local.tee $6 i32.const 64512 i32.and i32.const 56320 @@ -2679,7 +2676,7 @@ local.get $1 i32.const 10 i32.shl - local.get $7 + local.get $6 i32.add i32.const -56613888 i32.add @@ -2689,24 +2686,24 @@ else local.get $1 end - local.tee $7 + local.tee $6 i32.const 918000 i32.lt_u if (result i32) i32.const 6658 - local.get $7 + local.get $6 call $~lib/util/string/stagedBinaryLookup else i32.const 0 end i32.eqz if - local.get $7 + local.get $6 i32.const 127370 i32.lt_u if (result i32) i32.const 9666 - local.get $7 + local.get $6 call $~lib/util/string/stagedBinaryLookup else i32.const 0 @@ -2714,14 +2711,14 @@ i32.eqz br $~lib/util/string/isFinalSigma|inlined.0 end - local.get $2 - local.get $7 + local.get $3 + local.get $6 i32.const 65536 i32.ge_u i32.const 1 i32.add i32.add - local.set $2 + local.set $3 br $while-continue|2 end end @@ -2737,53 +2734,53 @@ end i32.store16 else - local.get $2 + local.get $3 i32.const 9398 i32.sub i32.const 25 i32.le_u if local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add - local.get $2 + local.get $3 i32.const 26 i32.add i32.store16 else - local.get $2 + local.get $3 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.tee $2 + local.tee $3 i32.const 65536 i32.lt_s if local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add - local.get $2 + local.get $3 i32.store16 else local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add - local.get $2 + local.get $3 i32.const 65536 i32.sub - local.tee $2 + local.tee $3 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.get $2 + local.get $3 i32.const 1023 i32.and i32.const 56320 @@ -2792,10 +2789,10 @@ i32.shl i32.or i32.store - local.get $9 + local.get $11 i32.const 1 i32.add - local.set $9 + local.set $11 end end end @@ -2803,7 +2800,7 @@ end else local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl i32.add @@ -2824,15 +2821,15 @@ i32.const 1 i32.add local.set $4 - local.get $9 + local.get $11 i32.const 1 i32.add - local.set $9 + local.set $11 br $for-loop|0 end end local.get $10 - local.get $9 + local.get $11 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc @@ -2890,16 +2887,21 @@ ) (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 + local.tee $2 i32.ge_u if i32.const -1 return end + i32.const 1 + local.get $2 + local.get $1 + i32.const 1 + i32.add + i32.eq local.get $0 local.get $1 i32.const 1 @@ -2911,15 +2913,7 @@ i32.and i32.const 55296 i32.ne - if (result i32) - i32.const 1 - else - local.get $3 - local.get $1 - i32.const 1 - i32.add - i32.eq - end + select if local.get $2 return diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index ee00b07e74..47d0c5f5b2 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -131,15 +131,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -414,15 +412,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -788,6 +784,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -804,11 +801,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index fe725aad8e..16f5f05b5c 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -718,15 +718,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1001,15 +999,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1375,6 +1371,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -1391,11 +1388,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -2089,23 +2086,20 @@ i32.const 1 i32.shl local.set $5 + i32.const 1 local.get $2 call $~lib/string/String#get:length i32.const 1 i32.shl - local.set $3 + local.tee $4 + i32.eqz local.get $1 i32.const 1 i32.shl - local.tee $4 + local.tee $3 local.get $5 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $3 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2113,46 +2107,46 @@ call $~lib/rt/pure/__release return end - local.get $4 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc local.set $1 - local.get $4 + local.get $3 local.get $5 i32.sub - local.tee $4 - local.get $3 + local.tee $3 + local.get $4 i32.gt_u if local.get $1 local.get $2 - local.get $3 local.get $4 + local.get $3 i32.const 2 i32.sub - local.get $3 + local.get $4 i32.div_u local.tee $6 call $~lib/memory/memory.repeat local.get $1 - local.get $3 + local.get $4 local.get $6 i32.mul - local.tee $3 + local.tee $4 i32.add local.get $2 - local.get $4 local.get $3 + local.get $4 i32.sub call $~lib/memory/memory.copy else local.get $1 local.get $2 - local.get $4 + local.get $3 call $~lib/memory/memory.copy end local.get $1 - local.get $4 + local.get $3 i32.add local.get $0 local.get $5 @@ -2174,23 +2168,20 @@ i32.const 1 i32.shl local.set $3 + i32.const 1 local.get $2 call $~lib/string/String#get:length i32.const 1 i32.shl - local.set $4 + local.tee $4 + i32.eqz local.get $1 i32.const 1 i32.shl local.tee $5 local.get $3 i32.lt_u - if (result i32) - i32.const 1 - else - local.get $4 - i32.eqz - end + select if local.get $0 call $~lib/rt/pure/__retain @@ -2394,38 +2385,34 @@ i32.const 1 return end - block $break|0 - local.get $0 - i32.const 5760 - i32.eq - local.get $0 - i32.const 8232 - i32.eq - i32.or - local.get $0 - i32.const 8233 - i32.eq - local.get $0 - i32.const 8239 - i32.eq - i32.or - i32.or - local.get $0 - i32.const 8287 - i32.eq - local.get $0 - i32.const 12288 - i32.eq - i32.or - local.get $0 - i32.const 65279 - i32.eq - i32.or - i32.or - i32.eqz - if - br $break|0 - end + local.get $0 + i32.const 5760 + i32.eq + local.get $0 + i32.const 8232 + i32.eq + i32.or + local.get $0 + i32.const 8233 + i32.eq + local.get $0 + i32.const 8239 + i32.eq + i32.or + i32.or + local.get $0 + i32.const 8287 + i32.eq + local.get $0 + i32.const 12288 + i32.eq + i32.or + local.get $0 + i32.const 65279 + i32.eq + i32.or + i32.or + if i32.const 1 return end @@ -3449,35 +3436,34 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i32) + (local $6 i64) + (local $7 f64) + (local $8 i64) (local $9 i32) - (local $10 i64) + (local $10 f64) (local $11 i64) - (local $12 f64) - (local $13 i64) - (local $14 f64) + (local $12 i64) + (local $13 i32) + (local $14 i64) (local $15 i32) - (local $16 i64) block $folding-inner0 local.get $0 call $~lib/rt/pure/__retain - local.tee $5 + local.tee $3 call $~lib/string/String#get:length - local.tee $6 + local.tee $15 i32.eqz br_if $folding-inner0 - local.get $5 + local.get $3 local.tee $0 i32.load16_u - local.set $8 + local.set $13 f64.const 1 - local.set $14 + local.set $7 loop $while-continue|0 - local.get $6 + local.get $15 if (result i32) - local.get $8 + local.get $13 call $~lib/util/string/isSpace else i32.const 0 @@ -3488,43 +3474,43 @@ i32.add local.tee $0 i32.load16_u - local.set $8 - local.get $6 + local.set $13 + local.get $15 i32.const 1 i32.sub - local.set $6 + local.set $15 br $while-continue|0 end end - local.get $6 + local.get $15 i32.eqz br_if $folding-inner0 - local.get $8 + local.get $13 i32.const 45 i32.eq if (result i32) - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $folding-inner0 f64.const -1 - local.set $14 + local.set $7 local.get $0 i32.const 2 i32.add local.tee $0 i32.load16_u else - local.get $8 + local.get $13 i32.const 43 i32.eq if (result i32) - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $folding-inner0 local.get $0 @@ -3533,14 +3519,14 @@ local.tee $0 i32.load16_u else - local.get $8 + local.get $13 end end - local.tee $8 + local.tee $13 i32.const 73 i32.eq i32.const 0 - local.get $6 + local.get $15 i32.const 8 i32.ge_s select @@ -3558,30 +3544,30 @@ i32.const 0 end if - local.get $5 + local.get $3 call $~lib/rt/pure/__release f64.const inf - local.get $14 + local.get $7 f64.mul return end br $folding-inner0 end - local.get $8 + local.get $13 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 - local.get $8 + local.get $13 i32.const 46 i32.ne select br_if $folding-inner0 local.get $0 - local.set $1 + local.set $5 loop $while-continue|1 - local.get $8 + local.get $13 i32.const 48 i32.eq if @@ -3590,63 +3576,61 @@ i32.add local.tee $0 i32.load16_u - local.set $8 - local.get $6 + local.set $13 + local.get $15 i32.const 1 i32.sub - local.set $6 + local.set $15 br $while-continue|1 end end - local.get $6 + local.get $15 i32.const 0 i32.le_s if - local.get $5 + local.get $3 call $~lib/rt/pure/__release f64.const 0 return end - local.get $8 + local.get $13 i32.const 46 i32.eq if - local.get $1 + local.get $5 local.get $0 i32.sub i32.eqz - local.set $1 + local.set $5 local.get $0 i32.const 2 i32.add local.set $0 - local.get $6 + i32.const 0 + local.get $5 + local.get $15 i32.const 1 i32.sub - local.tee $6 - if (result i32) - i32.const 0 - else - local.get $1 - end + local.tee $15 + select br_if $folding-inner0 i32.const 1 - local.set $15 + local.set $9 loop $for-loop|2 local.get $0 i32.load16_u - local.tee $8 + local.tee $13 i32.const 48 i32.eq if - local.get $6 + local.get $15 i32.const 1 i32.sub - local.set $6 - local.get $3 + local.set $15 + local.get $1 i32.const 1 i32.sub - local.set $3 + local.set $1 local.get $0 i32.const 2 i32.add @@ -3654,59 +3638,59 @@ br $for-loop|2 end end - local.get $6 + local.get $15 i32.const 0 i32.le_s if - local.get $5 + local.get $3 call $~lib/rt/pure/__release f64.const 0 return end - local.get $8 + local.get $13 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 i32.const 0 + local.get $5 local.get $1 - local.get $3 select select br_if $folding-inner0 end - local.get $8 + local.get $13 i32.const 48 i32.sub - local.set $9 + local.set $5 loop $for-loop|3 i32.const 1 - local.get $15 + local.get $9 i32.eqz i32.const 0 - local.get $8 + local.get $13 i32.const 46 i32.eq select - local.get $9 + local.get $5 i32.const 10 i32.lt_u select if block $for-break3 - local.get $9 + local.get $5 i32.const 10 i32.lt_u if - local.get $9 + local.get $5 i64.extend_i32_u - local.get $7 + local.get $14 i64.const 10 i64.mul i64.add - local.get $7 - local.get $9 + local.get $14 + local.get $5 i32.eqz i32.eqz i64.extend_i32_u @@ -3715,21 +3699,21 @@ i32.const 19 i32.lt_s select - local.set $7 + local.set $14 local.get $2 i32.const 1 i32.add local.set $2 else local.get $2 - local.set $3 + local.set $1 i32.const 1 - local.set $15 + local.set $9 end - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $for-break3 local.get $0 @@ -3737,34 +3721,35 @@ i32.add local.tee $0 i32.load16_u - local.tee $8 + local.tee $13 i32.const 48 i32.sub - local.set $9 + local.set $5 br $for-loop|3 end end end - local.get $3 - local.get $2 - local.get $15 - select - i32.const 19 - local.get $2 - i32.const 19 - local.get $2 - i32.lt_s - select - i32.sub - local.set $1 - block $~lib/util/string/scientific|inlined.0 + block $~lib/util/string/scientific|inlined.0 (result f64) + local.get $1 + local.get $2 + local.get $9 + select + i32.const 19 + local.get $2 + i32.const 19 + local.get $2 + i32.lt_s + select + i32.sub + local.set $9 + f64.const 0 i32.const 1 block $~lib/util/string/parseExp|inlined.0 (result i32) i32.const 1 local.set $2 i32.const 0 local.get $0 - local.tee $3 + local.tee $1 i32.load16_u i32.const 32 i32.or @@ -3772,29 +3757,29 @@ i32.ne br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $3 + local.get $1 i32.const 2 i32.add - local.tee $9 + local.tee $5 i32.load16_u local.tee $0 i32.const 45 i32.eq if (result i32) i32.const 0 - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop i32.const -1 local.set $2 - local.get $9 + local.get $5 i32.const 2 i32.add - local.tee $9 + local.tee $5 i32.load16_u else local.get $0 @@ -3802,17 +3787,17 @@ i32.eq if (result i32) i32.const 0 - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $9 + local.get $5 i32.const 2 i32.add - local.tee $9 + local.tee $5 i32.load16_u else local.get $0 @@ -3825,17 +3810,17 @@ i32.eq if i32.const 0 - local.get $6 + local.get $15 i32.const 1 i32.sub - local.tee $6 + local.tee $15 i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $9 + local.get $5 i32.const 2 i32.add - local.tee $9 + local.tee $5 i32.load16_u local.set $0 br $while-continue|4 @@ -3850,7 +3835,7 @@ i32.const 10 i32.lt_u i32.const 0 - local.get $6 + local.get $15 select if local.get $2 @@ -3867,14 +3852,14 @@ i32.mul i32.add local.set $4 - local.get $6 + local.get $15 i32.const 1 i32.sub - local.set $6 - local.get $9 + local.set $15 + local.get $5 i32.const 2 i32.add - local.tee $9 + local.tee $5 i32.load16_u i32.const 48 i32.sub @@ -3886,29 +3871,29 @@ local.get $4 i32.mul end - local.get $1 + local.get $9 i32.add local.tee $0 i32.const -342 i32.lt_s - local.get $7 + local.get $14 i64.eqz select br_if $~lib/util/string/scientific|inlined.0 + drop + f64.const inf local.get $0 i32.const 308 i32.gt_s - if - f64.const inf - local.set $12 - br $~lib/util/string/scientific|inlined.0 - end - local.get $7 + br_if $~lib/util/string/scientific|inlined.0 + drop + local.get $14 f64.convert_i64_u - local.set $12 + local.tee $10 local.get $0 i32.eqz br_if $~lib/util/string/scientific|inlined.0 + drop local.get $0 i32.const 37 i32.le_s @@ -3918,7 +3903,7 @@ i32.gt_s select if - local.get $12 + local.get $10 local.get $0 i32.const 3 i32.shl @@ -3926,11 +3911,11 @@ i32.add f64.load f64.mul - local.set $12 + local.set $10 i32.const 22 local.set $0 end - local.get $7 + local.get $14 i64.const 9007199254740991 i64.le_u if (result i32) @@ -3952,7 +3937,7 @@ i32.const 0 i32.gt_s if - local.get $12 + local.get $10 local.get $0 i32.const 3 i32.shl @@ -3960,10 +3945,9 @@ i32.add f64.load f64.mul - local.set $12 br $~lib/util/string/scientific|inlined.0 end - local.get $12 + local.get $10 i32.const 0 local.get $0 i32.sub @@ -3978,31 +3962,31 @@ i32.const 0 i32.lt_s if (result f64) - local.get $7 - local.get $7 + local.get $14 + local.get $14 i64.clz - local.tee $10 + local.tee $12 i64.shl - local.set $7 + local.set $14 local.get $0 local.tee $2 i64.extend_i32_s - local.get $10 + local.get $12 i64.sub - local.set $10 + local.set $12 loop $for-loop|6 local.get $2 i32.const -14 i32.le_s if f64.const 0.00004294967296 - local.get $7 + local.get $14 i64.const 6103515625 i64.rem_u - local.get $7 + local.get $14 i64.const 6103515625 i64.div_u - local.tee $13 + local.tee $8 i64.clz local.tee $11 i64.const 18 @@ -4012,15 +3996,15 @@ f64.mul f64.nearest i64.trunc_f64_u - local.get $13 + local.get $8 local.get $11 i64.shl i64.add - local.set $7 - local.get $10 + local.set $14 + local.get $12 local.get $11 i64.sub - local.set $10 + local.set $12 local.get $2 i32.const 14 i32.add @@ -4028,19 +4012,19 @@ br $for-loop|6 end end - local.get $7 + local.get $14 i32.const 0 local.get $2 i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $13 + local.tee $8 i64.div_u - local.tee $16 + local.tee $6 i64.clz local.set $11 - local.get $7 - local.get $13 + local.get $14 + local.get $8 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 @@ -4049,28 +4033,28 @@ i64.shl i64.add f64.reinterpret_i64 - local.get $13 + local.get $8 f64.convert_i64_u f64.div i64.trunc_f64_u - local.get $16 + local.get $6 local.get $11 i64.shl i64.add f64.convert_i64_u - local.get $10 + local.get $12 local.get $11 i64.sub i32.wrap_i64 call $~lib/math/NativeMath.scalbn else - local.get $7 - local.get $7 + local.get $14 + local.get $14 i64.ctz - local.tee $10 + local.tee $12 i64.shr_u - local.set $7 - local.get $10 + local.set $14 + local.get $12 local.get $0 local.tee $4 i64.extend_i32_s @@ -4082,21 +4066,21 @@ i32.ge_s if i64.const 32 - local.get $7 + local.get $14 i64.const 32 i64.shr_u i64.const 1220703125 i64.mul - local.get $7 + local.get $14 i64.const 4294967295 i64.and i64.const 1220703125 i64.mul - local.tee $7 + local.tee $14 i64.const 32 i64.shr_u i64.add - local.tee $10 + local.tee $12 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4108,7 +4092,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $7 + local.get $14 local.get $0 i64.extend_i32_u i64.shl @@ -4116,18 +4100,18 @@ i64.shr_u i64.const 1 i64.and - local.get $10 + local.get $12 local.get $0 i64.extend_i32_u i64.shl - local.get $7 + local.get $14 i64.const 4294967295 i64.and local.get $11 i64.shr_u i64.or i64.add - local.set $7 + local.set $14 local.get $4 i32.const 13 i32.sub @@ -4139,23 +4123,23 @@ call $~lib/math/ipow32 local.tee $0 i64.extend_i32_u - local.get $7 + local.get $14 i64.const 4294967295 i64.and i64.mul - local.set $10 + local.set $12 i64.const 32 local.get $0 i64.extend_i32_u - local.get $7 + local.get $14 i64.const 32 i64.shr_u i64.mul - local.get $10 + local.get $12 i64.const 32 i64.shr_u i64.add - local.tee $7 + local.tee $14 i64.const 32 i64.shr_u i32.wrap_i64 @@ -4167,7 +4151,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $10 + local.get $12 local.get $0 i64.extend_i32_u i64.shl @@ -4175,11 +4159,11 @@ i64.shr_u i64.const 1 i64.and - local.get $7 + local.get $14 local.get $0 i64.extend_i32_u i64.shl - local.get $10 + local.get $12 i64.const 4294967295 i64.and local.get $11 @@ -4192,16 +4176,14 @@ call $~lib/math/NativeMath.scalbn end end - local.set $12 end - local.get $5 + local.get $3 call $~lib/rt/pure/__release - local.get $12 - local.get $14 + local.get $7 f64.copysign return end - local.get $5 + local.get $3 call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) @@ -4305,26 +4287,23 @@ (func $~lib/string/String.__gt (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 block $folding-inner0 - local.get $0 - call $~lib/rt/pure/__retain - local.tee $0 + i32.const 1 local.get $1 call $~lib/rt/pure/__retain local.tee $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 i32.eq - if (result i32) - i32.const 1 - else - local.get $0 - i32.eqz - end - if (result i32) - i32.const 1 - else - local.get $1 - i32.eqz - end + select + select br_if $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -4370,26 +4349,23 @@ (func $~lib/string/String.__lt (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 block $folding-inner0 - local.get $0 - call $~lib/rt/pure/__retain - local.tee $0 + i32.const 1 local.get $1 call $~lib/rt/pure/__retain local.tee $1 + i32.eqz + i32.const 1 + local.get $0 + i32.eqz + local.get $0 + local.get $1 i32.eq - if (result i32) - i32.const 1 - else - local.get $0 - i32.eqz - end - if (result i32) - i32.const 1 - else - local.get $1 - i32.eqz - end + select + select br_if $folding-inner0 local.get $1 call $~lib/string/String#get:length @@ -6630,41 +6606,41 @@ 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 $7 i64) (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 i64) local.get $3 local.get $1 i64.sub - local.set $9 + local.set $8 local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $10 + local.tee $11 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 - local.get $10 + local.get $11 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $9 loop $while-continue|0 - local.get $4 + local.get $9 i32.const 0 i32.gt_s if @@ -6679,116 +6655,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $9 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -6797,7 +6769,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -6808,14 +6780,14 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $9 local.get $7 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl i64.add @@ -6823,20 +6795,20 @@ local.get $5 i64.le_u if - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $9 i32.const 2 i32.shl i32.const 20280 i32.add i64.load32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl - local.set $3 + local.set $10 local.get $0 local.get $6 i32.const 1 @@ -6844,52 +6816,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $3 + local.get $10 i64.add - local.get $9 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 local.get $3 - i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $3 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $3 + local.get $10 i64.add local.set $1 br $while-continue|3 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 return @@ -6897,7 +6868,7 @@ br $while-continue|0 end end - local.get $10 + local.get $11 i64.extend_i32_s local.set $13 loop $while-continue|4 (result i32) @@ -6905,7 +6876,7 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 @@ -6935,26 +6906,26 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 + local.set $9 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 - local.get $9 + local.get $8 i32.const 0 - local.get $4 + local.get $9 i32.sub i32.const 2 i32.shl @@ -6962,7 +6933,7 @@ i32.add i64.load32_u i64.mul - local.set $3 + local.set $8 local.get $0 local.get $6 i32.const 1 @@ -6970,52 +6941,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 - local.get $3 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add - local.get $3 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 - local.get $11 - i64.add local.get $3 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $3 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 end @@ -7038,18 +7008,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -7270,15 +7238,15 @@ (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $9 if (result f64) local.get $0 i32.const 45 @@ -7289,60 +7257,60 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $8 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.tee $3 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i64.clz i32.wrap_i64 local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $8 i32.const 1 - local.get $6 + local.get $8 select i32.const 1075 i32.sub - local.tee $6 + local.tee $8 i32.const 1 i32.sub local.get $4 i32.sub local.set $4 - local.get $2 - local.get $2 + local.get $3 + local.get $3 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 + local.get $8 + local.get $10 i32.sub local.get $4 i32.sub @@ -7375,10 +7343,10 @@ local.tee $4 i32.const 3 i32.shl - local.tee $9 + local.tee $10 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $10 i32.const 19408 i32.add i64.load @@ -7391,52 +7359,40 @@ i32.load16_s global.set $~lib/util/number/_exp_pow global.get $~lib/util/number/_frc_pow - local.tee $3 + local.tee $6 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 + local.set $2 + local.get $6 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 + local.tee $6 + global.get $~lib/util/number/_frc_plus + local.tee $5 i64.const 32 i64.shr_u - local.tee $10 + local.tee $7 i64.mul - local.get $5 + local.get $2 local.get $7 i64.mul local.get $2 + local.get $5 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $10 - i64.mul local.get $5 + local.get $6 + i64.mul + local.get $7 i64.const 4294967295 i64.and i64.add @@ -7445,47 +7401,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + i64.const 1 + i64.sub + local.set $5 local.get $0 - i32.sub + local.get $9 + i32.const 1 + i32.shl 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 $0 + local.get $6 local.get $3 + local.get $3 + i64.clz + i32.wrap_i64 + local.tee $0 + i64.extend_i32_s + i64.shl + local.tee $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 + local.get $2 + local.get $7 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 + local.get $3 + local.get $6 i64.mul - local.get $5 + local.get $7 i64.const 4294967295 i64.and i64.add @@ -7494,36 +7451,36 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $8 + local.get $0 + i32.sub + i32.add + i32.const -64 + i32.sub + local.get $5 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub - local.get $2 + local.get $5 + local.get $6 global.get $~lib/util/number/_frc_minus - local.tee $2 + local.tee $3 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 $2 local.get $5 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and local.tee $2 - local.get $3 i64.mul i64.const 32 i64.shr_u @@ -7533,7 +7490,7 @@ i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul local.get $3 i64.const 4294967295 @@ -7547,13 +7504,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $9 call $~lib/util/number/genDigits - local.get $8 + local.get $9 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $9 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index b6c2bf59e8..35c2d5f686 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -1364,14 +1364,11 @@ block $case3|0 block $case2|0 block $case1|0 - local.get $0 - i32.const 1 - i32.ne - if + block $case0|0 local.get $0 - i32.const 2 + i32.const 1 i32.sub - br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 + br_table $case0|0 $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 $case6|0 $case7|0 $case8|0 $case9|0 $case10|0 $case11|0 end i32.const 1408 br $break|0 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index f0485d996f..3d7a75457b 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -363,15 +363,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -646,15 +644,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1020,6 +1016,7 @@ i32.shr_u local.set $1 else + i32.const 31 local.get $1 i32.const 1 i32.const 27 @@ -1036,11 +1033,11 @@ i32.lt_u select local.tee $1 - i32.const 31 - local.get $1 i32.clz i32.sub - local.tee $2 + local.set $2 + local.get $1 + local.get $2 i32.const 4 i32.sub i32.shr_u @@ -9451,6 +9448,10 @@ local.get $0 i32.reinterpret_f32 local.tee $1 + i32.const -2147483648 + i32.and + local.set $4 + local.get $1 i32.const 23 i32.shr_u i32.const 255 @@ -9467,10 +9468,6 @@ f32.div return end - local.get $1 - i32.const -2147483648 - i32.and - local.set $4 block $folding-inner0 local.get $1 i32.const 1 @@ -9673,6 +9670,10 @@ local.get $0 i64.reinterpret_f64 local.tee $1 + i64.const 63 + i64.shr_u + local.set $4 + local.get $1 i64.const 52 i64.shr_u i64.const 2047 @@ -9689,10 +9690,6 @@ 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 @@ -13056,18 +13053,16 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 i32.load offset=8 local.tee $3 - if (result i32) - local.get $2 - local.get $3 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -14486,6 +14481,7 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -14493,13 +14489,10 @@ 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 + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -15503,6 +15496,7 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -15510,13 +15504,10 @@ 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 + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -16511,6 +16502,7 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -16518,13 +16510,10 @@ 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 + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -17520,6 +17509,7 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -17527,13 +17517,10 @@ 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 + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -18108,6 +18095,7 @@ (local $3 i32) (local $4 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 + local.get $2 local.get $0 call $~lib/rt/pure/__retain local.tee $0 @@ -18115,13 +18103,10 @@ 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 + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $0 call $~lib/rt/pure/__release @@ -20632,41 +20617,41 @@ call $~lib/rt/pure/__release ) (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 $7 i64) (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 i64) local.get $3 local.get $1 i64.sub - local.set $9 + local.set $8 local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $10 + local.tee $11 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 - local.get $10 + local.get $11 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $9 loop $while-continue|0 - local.get $4 + local.get $9 i32.const 0 i32.gt_s if @@ -20681,116 +20666,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $9 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -20799,7 +20780,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -20810,14 +20791,14 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $9 local.get $7 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl i64.add @@ -20825,20 +20806,20 @@ local.get $5 i64.le_u if - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $9 i32.const 2 i32.shl i32.const 8248 i32.add i64.load32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl - local.set $3 + local.set $10 local.get $0 local.get $6 i32.const 1 @@ -20846,52 +20827,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $3 + local.get $10 i64.add - local.get $9 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 local.get $3 - i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $3 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $3 + local.get $10 i64.add local.set $1 br $while-continue|3 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 return @@ -20899,7 +20879,7 @@ br $while-continue|0 end end - local.get $10 + local.get $11 i64.extend_i32_s local.set $13 loop $while-continue|4 (result i32) @@ -20907,7 +20887,7 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 @@ -20937,26 +20917,26 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 + local.set $9 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 - local.get $9 + local.get $8 i32.const 0 - local.get $4 + local.get $9 i32.sub i32.const 2 i32.shl @@ -20964,7 +20944,7 @@ i32.add i64.load32_u i64.mul - local.set $3 + local.set $8 local.get $0 local.get $6 i32.const 1 @@ -20972,52 +20952,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 - local.get $3 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add - local.get $3 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 - local.get $11 - i64.add local.get $3 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $3 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 end @@ -21040,18 +21019,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -21272,15 +21249,15 @@ (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $9 if (result f64) local.get $0 i32.const 45 @@ -21291,60 +21268,60 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $8 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.tee $3 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i64.clz i32.wrap_i64 local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $8 i32.const 1 - local.get $6 + local.get $8 select i32.const 1075 i32.sub - local.tee $6 + local.tee $8 i32.const 1 i32.sub local.get $4 i32.sub local.set $4 - local.get $2 - local.get $2 + local.get $3 + local.get $3 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 + local.get $8 + local.get $10 i32.sub local.get $4 i32.sub @@ -21377,10 +21354,10 @@ local.tee $4 i32.const 3 i32.shl - local.tee $9 + local.tee $10 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $10 i32.const 7376 i32.add i64.load @@ -21393,52 +21370,40 @@ i32.load16_s global.set $~lib/util/number/_exp_pow global.get $~lib/util/number/_frc_pow - local.tee $3 + local.tee $6 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 + local.set $2 + local.get $6 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 + local.tee $6 + global.get $~lib/util/number/_frc_plus + local.tee $5 i64.const 32 i64.shr_u - local.tee $10 + local.tee $7 i64.mul - local.get $5 + local.get $2 local.get $7 i64.mul local.get $2 + local.get $5 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $10 - i64.mul local.get $5 + local.get $6 + i64.mul + local.get $7 i64.const 4294967295 i64.and i64.add @@ -21447,47 +21412,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + i64.const 1 + i64.sub + local.set $5 local.get $0 - i32.sub + local.get $9 + i32.const 1 + i32.shl 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 $0 + local.get $6 + local.get $3 local.get $3 + i64.clz + i32.wrap_i64 + local.tee $0 + i64.extend_i32_s + i64.shl + local.tee $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 + local.get $2 + local.get $7 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 + local.get $3 + local.get $6 i64.mul - local.get $5 + local.get $7 i64.const 4294967295 i64.and i64.add @@ -21496,36 +21462,36 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $8 + local.get $0 + i32.sub + i32.add + i32.const -64 + i32.sub + local.get $5 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub - local.get $2 + local.get $5 + local.get $6 global.get $~lib/util/number/_frc_minus - local.tee $2 + local.tee $3 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 $2 local.get $5 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and local.tee $2 - local.get $3 i64.mul i64.const 32 i64.shr_u @@ -21535,7 +21501,7 @@ i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul local.get $3 i64.const 4294967295 @@ -21549,13 +21515,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $9 call $~lib/util/number/genDigits - local.get $8 + local.get $9 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $9 i32.add ) (func $~lib/util/number/dtoa (param $0 f64) (result i32) @@ -35113,6 +35079,7 @@ i32.const 0 local.set $0 block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) + i32.const 0 local.get $2 call $~lib/rt/pure/__retain local.tee $1 @@ -35120,13 +35087,10 @@ i32.const 3 i32.shr_u local.tee $3 - if (result i32) - i32.const 0 - local.get $3 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $3 + select if local.get $1 call $~lib/rt/pure/__release @@ -35135,28 +35099,26 @@ end local.get $1 i32.load offset=4 - local.set $5 + local.set $4 loop $while-continue|0 local.get $0 local.get $3 i32.lt_s if - local.get $5 + i32.const 1 + local.get $4 local.get $0 i32.const 3 i32.shl i32.add f64.load local.tee $10 + local.get $10 + f64.ne + local.get $10 f64.const nan:0x8000000000000 f64.eq - if (result i32) - i32.const 1 - else - local.get $10 - local.get $10 - f64.ne - end + select if local.get $1 call $~lib/rt/pure/__release @@ -35209,6 +35171,7 @@ i32.const 0 local.set $0 block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) + i32.const 0 local.get $3 call $~lib/rt/pure/__retain local.tee $1 @@ -35216,13 +35179,10 @@ i32.const 2 i32.shr_u local.tee $4 - if (result i32) - i32.const 0 - local.get $4 - i32.ge_s - else - i32.const 1 - end + i32.ge_s + i32.const 1 + local.get $4 + select if local.get $1 call $~lib/rt/pure/__release @@ -35231,28 +35191,26 @@ end local.get $1 i32.load offset=4 - local.set $6 + local.set $5 loop $while-continue|014 local.get $0 local.get $4 i32.lt_s if - local.get $6 + i32.const 1 + local.get $5 local.get $0 i32.const 2 i32.shl i32.add f32.load local.tee $9 + local.get $9 + f32.ne + local.get $9 f32.const nan:0x400000 f32.eq - if (result i32) - i32.const 1 - else - local.get $9 - local.get $9 - f32.ne - end + select if local.get $1 call $~lib/rt/pure/__release diff --git a/tests/compiler/super-inline.optimized.wat b/tests/compiler/super-inline.optimized.wat index d310e637fb..3a7a9f164b 100644 --- a/tests/compiler/super-inline.optimized.wat +++ b/tests/compiler/super-inline.optimized.wat @@ -93,7 +93,7 @@ i32.sub i32.load i32.const 4 - i32.eq + i32.ne br_if $__inlined_func$super-inline/Foo#a@virtual end i32.const 4 diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 52c13126ca..2b9679f067 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -416,41 +416,41 @@ 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) - (local $7 i32) + (local $7 i64) (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 i64) local.get $3 local.get $1 i64.sub - local.set $9 + local.set $8 local.get $3 i64.const 1 i32.const 0 local.get $4 i32.sub - local.tee $10 + local.tee $11 i64.extend_i32_s i64.shl - local.tee $11 + local.tee $10 i64.const 1 i64.sub local.tee $12 i64.and - local.set $8 + local.set $7 local.get $3 - local.get $10 + local.get $11 i64.extend_i32_s i64.shr_u i32.wrap_i64 - local.tee $7 + local.tee $2 call $~lib/util/number/decimalCount32 - local.set $4 + local.set $9 loop $while-continue|0 - local.get $4 + local.get $9 i32.const 0 i32.gt_s if @@ -465,116 +465,112 @@ block $case3|1 block $case2|1 block $case1|1 - local.get $4 - local.tee $2 - i32.const 10 - i32.ne - if - local.get $2 + block $case0|1 + local.get $9 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 + br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $7 + local.get $2 i32.const 1000000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 1000 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 1000 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 100 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 100 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 + local.get $2 i32.const 10 i32.div_u - local.set $2 - local.get $7 + local.set $4 + local.get $2 i32.const 10 i32.rem_u - local.set $7 + local.set $2 br $break|1 end - local.get $7 - local.set $2 + local.get $2 + local.set $4 i32.const 0 - local.set $7 + local.set $2 br $break|1 end i32.const 0 - local.set $2 + local.set $4 end - local.get $2 + local.get $4 local.get $6 i32.or if @@ -583,7 +579,7 @@ i32.const 1 i32.shl i32.add - local.get $2 + local.get $4 i32.const 65535 i32.and i32.const 48 @@ -594,14 +590,14 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 - local.get $8 + local.set $9 local.get $7 + local.get $2 i64.extend_i32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl i64.add @@ -609,20 +605,20 @@ local.get $5 i64.le_u if - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $4 + local.get $9 i32.const 2 i32.shl i32.const 1936 i32.add i64.load32_u - local.get $10 + local.get $11 i64.extend_i32_s i64.shl - local.set $3 + local.set $10 local.get $0 local.get $6 i32.const 1 @@ -630,52 +626,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|3 i32.const 1 - local.get $9 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $3 + local.get $10 i64.add - local.get $9 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 local.get $3 - i64.add - local.get $9 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $3 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $9 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $3 + local.get $10 i64.add local.set $1 br $while-continue|3 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 return @@ -683,7 +678,7 @@ br $while-continue|0 end end - local.get $10 + local.get $11 i64.extend_i32_s local.set $13 loop $while-continue|4 (result i32) @@ -691,7 +686,7 @@ i64.const 10 i64.mul local.set $5 - local.get $8 + local.get $7 i64.const 10 i64.mul local.tee $3 @@ -721,26 +716,26 @@ i32.add local.set $6 end - local.get $4 + local.get $9 i32.const 1 i32.sub - local.set $4 + local.set $9 local.get $3 local.get $12 i64.and - local.tee $8 + local.tee $7 local.get $5 i64.ge_u br_if $while-continue|4 - local.get $4 + local.get $9 global.get $~lib/util/number/_K i32.add global.set $~lib/util/number/_K - local.get $8 + local.get $7 local.set $1 - local.get $9 + local.get $8 i32.const 0 - local.get $4 + local.get $9 i32.sub i32.const 2 i32.shl @@ -748,7 +743,7 @@ i32.add i64.load32_u i64.mul - local.set $3 + local.set $8 local.get $0 local.get $6 i32.const 1 @@ -756,52 +751,51 @@ i32.const 1 i32.shl i32.add - local.tee $2 + local.tee $0 i32.load16_u - local.set $4 + local.set $2 loop $while-continue|6 i32.const 1 - local.get $3 + local.get $8 local.get $1 i64.sub local.get $1 - local.get $11 + local.get $10 i64.add - local.get $3 + local.tee $3 + local.get $8 i64.sub i64.gt_u - local.get $1 - local.get $11 - i64.add local.get $3 + local.get $8 i64.lt_u select i32.const 0 local.get $5 local.get $1 i64.sub - local.get $11 + local.get $10 i64.ge_u i32.const 0 local.get $1 - local.get $3 + local.get $8 i64.lt_u select select if - local.get $4 + local.get $2 i32.const 1 i32.sub - local.set $4 + local.set $2 local.get $1 - local.get $11 + local.get $10 i64.add local.set $1 br $while-continue|6 end end + local.get $0 local.get $2 - local.get $4 i32.store16 local.get $6 end @@ -1024,18 +1018,16 @@ return end local.get $1 - local.get $1 local.get $2 i32.add local.tee $3 + i32.const 21 i32.le_s - if (result i32) - local.get $3 - i32.const 21 - i32.le_s - else - i32.const 0 - end + i32.const 0 + local.get $1 + local.get $3 + i32.le_s + select if (result i32) loop $for-loop|0 local.get $1 @@ -1256,15 +1248,15 @@ (local $3 i64) (local $4 i32) (local $5 i64) - (local $6 i32) + (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) local.get $1 f64.const 0 f64.lt - local.tee $8 + local.tee $9 if (result f64) local.get $0 i32.const 45 @@ -1275,60 +1267,60 @@ local.get $1 end i64.reinterpret_f64 - local.tee $3 + local.tee $2 i64.const 9218868437227405312 i64.and i64.const 52 i64.shr_u i32.wrap_i64 - local.tee $6 + local.tee $8 i32.const 0 i32.ne i64.extend_i32_u i64.const 52 i64.shl - local.get $3 + local.get $2 i64.const 4503599627370495 i64.and i64.add - local.tee $2 + local.tee $3 i64.const 1 i64.shl i64.const 1 i64.add - local.tee $3 - local.get $3 + local.tee $2 + local.get $2 i64.clz i32.wrap_i64 local.tee $4 i64.extend_i32_s i64.shl global.set $~lib/util/number/_frc_plus - local.get $6 + local.get $8 i32.const 1 - local.get $6 + local.get $8 select i32.const 1075 i32.sub - local.tee $6 + local.tee $8 i32.const 1 i32.sub local.get $4 i32.sub local.set $4 - local.get $2 - local.get $2 + local.get $3 + local.get $3 i64.const 4503599627370496 i64.eq i32.const 1 i32.add - local.tee $9 + local.tee $10 i64.extend_i32_s i64.shl i64.const 1 i64.sub - local.get $6 - local.get $9 + local.get $8 + local.get $10 i32.sub local.get $4 i32.sub @@ -1361,10 +1353,10 @@ local.tee $4 i32.const 3 i32.shl - local.tee $9 + local.tee $10 i32.sub global.set $~lib/util/number/_K - local.get $9 + local.get $10 i32.const 1064 i32.add i64.load @@ -1377,52 +1369,40 @@ i32.load16_s global.set $~lib/util/number/_exp_pow global.get $~lib/util/number/_frc_pow - local.tee $3 + local.tee $6 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 + local.set $2 + local.get $6 i64.const 32 i64.shr_u - local.tee $7 - local.get $3 + local.tee $6 + global.get $~lib/util/number/_frc_plus + local.tee $5 i64.const 32 i64.shr_u - local.tee $10 + local.tee $7 i64.mul - local.get $5 + local.get $2 local.get $7 i64.mul local.get $2 + local.get $5 i64.const 4294967295 i64.and - local.tee $2 - local.get $5 + local.tee $5 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $10 - i64.mul local.get $5 + local.get $6 + i64.mul + local.get $7 i64.const 4294967295 i64.and i64.add @@ -1431,47 +1411,48 @@ i64.const 32 i64.shr_u i64.add - global.get $~lib/util/number/_exp_pow - local.tee $4 - local.get $6 + i64.const 1 + i64.sub + local.set $5 local.get $0 - i32.sub + local.get $9 + i32.const 1 + i32.shl 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 $0 + local.get $6 + local.get $3 local.get $3 + i64.clz + i32.wrap_i64 + local.tee $0 + i64.extend_i32_s + i64.shl + local.tee $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 + local.get $2 + local.get $7 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and - local.tee $2 - local.get $10 + local.tee $3 i64.mul i64.const 32 i64.shr_u i64.add - local.tee $5 + local.tee $7 i64.const 32 i64.shr_u i64.add - local.get $2 - local.get $7 + local.get $3 + local.get $6 i64.mul - local.get $5 + local.get $7 i64.const 4294967295 i64.and i64.add @@ -1480,36 +1461,36 @@ i64.const 32 i64.shr_u i64.add - i64.const 1 - i64.sub - local.tee $2 + global.get $~lib/util/number/_exp_pow + local.tee $4 + local.get $8 + local.get $0 + i32.sub + i32.add + i32.const -64 + i32.sub + local.get $5 local.get $4 global.get $~lib/util/number/_exp i32.add i32.const -64 i32.sub - local.get $2 + local.get $5 + local.get $6 global.get $~lib/util/number/_frc_minus - local.tee $2 + local.tee $3 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 $2 local.get $5 i64.mul local.get $2 + local.get $3 i64.const 4294967295 i64.and local.tee $2 - local.get $3 i64.mul i64.const 32 i64.shr_u @@ -1519,7 +1500,7 @@ i64.shr_u i64.add local.get $2 - local.get $7 + local.get $6 i64.mul local.get $3 i64.const 4294967295 @@ -1533,13 +1514,13 @@ i64.const 1 i64.add i64.sub - local.get $8 + local.get $9 call $~lib/util/number/genDigits - local.get $8 + local.get $9 i32.sub global.get $~lib/util/number/_K call $~lib/util/number/prettify - local.get $8 + local.get $9 i32.add ) (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 9fdd91ce91..2d68ddf8bf 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -133,15 +133,13 @@ i32.const -4 i32.and local.tee $2 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $2 i32.const 16 i32.ge_u - if (result i32) - local.get $2 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -416,15 +414,13 @@ i32.const -4 i32.and local.tee $3 + i32.const 1073741808 + i32.lt_u + i32.const 0 + local.get $3 i32.const 16 i32.ge_u - if (result i32) - local.get $3 - i32.const 1073741808 - i32.lt_u - else - i32.const 0 - end + select i32.eqz if i32.const 0 @@ -1216,14 +1212,14 @@ global.set $while/ran i32.const 10 local.set $2 - loop $while-continue|04 + loop $while-continue|013 local.get $2 if local.get $2 i32.const 1 i32.sub local.set $2 - br $while-continue|04 + br $while-continue|013 end end local.get $2 @@ -1243,7 +1239,7 @@ local.set $0 i32.const 10 local.set $1 - loop $while-continue|03 + loop $while-continue|04 local.get $0 if loop $while-continue|1 @@ -1260,7 +1256,7 @@ i32.const 1 i32.sub local.set $0 - br $while-continue|03 + br $while-continue|04 end end local.get $0 @@ -1422,14 +1418,14 @@ global.set $while/ran i32.const 0 local.set $2 - loop $while-continue|067 + loop $while-continue|02 local.get $2 i32.const 1 i32.add local.tee $2 i32.const 1 i32.lt_s - br_if $while-continue|067 + br_if $while-continue|02 end i32.const 1 global.set $while/ran @@ -1437,14 +1433,14 @@ global.set $while/ran i32.const 0 local.set $2 - loop $while-continue|08 + loop $while-continue|03 local.get $2 i32.const 1 i32.add local.tee $2 i32.const 1 i32.lt_s - br_if $while-continue|08 + br_if $while-continue|03 end i32.const 1 global.set $while/ran