From 8e61e0ead8478f70a21c02ddf55c9f3e92bef790 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Sun, 9 Dec 2018 00:54:45 +0200 Subject: [PATCH] Improve reallocateUnsafe and properly free unmanaged objects (#368) --- std/assembly/internal/arraybuffer.ts | 20 +- tests/compiler/std/array.optimized.wat | 36 +- tests/compiler/std/array.untouched.wat | 286 ++++---- tests/compiler/std/gc-array.optimized.wat | 475 +++++++------- tests/compiler/std/gc-array.untouched.wat | 577 ++++++++--------- tests/compiler/std/static-array.optimized.wat | 477 +++++++------- tests/compiler/std/static-array.untouched.wat | 610 +++++++++--------- tests/compiler/std/string.optimized.wat | 31 +- tests/compiler/std/string.untouched.wat | 120 ++-- 9 files changed, 1278 insertions(+), 1354 deletions(-) diff --git a/std/assembly/internal/arraybuffer.ts b/std/assembly/internal/arraybuffer.ts index 8d863efa..faf8facd 100644 --- a/std/assembly/internal/arraybuffer.ts +++ b/std/assembly/internal/arraybuffer.ts @@ -40,11 +40,6 @@ export function reallocateUnsafe(buffer: ArrayBuffer, newByteLength: i32): Array assert(newByteLength <= MAX_BLENGTH); if (newByteLength <= (computeSize(oldByteLength) - HEADER_SIZE)) { // fast path: zero out additional space store(changetype(buffer), newByteLength, offsetof("byteLength")); - memory.fill( - changetype(buffer) + HEADER_SIZE + oldByteLength, - 0, - (newByteLength - oldByteLength) - ); } else { // slow path: copy to new buffer let newBuffer = allocateUnsafe(newByteLength); memory.copy( @@ -52,13 +47,16 @@ export function reallocateUnsafe(buffer: ArrayBuffer, newByteLength: i32): Array changetype(buffer) + HEADER_SIZE, oldByteLength ); - memory.fill( - changetype(newBuffer) + HEADER_SIZE + oldByteLength, - 0, - (newByteLength - oldByteLength) - ); - return newBuffer; + if (!isManaged()) { + memory.free(changetype(buffer)); + } + buffer = newBuffer; } + memory.fill( + changetype(buffer) + HEADER_SIZE + oldByteLength, + 0, + (newByteLength - oldByteLength) + ); } else if (newByteLength < oldByteLength) { // fast path: override size // TBD: worth to copy and release if size is significantly less than before? assert(newByteLength >= 0); diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index a1009a2f..ec2cbd2d 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -5,12 +5,12 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iv (func (param i32))) (type $iiv (func (param i32 i32))) (type $iiif (func (param i32 i32 i32) (result f32))) (type $F (func (result f64))) (type $Iv (func (param i64))) (type $ffi (func (param f32 f32) (result i32))) - (type $iv (func (param i32))) (type $FFi (func (param f64 f64) (result i32))) (type $Fi (func (param f64) (result i32))) (type $iiiiiv (func (param i32 i32 i32 i32 i32))) @@ -2229,7 +2229,6 @@ (func $~lib/internal/arraybuffer/reallocateUnsafe (; 14 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) get_local $1 get_local $0 i32.load @@ -2263,39 +2262,30 @@ get_local $0 get_local $1 i32.store - get_local $0 - i32.const 8 - i32.add - get_local $2 - i32.add - i32.const 0 - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe tee_local $3 i32.const 8 i32.add - tee_local $4 get_local $0 i32.const 8 i32.add get_local $2 call $~lib/internal/memory/memmove - get_local $2 - get_local $4 - i32.add - i32.const 0 - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset get_local $3 - return + set_local $0 end + get_local $0 + i32.const 8 + i32.add + get_local $2 + i32.add + i32.const 0 + get_local $1 + get_local $2 + i32.sub + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -2307,7 +2297,7 @@ if i32.const 0 i32.const 40 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 9bd1f4bd..01b662b2 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -5,6 +5,7 @@ (type $iiiv (func (param i32 i32 i32))) (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iv (func (param i32))) (type $iiv (func (param i32 i32))) (type $iiif (func (param i32 i32 i32) (result f32))) (type $iif (func (param i32 i32) (result f32))) @@ -12,7 +13,6 @@ (type $Iv (func (param i64))) (type $II (func (param i64) (result i64))) (type $ffi (func (param f32 f32) (result i32))) - (type $iv (func (param i32))) (type $fi (func (param f32) (result i32))) (type $FFi (func (param f64 f64) (result i32))) (type $iiF (func (param i32 i32) (result f64))) @@ -2752,12 +2752,14 @@ end end ) - (func $~lib/internal/arraybuffer/reallocateUnsafe (; 23 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/allocator/arena/__memory_free (; 23 ;) (type $iv) (param $0 i32) + nop + ) + (func $~lib/internal/arraybuffer/reallocateUnsafe (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) get_local $0 i32.load set_local $2 @@ -2787,57 +2789,50 @@ get_local $0 get_local $1 i32.store - get_local $0 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $5 - get_local $3 - get_local $4 - get_local $5 - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe - set_local $5 - get_local $5 + set_local $3 + get_local $3 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add set_local $4 get_local $0 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add - set_local $3 + set_local $5 get_local $4 - get_local $3 + get_local $5 get_local $2 call $~lib/internal/memory/memmove - get_local $5 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $6 + block $~lib/memory/memory.free|inlined.0 + block + get_local $0 + call $~lib/allocator/arena/__memory_free + br $~lib/memory/memory.free|inlined.0 + unreachable + end + unreachable + end get_local $3 - get_local $4 - get_local $6 - call $~lib/internal/memory/memset - get_local $5 - return + set_local $0 end + get_local $0 + get_global $~lib/internal/arraybuffer/HEADER_SIZE + i32.add + get_local $2 + i32.add + set_local $3 + i32.const 0 + set_local $5 + get_local $1 + get_local $2 + i32.sub + set_local $4 + get_local $3 + get_local $5 + get_local $4 + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -2850,7 +2845,7 @@ if i32.const 0 i32.const 40 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable @@ -2862,7 +2857,7 @@ end get_local $0 ) - (func $~lib/array/Array#push (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#push (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2924,7 +2919,7 @@ i32.store offset=8 get_local $5 ) - (func $~lib/array/Array#__get (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) get_local $0 @@ -2951,7 +2946,7 @@ unreachable end ) - (func $~lib/array/Array#pop (; 26 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#pop (; 27 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2997,7 +2992,7 @@ i32.store offset=4 get_local $5 ) - (func $~lib/array/Array#concat (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#concat (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3074,7 +3069,7 @@ end get_local $5 ) - (func $~lib/array/Array#copyWithin (; 28 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#copyWithin (; 29 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3287,7 +3282,7 @@ end get_local $0 ) - (func $~lib/array/Array#copyWithin|trampoline (; 29 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#copyWithin|trampoline (; 30 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -3307,7 +3302,7 @@ get_local $3 call $~lib/array/Array#copyWithin ) - (func $std/array/isArraysEqual (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) get_local $2 i32.eqz @@ -3366,7 +3361,7 @@ end i32.const 1 ) - (func $~lib/array/Array#unshift (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#unshift (; 32 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3457,7 +3452,7 @@ i32.store offset=4 get_local $5 ) - (func $~lib/array/Array#shift (; 32 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#shift (; 33 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3537,7 +3532,7 @@ i32.store offset=4 get_local $5 ) - (func $~lib/array/Array#reverse (; 33 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#reverse (; 34 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3630,7 +3625,7 @@ end get_local $0 ) - (func $~lib/array/Array#indexOf (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3708,7 +3703,7 @@ end i32.const -1 ) - (func $~lib/array/Array#splice (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#splice (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3824,7 +3819,7 @@ i32.store offset=4 get_local $7 ) - (func $~lib/array/Array#splice|trampoline (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#splice|trampoline (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -3843,7 +3838,7 @@ get_local $2 call $~lib/array/Array#splice ) - (func $~lib/array/Array#__set (; 37 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 38 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3899,12 +3894,12 @@ get_local $2 i32.store offset=8 ) - (func $start~anonymous|1 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|1 (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 0 i32.eq ) - (func $~lib/array/Array#findIndex (; 39 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#findIndex (; 40 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3972,17 +3967,17 @@ end i32.const -1 ) - (func $start~anonymous|2 (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|2 (; 41 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 1 i32.eq ) - (func $start~anonymous|3 (; 41 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|3 (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 100 i32.eq ) - (func $start~anonymous|4 (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|4 (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -3991,12 +3986,12 @@ i32.const 100 i32.eq ) - (func $start~anonymous|5 (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|5 (; 44 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 100 i32.eq ) - (func $start~anonymous|6 (; 44 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|6 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 call $~lib/array/Array#pop drop @@ -4004,12 +3999,12 @@ i32.const 100 i32.eq ) - (func $start~anonymous|7 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|7 (; 46 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 0 i32.ge_s ) - (func $~lib/array/Array#every (; 46 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#every (; 47 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4078,12 +4073,12 @@ end i32.const 1 ) - (func $start~anonymous|8 (; 47 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|8 (; 48 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 0 i32.le_s ) - (func $start~anonymous|9 (; 48 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|9 (; 49 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -4092,12 +4087,12 @@ i32.const 10 i32.lt_s ) - (func $start~anonymous|10 (; 49 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|10 (; 50 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 10 i32.lt_s ) - (func $start~anonymous|11 (; 50 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|11 (; 51 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 call $~lib/array/Array#pop drop @@ -4105,12 +4100,12 @@ i32.const 3 i32.lt_s ) - (func $start~anonymous|12 (; 51 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|12 (; 52 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 3 i32.ge_s ) - (func $~lib/array/Array#some (; 52 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#some (; 53 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4178,12 +4173,12 @@ end i32.const 0 ) - (func $start~anonymous|13 (; 53 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|13 (; 54 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const -1 i32.le_s ) - (func $start~anonymous|14 (; 54 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|14 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -4192,12 +4187,12 @@ i32.const 10 i32.gt_s ) - (func $start~anonymous|15 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|15 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 10 i32.gt_s ) - (func $start~anonymous|16 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|16 (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 call $~lib/array/Array#pop drop @@ -4205,13 +4200,13 @@ i32.const 3 i32.gt_s ) - (func $start~anonymous|17 (; 57 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start~anonymous|17 (; 58 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) get_global $std/array/i get_local $0 i32.add set_global $std/array/i ) - (func $~lib/array/Array#forEach (; 58 ;) (type $iiv) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#forEach (; 59 ;) (type $iiv) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4272,7 +4267,7 @@ unreachable end ) - (func $start~anonymous|18 (; 59 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start~anonymous|18 (; 60 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -4282,13 +4277,13 @@ i32.add set_global $std/array/i ) - (func $start~anonymous|19 (; 60 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start~anonymous|19 (; 61 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) get_global $std/array/i get_local $0 i32.add set_global $std/array/i ) - (func $start~anonymous|20 (; 61 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start~anonymous|20 (; 62 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) get_local $2 call $~lib/array/Array#pop drop @@ -4297,11 +4292,11 @@ i32.add set_global $std/array/i ) - (func $start~anonymous|21 (; 62 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) + (func $start~anonymous|21 (; 63 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) get_local $0 f32.convert_s/i32 ) - (func $~lib/array/Array#constructor (; 63 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 64 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4360,7 +4355,7 @@ call $~lib/internal/memory/memset get_local $0 ) - (func $~lib/array/Array#map (; 64 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 65 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4444,7 +4439,7 @@ end get_local $4 ) - (func $~lib/array/Array#__get (; 65 ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 66 ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local $3 i32) get_local $0 @@ -4471,7 +4466,7 @@ unreachable end ) - (func $start~anonymous|22 (; 66 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|22 (; 67 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -4482,7 +4477,7 @@ set_global $std/array/i get_local $0 ) - (func $~lib/array/Array#map (; 67 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 68 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4565,14 +4560,14 @@ end get_local $4 ) - (func $start~anonymous|23 (; 68 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|23 (; 69 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_global $std/array/i get_local $0 i32.add set_global $std/array/i get_local $0 ) - (func $start~anonymous|24 (; 69 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|24 (; 70 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 call $~lib/array/Array#pop drop @@ -4582,12 +4577,12 @@ set_global $std/array/i get_local $0 ) - (func $start~anonymous|25 (; 70 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|25 (; 71 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $0 i32.const 2 i32.ge_s ) - (func $~lib/array/Array#filter (; 71 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#filter (; 72 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4666,7 +4661,7 @@ end get_local $3 ) - (func $start~anonymous|26 (; 72 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|26 (; 73 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 i32.const 100 call $~lib/array/Array#push @@ -4679,7 +4674,7 @@ i32.const 2 i32.ge_s ) - (func $start~anonymous|27 (; 73 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|27 (; 74 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_global $std/array/i get_local $0 i32.add @@ -4688,7 +4683,7 @@ i32.const 2 i32.ge_s ) - (func $start~anonymous|28 (; 74 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|28 (; 75 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) get_local $2 call $~lib/array/Array#pop drop @@ -4700,12 +4695,12 @@ i32.const 2 i32.ge_s ) - (func $start~anonymous|29 (; 75 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|29 (; 76 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $~lib/array/Array#reduce (; 76 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 77 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4772,12 +4767,12 @@ end get_local $3 ) - (func $start~anonymous|30 (; 77 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|30 (; 78 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $start~anonymous|31 (; 78 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|31 (; 79 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 i32.const 0 i32.ne @@ -4789,7 +4784,7 @@ i32.gt_s end ) - (func $~lib/array/Array#reduce (; 79 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 80 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4856,7 +4851,7 @@ end get_local $3 ) - (func $start~anonymous|32 (; 80 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|32 (; 81 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 i32.const 0 i32.ne @@ -4868,7 +4863,7 @@ i32.gt_s end ) - (func $start~anonymous|33 (; 81 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|33 (; 82 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $3 i32.const 1 call $~lib/array/Array#push @@ -4877,12 +4872,12 @@ get_local $1 i32.add ) - (func $start~anonymous|34 (; 82 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|34 (; 83 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $start~anonymous|35 (; 83 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|35 (; 84 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $3 call $~lib/array/Array#pop drop @@ -4890,12 +4885,12 @@ get_local $1 i32.add ) - (func $start~anonymous|36 (; 84 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|36 (; 85 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $~lib/array/Array#reduceRight (; 85 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduceRight (; 86 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4950,12 +4945,12 @@ end get_local $3 ) - (func $start~anonymous|37 (; 86 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|37 (; 87 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $start~anonymous|38 (; 87 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|38 (; 88 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 i32.const 0 i32.ne @@ -4967,7 +4962,7 @@ i32.gt_s end ) - (func $~lib/array/Array#reduceRight (; 88 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduceRight (; 89 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5022,7 +5017,7 @@ end get_local $3 ) - (func $start~anonymous|39 (; 89 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|39 (; 90 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 i32.const 0 i32.ne @@ -5034,7 +5029,7 @@ i32.gt_s end ) - (func $start~anonymous|40 (; 90 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|40 (; 91 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $3 i32.const 1 call $~lib/array/Array#push @@ -5043,12 +5038,12 @@ get_local $1 i32.add ) - (func $start~anonymous|41 (; 91 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|41 (; 92 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $0 get_local $1 i32.add ) - (func $start~anonymous|42 (; 92 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|42 (; 93 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) get_local $3 call $~lib/array/Array#pop drop @@ -5056,7 +5051,7 @@ get_local $1 i32.add ) - (func $~lib/math/murmurHash3 (; 93 ;) (type $II) (param $0 i64) (result i64) + (func $~lib/math/murmurHash3 (; 94 ;) (type $II) (param $0 i64) (result i64) get_local $0 get_local $0 i64.const 33 @@ -5085,7 +5080,7 @@ set_local $0 get_local $0 ) - (func $~lib/math/splitMix32 (; 94 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/math/splitMix32 (; 95 ;) (type $ii) (param $0 i32) (result i32) get_local $0 i32.const 1831565813 i32.add @@ -5120,7 +5115,7 @@ i32.shr_u i32.xor ) - (func $~lib/math/NativeMath.seedRandom (; 95 ;) (type $Iv) (param $0 i64) + (func $~lib/math/NativeMath.seedRandom (; 96 ;) (type $Iv) (param $0 i64) get_local $0 i64.eqz if @@ -5149,7 +5144,7 @@ call $~lib/math/splitMix32 set_global $~lib/math/random_state1_32 ) - (func $~lib/internal/sort/insertionSort (; 96 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/sort/insertionSort (; 97 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) (local $5 f32) (local $6 i32) @@ -5261,9 +5256,6 @@ unreachable end ) - (func $~lib/allocator/arena/__memory_free (; 97 ;) (type $iv) (param $0 i32) - nop - ) (func $~lib/internal/sort/weakHeapSort (; 98 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) (local $5 i32) @@ -5619,11 +5611,11 @@ end unreachable end - block $~lib/memory/memory.free|inlined.0 + block $~lib/memory/memory.free|inlined.1 block get_local $5 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.0 + br $~lib/memory/memory.free|inlined.1 unreachable end unreachable @@ -6401,11 +6393,11 @@ end unreachable end - block $~lib/memory/memory.free|inlined.1 + block $~lib/memory/memory.free|inlined.2 block get_local $5 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.1 + br $~lib/memory/memory.free|inlined.2 unreachable end unreachable @@ -7210,11 +7202,11 @@ end unreachable end - block $~lib/memory/memory.free|inlined.2 + block $~lib/memory/memory.free|inlined.3 block get_local $5 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.2 + br $~lib/memory/memory.free|inlined.3 unreachable end unreachable @@ -7884,11 +7876,11 @@ end unreachable end - block $~lib/memory/memory.free|inlined.3 + block $~lib/memory/memory.free|inlined.4 block get_local $5 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.3 + br $~lib/memory/memory.free|inlined.4 unreachable end unreachable @@ -10637,11 +10629,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.4 + block $~lib/memory/memory.free|inlined.5 block get_local $10 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.4 + br $~lib/memory/memory.free|inlined.5 unreachable end unreachable @@ -11146,11 +11138,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.5 + block $~lib/memory/memory.free|inlined.6 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.5 + br $~lib/memory/memory.free|inlined.6 unreachable end unreachable @@ -11376,11 +11368,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.6 + block $~lib/memory/memory.free|inlined.7 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.6 + br $~lib/memory/memory.free|inlined.7 unreachable end unreachable @@ -12786,11 +12778,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.7 + block $~lib/memory/memory.free|inlined.8 block get_local $1 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.7 + br $~lib/memory/memory.free|inlined.8 unreachable end unreachable @@ -13047,11 +13039,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.8 + block $~lib/memory/memory.free|inlined.9 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.8 + br $~lib/memory/memory.free|inlined.9 unreachable end unreachable @@ -13508,11 +13500,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.9 + block $~lib/memory/memory.free|inlined.10 block get_local $9 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.9 + br $~lib/memory/memory.free|inlined.10 unreachable end unreachable @@ -13760,11 +13752,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.10 + block $~lib/memory/memory.free|inlined.11 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.10 + br $~lib/memory/memory.free|inlined.11 unreachable end unreachable @@ -13980,11 +13972,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.11 + block $~lib/memory/memory.free|inlined.12 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.11 + br $~lib/memory/memory.free|inlined.12 unreachable end unreachable @@ -14473,11 +14465,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.12 + block $~lib/memory/memory.free|inlined.13 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.12 + br $~lib/memory/memory.free|inlined.13 unreachable end unreachable @@ -14786,11 +14778,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.13 + block $~lib/memory/memory.free|inlined.14 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.13 + br $~lib/memory/memory.free|inlined.14 unreachable end unreachable @@ -15141,11 +15133,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.14 + block $~lib/memory/memory.free|inlined.15 block get_local $8 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.14 + br $~lib/memory/memory.free|inlined.15 unreachable end unreachable diff --git a/tests/compiler/std/gc-array.optimized.wat b/tests/compiler/std/gc-array.optimized.wat index c7311127..0b9e0745 100644 --- a/tests/compiler/std/gc-array.optimized.wat +++ b/tests/compiler/std/gc-array.optimized.wat @@ -410,226 +410,7 @@ i32.const 16 i32.add ) - (func $~lib/internal/memory/memset (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - get_local $1 - i32.eqz - if - return - end - get_local $0 - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - i32.const 1 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 2 - i32.le_u - if - return - end - get_local $0 - i32.const 1 - i32.add - i32.const 0 - i32.store8 - get_local $0 - i32.const 2 - i32.add - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 2 - i32.sub - i32.const 0 - i32.store8 - get_local $2 - i32.const 3 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 6 - i32.le_u - if - return - end - get_local $0 - i32.const 3 - i32.add - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - i32.const 4 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 8 - i32.le_u - if - return - end - i32.const 0 - get_local $0 - i32.sub - i32.const 3 - i32.and - tee_local $2 - get_local $0 - i32.add - tee_local $0 - i32.const 0 - i32.store - get_local $1 - get_local $2 - i32.sub - i32.const -4 - i32.and - tee_local $1 - get_local $0 - i32.add - i32.const 4 - i32.sub - i32.const 0 - i32.store - get_local $1 - i32.const 8 - i32.le_u - if - return - end - get_local $0 - i32.const 4 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 8 - i32.add - i32.const 0 - i32.store - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 12 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 8 - i32.sub - i32.const 0 - i32.store - get_local $1 - i32.const 24 - i32.le_u - if - return - end - get_local $0 - i32.const 12 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 16 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 20 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 24 - i32.add - i32.const 0 - i32.store - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 28 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 24 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 20 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 16 - i32.sub - i32.const 0 - i32.store - get_local $0 - i32.const 4 - i32.and - i32.const 24 - i32.add - tee_local $2 - get_local $0 - i32.add - set_local $0 - get_local $1 - get_local $2 - i32.sub - set_local $1 - loop $continue|0 - get_local $1 - i32.const 32 - i32.ge_u - if - get_local $0 - i64.const 0 - i64.store - get_local $0 - i32.const 8 - i32.add - i64.const 0 - i64.store - get_local $0 - i32.const 16 - i32.add - i64.const 0 - i64.store - get_local $0 - i32.const 24 - i32.add - i64.const 0 - i64.store - get_local $1 - i32.const 32 - i32.sub - set_local $1 - get_local $0 - i32.const 32 - i32.add - set_local $0 - br $continue|0 - end - end - ) - (func $~lib/internal/arraybuffer/allocateUnsafe (; 12 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/allocateUnsafe (; 11 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) get_local $0 i32.const 1073741816 @@ -657,7 +438,7 @@ i32.store get_local $1 ) - (func $~lib/internal/memory/memcpy (; 13 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memcpy (; 12 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1561,7 +1342,7 @@ i32.store8 end ) - (func $~lib/internal/memory/memmove (; 14 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 13 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) get_local $0 @@ -1761,10 +1542,228 @@ end end ) + (func $~lib/internal/memory/memset (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + get_local $1 + i32.eqz + if + return + end + get_local $0 + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 2 + i32.le_u + if + return + end + get_local $0 + i32.const 1 + i32.add + i32.const 0 + i32.store8 + get_local $0 + i32.const 2 + i32.add + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + get_local $2 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 6 + i32.le_u + if + return + end + get_local $0 + i32.const 3 + i32.add + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 8 + i32.le_u + if + return + end + i32.const 0 + get_local $0 + i32.sub + i32.const 3 + i32.and + tee_local $2 + get_local $0 + i32.add + tee_local $0 + i32.const 0 + i32.store + get_local $1 + get_local $2 + i32.sub + i32.const -4 + i32.and + tee_local $1 + get_local $0 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store + get_local $1 + i32.const 8 + i32.le_u + if + return + end + get_local $0 + i32.const 4 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 8 + i32.add + i32.const 0 + i32.store + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 12 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 8 + i32.sub + i32.const 0 + i32.store + get_local $1 + i32.const 24 + i32.le_u + if + return + end + get_local $0 + i32.const 12 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 16 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 20 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 24 + i32.add + i32.const 0 + i32.store + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 28 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 24 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 20 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 16 + i32.sub + i32.const 0 + i32.store + get_local $0 + i32.const 4 + i32.and + i32.const 24 + i32.add + tee_local $2 + get_local $0 + i32.add + set_local $0 + get_local $1 + get_local $2 + i32.sub + set_local $1 + loop $continue|0 + get_local $1 + i32.const 32 + i32.ge_u + if + get_local $0 + i64.const 0 + i64.store + get_local $0 + i32.const 8 + i32.add + i64.const 0 + i64.store + get_local $0 + i32.const 16 + i32.add + i64.const 0 + i64.store + get_local $0 + i32.const 24 + i32.add + i64.const 0 + i64.store + get_local $1 + i32.const 32 + i32.sub + set_local $1 + get_local $0 + i32.const 32 + i32.add + set_local $0 + br $continue|0 + end + end + ) (func $~lib/internal/arraybuffer/reallocateUnsafe (; 15 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) get_local $1 get_local $0 i32.load @@ -1798,37 +1797,29 @@ get_local $0 get_local $1 i32.store - get_local $0 - i32.const 8 - i32.add - get_local $2 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe tee_local $3 i32.const 8 i32.add - tee_local $4 get_local $0 i32.const 8 i32.add get_local $2 call $~lib/internal/memory/memmove - get_local $2 - get_local $4 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset get_local $3 - return + set_local $0 end + get_local $0 + i32.const 8 + i32.add + get_local $2 + i32.add + get_local $1 + get_local $2 + i32.sub + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -1840,7 +1831,7 @@ if i32.const 0 i32.const 120 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/gc-array.untouched.wat b/tests/compiler/std/gc-array.untouched.wat index 3aef990a..7815d350 100644 --- a/tests/compiler/std/gc-array.untouched.wat +++ b/tests/compiler/std/gc-array.untouched.wat @@ -558,264 +558,10 @@ i32.sub i32.shl ) - (func $~lib/internal/memory/memset (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i64) - get_local $2 - i32.eqz - if - return - end - get_local $0 - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 1 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 2 - i32.le_u - if - return - end - get_local $0 - i32.const 1 - i32.add - get_local $1 - i32.store8 - get_local $0 - i32.const 2 - i32.add - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 2 - i32.sub - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 3 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 6 - i32.le_u - if - return - end - get_local $0 - i32.const 3 - i32.add - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 4 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 8 - i32.le_u - if - return - end - i32.const 0 - get_local $0 - i32.sub - i32.const 3 - i32.and - set_local $3 - get_local $0 - get_local $3 - i32.add - set_local $0 - get_local $2 - get_local $3 - i32.sub - set_local $2 - get_local $2 - i32.const -4 - i32.and - set_local $2 - i32.const -1 - i32.const 255 - i32.div_u - get_local $1 - i32.const 255 - i32.and - i32.mul - set_local $4 - get_local $0 - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 4 - i32.sub - get_local $4 - i32.store - get_local $2 - i32.const 8 - i32.le_u - if - return - end - get_local $0 - i32.const 4 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 8 - i32.add - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 12 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 8 - i32.sub - get_local $4 - i32.store - get_local $2 - i32.const 24 - i32.le_u - if - return - end - get_local $0 - i32.const 12 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 16 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 20 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 24 - i32.add - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 28 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 24 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 20 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 16 - i32.sub - get_local $4 - i32.store - i32.const 24 - get_local $0 - i32.const 4 - i32.and - i32.add - set_local $3 - get_local $0 - get_local $3 - i32.add - set_local $0 - get_local $2 - get_local $3 - i32.sub - set_local $2 - get_local $4 - i64.extend_u/i32 - get_local $4 - i64.extend_u/i32 - i64.const 32 - i64.shl - i64.or - set_local $5 - block $break|0 - loop $continue|0 - get_local $2 - i32.const 32 - i32.ge_u - if - block - get_local $0 - get_local $5 - i64.store - get_local $0 - i32.const 8 - i32.add - get_local $5 - i64.store - get_local $0 - i32.const 16 - i32.add - get_local $5 - i64.store - get_local $0 - i32.const 24 - i32.add - get_local $5 - i64.store - get_local $2 - i32.const 32 - i32.sub - set_local $2 - get_local $0 - i32.const 32 - i32.add - set_local $0 - end - br $continue|0 - end - end - end - ) - (func $~lib/internal/arraybuffer/__gc (; 22 ;) (type $iv) (param $0 i32) + (func $~lib/internal/arraybuffer/__gc (; 21 ;) (type $iv) (param $0 i32) nop ) - (func $~lib/internal/arraybuffer/allocateUnsafe (; 23 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/allocateUnsafe (; 22 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) get_local $0 get_global $~lib/internal/arraybuffer/MAX_BLENGTH @@ -839,7 +585,7 @@ i32.store get_local $1 ) - (func $~lib/internal/memory/memcpy (; 24 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memcpy (; 23 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2040,7 +1786,7 @@ i32.store8 end ) - (func $~lib/internal/memory/memmove (; 25 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 24 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) get_local $0 get_local $1 @@ -2267,12 +2013,265 @@ end end ) + (func $~lib/internal/memory/memset (; 25 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + get_local $2 + i32.eqz + if + return + end + get_local $0 + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 1 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 2 + i32.le_u + if + return + end + get_local $0 + i32.const 1 + i32.add + get_local $1 + i32.store8 + get_local $0 + i32.const 2 + i32.add + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 2 + i32.sub + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 3 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 6 + i32.le_u + if + return + end + get_local $0 + i32.const 3 + i32.add + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 4 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 8 + i32.le_u + if + return + end + i32.const 0 + get_local $0 + i32.sub + i32.const 3 + i32.and + set_local $3 + get_local $0 + get_local $3 + i32.add + set_local $0 + get_local $2 + get_local $3 + i32.sub + set_local $2 + get_local $2 + i32.const -4 + i32.and + set_local $2 + i32.const -1 + i32.const 255 + i32.div_u + get_local $1 + i32.const 255 + i32.and + i32.mul + set_local $4 + get_local $0 + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 4 + i32.sub + get_local $4 + i32.store + get_local $2 + i32.const 8 + i32.le_u + if + return + end + get_local $0 + i32.const 4 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 8 + i32.add + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 12 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 8 + i32.sub + get_local $4 + i32.store + get_local $2 + i32.const 24 + i32.le_u + if + return + end + get_local $0 + i32.const 12 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 16 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 20 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 24 + i32.add + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 28 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 24 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 20 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 16 + i32.sub + get_local $4 + i32.store + i32.const 24 + get_local $0 + i32.const 4 + i32.and + i32.add + set_local $3 + get_local $0 + get_local $3 + i32.add + set_local $0 + get_local $2 + get_local $3 + i32.sub + set_local $2 + get_local $4 + i64.extend_u/i32 + get_local $4 + i64.extend_u/i32 + i64.const 32 + i64.shl + i64.or + set_local $5 + block $break|0 + loop $continue|0 + get_local $2 + i32.const 32 + i32.ge_u + if + block + get_local $0 + get_local $5 + i64.store + get_local $0 + i32.const 8 + i32.add + get_local $5 + i64.store + get_local $0 + i32.const 16 + i32.add + get_local $5 + i64.store + get_local $0 + i32.const 24 + i32.add + get_local $5 + i64.store + get_local $2 + i32.const 32 + i32.sub + set_local $2 + get_local $0 + i32.const 32 + i32.add + set_local $0 + end + br $continue|0 + end + end + end + ) (func $~lib/internal/arraybuffer/reallocateUnsafe (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) get_local $0 i32.load set_local $2 @@ -2302,57 +2301,41 @@ get_local $0 get_local $1 i32.store - get_local $0 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $5 - get_local $3 - get_local $4 - get_local $5 - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe - set_local $5 - get_local $5 + set_local $3 + get_local $3 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add set_local $4 get_local $0 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add - set_local $3 + set_local $5 get_local $4 - get_local $3 + get_local $5 get_local $2 call $~lib/internal/memory/memmove - get_local $5 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $6 get_local $3 - get_local $4 - get_local $6 - call $~lib/internal/memory/memset - get_local $5 - return + set_local $0 end + get_local $0 + get_global $~lib/internal/arraybuffer/HEADER_SIZE + i32.add + get_local $2 + i32.add + set_local $3 + i32.const 0 + set_local $5 + get_local $1 + get_local $2 + i32.sub + set_local $4 + get_local $3 + get_local $5 + get_local $4 + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -2365,7 +2348,7 @@ if i32.const 0 i32.const 120 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 84440621..88751829 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -28,226 +28,7 @@ (export "memory" (memory $0)) (export "table" (table $0)) (start $start) - (func $~lib/internal/memory/memset (; 1 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - get_local $1 - i32.eqz - if - return - end - get_local $0 - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - i32.const 1 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 2 - i32.le_u - if - return - end - get_local $0 - i32.const 1 - i32.add - i32.const 0 - i32.store8 - get_local $0 - i32.const 2 - i32.add - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 2 - i32.sub - i32.const 0 - i32.store8 - get_local $2 - i32.const 3 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 6 - i32.le_u - if - return - end - get_local $0 - i32.const 3 - i32.add - i32.const 0 - i32.store8 - get_local $0 - get_local $1 - i32.add - i32.const 4 - i32.sub - i32.const 0 - i32.store8 - get_local $1 - i32.const 8 - i32.le_u - if - return - end - i32.const 0 - get_local $0 - i32.sub - i32.const 3 - i32.and - tee_local $2 - get_local $0 - i32.add - tee_local $0 - i32.const 0 - i32.store - get_local $1 - get_local $2 - i32.sub - i32.const -4 - i32.and - tee_local $1 - get_local $0 - i32.add - i32.const 4 - i32.sub - i32.const 0 - i32.store - get_local $1 - i32.const 8 - i32.le_u - if - return - end - get_local $0 - i32.const 4 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 8 - i32.add - i32.const 0 - i32.store - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 12 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 8 - i32.sub - i32.const 0 - i32.store - get_local $1 - i32.const 24 - i32.le_u - if - return - end - get_local $0 - i32.const 12 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 16 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 20 - i32.add - i32.const 0 - i32.store - get_local $0 - i32.const 24 - i32.add - i32.const 0 - i32.store - get_local $0 - get_local $1 - i32.add - tee_local $2 - i32.const 28 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 24 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 20 - i32.sub - i32.const 0 - i32.store - get_local $2 - i32.const 16 - i32.sub - i32.const 0 - i32.store - get_local $0 - i32.const 4 - i32.and - i32.const 24 - i32.add - tee_local $2 - get_local $0 - i32.add - set_local $0 - get_local $1 - get_local $2 - i32.sub - set_local $1 - loop $continue|0 - get_local $1 - i32.const 32 - i32.ge_u - if - get_local $0 - i64.const 0 - i64.store - get_local $0 - i32.const 8 - i32.add - i64.const 0 - i64.store - get_local $0 - i32.const 16 - i32.add - i64.const 0 - i64.store - get_local $0 - i32.const 24 - i32.add - i64.const 0 - i64.store - get_local $1 - i32.const 32 - i32.sub - set_local $1 - get_local $0 - i32.const 32 - i32.add - set_local $0 - br $continue|0 - end - end - ) - (func $~lib/allocator/arena/__memory_allocate (; 2 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/allocator/arena/__memory_allocate (; 1 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -309,7 +90,7 @@ set_global $~lib/allocator/arena/offset get_local $1 ) - (func $~lib/internal/arraybuffer/allocateUnsafe (; 3 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/allocateUnsafe (; 2 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) get_local $0 i32.const 1073741816 @@ -336,7 +117,7 @@ i32.store get_local $1 ) - (func $~lib/internal/memory/memcpy (; 4 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memcpy (; 3 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1240,7 +1021,7 @@ i32.store8 end ) - (func $~lib/internal/memory/memmove (; 5 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 4 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) get_local $0 @@ -1440,10 +1221,228 @@ end end ) + (func $~lib/internal/memory/memset (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + get_local $1 + i32.eqz + if + return + end + get_local $0 + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 2 + i32.le_u + if + return + end + get_local $0 + i32.const 1 + i32.add + i32.const 0 + i32.store8 + get_local $0 + i32.const 2 + i32.add + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + get_local $2 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 6 + i32.le_u + if + return + end + get_local $0 + i32.const 3 + i32.add + i32.const 0 + i32.store8 + get_local $0 + get_local $1 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + get_local $1 + i32.const 8 + i32.le_u + if + return + end + i32.const 0 + get_local $0 + i32.sub + i32.const 3 + i32.and + tee_local $2 + get_local $0 + i32.add + tee_local $0 + i32.const 0 + i32.store + get_local $1 + get_local $2 + i32.sub + i32.const -4 + i32.and + tee_local $1 + get_local $0 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store + get_local $1 + i32.const 8 + i32.le_u + if + return + end + get_local $0 + i32.const 4 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 8 + i32.add + i32.const 0 + i32.store + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 12 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 8 + i32.sub + i32.const 0 + i32.store + get_local $1 + i32.const 24 + i32.le_u + if + return + end + get_local $0 + i32.const 12 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 16 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 20 + i32.add + i32.const 0 + i32.store + get_local $0 + i32.const 24 + i32.add + i32.const 0 + i32.store + get_local $0 + get_local $1 + i32.add + tee_local $2 + i32.const 28 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 24 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 20 + i32.sub + i32.const 0 + i32.store + get_local $2 + i32.const 16 + i32.sub + i32.const 0 + i32.store + get_local $0 + i32.const 4 + i32.and + i32.const 24 + i32.add + tee_local $2 + get_local $0 + i32.add + set_local $0 + get_local $1 + get_local $2 + i32.sub + set_local $1 + loop $continue|0 + get_local $1 + i32.const 32 + i32.ge_u + if + get_local $0 + i64.const 0 + i64.store + get_local $0 + i32.const 8 + i32.add + i64.const 0 + i64.store + get_local $0 + i32.const 16 + i32.add + i64.const 0 + i64.store + get_local $0 + i32.const 24 + i32.add + i64.const 0 + i64.store + get_local $1 + i32.const 32 + i32.sub + set_local $1 + get_local $0 + i32.const 32 + i32.add + set_local $0 + br $continue|0 + end + end + ) (func $~lib/internal/arraybuffer/reallocateUnsafe (; 6 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) get_local $1 get_local $0 i32.load @@ -1477,37 +1476,29 @@ get_local $0 get_local $1 i32.store - get_local $0 - i32.const 8 - i32.add - get_local $2 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe tee_local $3 i32.const 8 i32.add - tee_local $4 get_local $0 i32.const 8 i32.add get_local $2 call $~lib/internal/memory/memmove - get_local $2 - get_local $4 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset get_local $3 - return + set_local $0 end + get_local $0 + i32.const 8 + i32.add + get_local $2 + i32.add + get_local $1 + get_local $2 + i32.sub + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -1519,7 +1510,7 @@ if i32.const 0 i32.const 216 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat index a9109ea7..2c9d95be 100644 --- a/tests/compiler/std/static-array.untouched.wat +++ b/tests/compiler/std/static-array.untouched.wat @@ -3,6 +3,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $ii (func (param i32) (result i32))) + (type $iv (func (param i32))) (type $iiI (func (param i32 i32) (result i64))) (type $iiIv (func (param i32 i32 i64))) (type $iif (func (param i32 i32) (result f32))) @@ -80,261 +81,7 @@ i32.sub i32.shl ) - (func $~lib/internal/memory/memset (; 3 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i64) - get_local $2 - i32.eqz - if - return - end - get_local $0 - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 1 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 2 - i32.le_u - if - return - end - get_local $0 - i32.const 1 - i32.add - get_local $1 - i32.store8 - get_local $0 - i32.const 2 - i32.add - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 2 - i32.sub - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 3 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 6 - i32.le_u - if - return - end - get_local $0 - i32.const 3 - i32.add - get_local $1 - i32.store8 - get_local $0 - get_local $2 - i32.add - i32.const 4 - i32.sub - get_local $1 - i32.store8 - get_local $2 - i32.const 8 - i32.le_u - if - return - end - i32.const 0 - get_local $0 - i32.sub - i32.const 3 - i32.and - set_local $3 - get_local $0 - get_local $3 - i32.add - set_local $0 - get_local $2 - get_local $3 - i32.sub - set_local $2 - get_local $2 - i32.const -4 - i32.and - set_local $2 - i32.const -1 - i32.const 255 - i32.div_u - get_local $1 - i32.const 255 - i32.and - i32.mul - set_local $4 - get_local $0 - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 4 - i32.sub - get_local $4 - i32.store - get_local $2 - i32.const 8 - i32.le_u - if - return - end - get_local $0 - i32.const 4 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 8 - i32.add - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 12 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 8 - i32.sub - get_local $4 - i32.store - get_local $2 - i32.const 24 - i32.le_u - if - return - end - get_local $0 - i32.const 12 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 16 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 20 - i32.add - get_local $4 - i32.store - get_local $0 - i32.const 24 - i32.add - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 28 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 24 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 20 - i32.sub - get_local $4 - i32.store - get_local $0 - get_local $2 - i32.add - i32.const 16 - i32.sub - get_local $4 - i32.store - i32.const 24 - get_local $0 - i32.const 4 - i32.and - i32.add - set_local $3 - get_local $0 - get_local $3 - i32.add - set_local $0 - get_local $2 - get_local $3 - i32.sub - set_local $2 - get_local $4 - i64.extend_u/i32 - get_local $4 - i64.extend_u/i32 - i64.const 32 - i64.shl - i64.or - set_local $5 - block $break|0 - loop $continue|0 - get_local $2 - i32.const 32 - i32.ge_u - if - block - get_local $0 - get_local $5 - i64.store - get_local $0 - i32.const 8 - i32.add - get_local $5 - i64.store - get_local $0 - i32.const 16 - i32.add - get_local $5 - i64.store - get_local $0 - i32.const 24 - i32.add - get_local $5 - i64.store - get_local $2 - i32.const 32 - i32.sub - set_local $2 - get_local $0 - i32.const 32 - i32.add - set_local $0 - end - br $continue|0 - end - end - end - ) - (func $~lib/allocator/arena/__memory_allocate (; 4 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/allocator/arena/__memory_allocate (; 3 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -413,7 +160,7 @@ set_global $~lib/allocator/arena/offset get_local $1 ) - (func $~lib/internal/arraybuffer/allocateUnsafe (; 5 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/allocateUnsafe (; 4 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) get_local $0 @@ -442,7 +189,7 @@ i32.store get_local $1 ) - (func $~lib/internal/memory/memcpy (; 6 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memcpy (; 5 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1643,7 +1390,7 @@ i32.store8 end ) - (func $~lib/internal/memory/memmove (; 7 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 6 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) get_local $0 get_local $1 @@ -1870,12 +1617,268 @@ end end ) - (func $~lib/internal/arraybuffer/reallocateUnsafe (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/allocator/arena/__memory_free (; 7 ;) (type $iv) (param $0 i32) + nop + ) + (func $~lib/internal/memory/memset (; 8 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + get_local $2 + i32.eqz + if + return + end + get_local $0 + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 1 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 2 + i32.le_u + if + return + end + get_local $0 + i32.const 1 + i32.add + get_local $1 + i32.store8 + get_local $0 + i32.const 2 + i32.add + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 2 + i32.sub + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 3 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 6 + i32.le_u + if + return + end + get_local $0 + i32.const 3 + i32.add + get_local $1 + i32.store8 + get_local $0 + get_local $2 + i32.add + i32.const 4 + i32.sub + get_local $1 + i32.store8 + get_local $2 + i32.const 8 + i32.le_u + if + return + end + i32.const 0 + get_local $0 + i32.sub + i32.const 3 + i32.and + set_local $3 + get_local $0 + get_local $3 + i32.add + set_local $0 + get_local $2 + get_local $3 + i32.sub + set_local $2 + get_local $2 + i32.const -4 + i32.and + set_local $2 + i32.const -1 + i32.const 255 + i32.div_u + get_local $1 + i32.const 255 + i32.and + i32.mul + set_local $4 + get_local $0 + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 4 + i32.sub + get_local $4 + i32.store + get_local $2 + i32.const 8 + i32.le_u + if + return + end + get_local $0 + i32.const 4 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 8 + i32.add + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 12 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 8 + i32.sub + get_local $4 + i32.store + get_local $2 + i32.const 24 + i32.le_u + if + return + end + get_local $0 + i32.const 12 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 16 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 20 + i32.add + get_local $4 + i32.store + get_local $0 + i32.const 24 + i32.add + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 28 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 24 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 20 + i32.sub + get_local $4 + i32.store + get_local $0 + get_local $2 + i32.add + i32.const 16 + i32.sub + get_local $4 + i32.store + i32.const 24 + get_local $0 + i32.const 4 + i32.and + i32.add + set_local $3 + get_local $0 + get_local $3 + i32.add + set_local $0 + get_local $2 + get_local $3 + i32.sub + set_local $2 + get_local $4 + i64.extend_u/i32 + get_local $4 + i64.extend_u/i32 + i64.const 32 + i64.shl + i64.or + set_local $5 + block $break|0 + loop $continue|0 + get_local $2 + i32.const 32 + i32.ge_u + if + block + get_local $0 + get_local $5 + i64.store + get_local $0 + i32.const 8 + i32.add + get_local $5 + i64.store + get_local $0 + i32.const 16 + i32.add + get_local $5 + i64.store + get_local $0 + i32.const 24 + i32.add + get_local $5 + i64.store + get_local $2 + i32.const 32 + i32.sub + set_local $2 + get_local $0 + i32.const 32 + i32.add + set_local $0 + end + br $continue|0 + end + end + end + ) + (func $~lib/internal/arraybuffer/reallocateUnsafe (; 9 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) get_local $0 i32.load set_local $2 @@ -1905,57 +1908,50 @@ get_local $0 get_local $1 i32.store - get_local $0 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $5 - get_local $3 - get_local $4 - get_local $5 - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe - set_local $5 - get_local $5 + set_local $3 + get_local $3 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add set_local $4 get_local $0 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add - set_local $3 + set_local $5 get_local $4 - get_local $3 + get_local $5 get_local $2 call $~lib/internal/memory/memmove - get_local $5 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $6 + block $~lib/memory/memory.free|inlined.0 + block + get_local $0 + call $~lib/allocator/arena/__memory_free + br $~lib/memory/memory.free|inlined.0 + unreachable + end + unreachable + end get_local $3 - get_local $4 - get_local $6 - call $~lib/internal/memory/memset - get_local $5 - return + set_local $0 end + get_local $0 + get_global $~lib/internal/arraybuffer/HEADER_SIZE + i32.add + get_local $2 + i32.add + set_local $3 + i32.const 0 + set_local $5 + get_local $1 + get_local $2 + i32.sub + set_local $4 + get_local $3 + get_local $5 + get_local $4 + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -1968,7 +1964,7 @@ if i32.const 0 i32.const 216 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable @@ -1980,7 +1976,7 @@ end get_local $0 ) - (func $~lib/array/Array#__set (; 9 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 10 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2036,7 +2032,7 @@ get_local $2 i32.store offset=8 ) - (func $~lib/array/Array#__get (; 10 ;) (type $iiI) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__get (; 11 ;) (type $iiI) (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local $3 i32) get_local $0 @@ -2063,7 +2059,7 @@ unreachable end ) - (func $~lib/array/Array#__set (; 11 ;) (type $iiIv) (param $0 i32) (param $1 i32) (param $2 i64) + (func $~lib/array/Array#__set (; 12 ;) (type $iiIv) (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2119,7 +2115,7 @@ get_local $2 i64.store offset=8 ) - (func $~lib/array/Array#__get (; 12 ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 13 ;) (type $iif) (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local $3 i32) get_local $0 @@ -2146,7 +2142,7 @@ unreachable end ) - (func $~lib/array/Array#__set (; 13 ;) (type $iifv) (param $0 i32) (param $1 i32) (param $2 f32) + (func $~lib/array/Array#__set (; 14 ;) (type $iifv) (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2202,7 +2198,7 @@ get_local $2 f32.store offset=8 ) - (func $~lib/array/Array#__get (; 14 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 15 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local $3 i32) get_local $0 @@ -2229,7 +2225,7 @@ unreachable end ) - (func $~lib/array/Array#__set (; 15 ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/array/Array#__set (; 16 ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2285,7 +2281,7 @@ get_local $2 f64.store offset=8 ) - (func $start (; 16 ;) (type $v) + (func $start (; 17 ;) (type $v) (local $0 i32) get_global $HEAP_BASE get_global $~lib/internal/allocator/AL_MASK @@ -2550,6 +2546,6 @@ unreachable end ) - (func $null (; 17 ;) (type $v) + (func $null (; 18 ;) (type $v) ) ) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 1912fd6b..cf053274 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -3339,7 +3339,6 @@ (func $~lib/internal/arraybuffer/reallocateUnsafe (; 36 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) get_local $1 get_local $0 i32.load @@ -3373,37 +3372,29 @@ get_local $0 get_local $1 i32.store - get_local $0 - i32.const 8 - i32.add - get_local $2 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe tee_local $3 i32.const 8 i32.add - tee_local $4 get_local $0 i32.const 8 i32.add get_local $2 call $~lib/internal/memory/memmove - get_local $2 - get_local $4 - i32.add - get_local $1 - get_local $2 - i32.sub - call $~lib/internal/memory/memset get_local $3 - return + set_local $0 end + get_local $0 + i32.const 8 + i32.add + get_local $2 + i32.add + get_local $1 + get_local $2 + i32.sub + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -3415,7 +3406,7 @@ if i32.const 0 i32.const 1008 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index e3e7ef0c..842b2584 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -9,12 +9,12 @@ (type $i (func (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) + (type $iv (func (param i32))) (type $Ii (func (param i64) (result i32))) (type $iIiv (func (param i32 i64 i32))) (type $Fi (func (param f64) (result i32))) (type $iFi (func (param i32 f64) (result i32))) (type $iIiIiIii (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $iv (func (param i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) @@ -4169,12 +4169,14 @@ get_local $2 i32.store offset=8 ) - (func $~lib/internal/arraybuffer/reallocateUnsafe (; 40 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/allocator/arena/__memory_free (; 40 ;) (type $iv) (param $0 i32) + nop + ) + (func $~lib/internal/arraybuffer/reallocateUnsafe (; 41 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) get_local $0 i32.load set_local $2 @@ -4204,57 +4206,50 @@ get_local $0 get_local $1 i32.store - get_local $0 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $5 - get_local $3 - get_local $4 - get_local $5 - call $~lib/internal/memory/memset else get_local $1 call $~lib/internal/arraybuffer/allocateUnsafe - set_local $5 - get_local $5 + set_local $3 + get_local $3 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add set_local $4 get_local $0 get_global $~lib/internal/arraybuffer/HEADER_SIZE i32.add - set_local $3 + set_local $5 get_local $4 - get_local $3 + get_local $5 get_local $2 call $~lib/internal/memory/memmove - get_local $5 - get_global $~lib/internal/arraybuffer/HEADER_SIZE - i32.add - get_local $2 - i32.add - set_local $3 - i32.const 0 - set_local $4 - get_local $1 - get_local $2 - i32.sub - set_local $6 + block $~lib/memory/memory.free|inlined.0 + block + get_local $0 + call $~lib/allocator/arena/__memory_free + br $~lib/memory/memory.free|inlined.0 + unreachable + end + unreachable + end get_local $3 - get_local $4 - get_local $6 - call $~lib/internal/memory/memset - get_local $5 - return + set_local $0 end + get_local $0 + get_global $~lib/internal/arraybuffer/HEADER_SIZE + i32.add + get_local $2 + i32.add + set_local $3 + i32.const 0 + set_local $5 + get_local $1 + get_local $2 + i32.sub + set_local $4 + get_local $3 + get_local $5 + get_local $4 + call $~lib/internal/memory/memset else get_local $1 get_local $2 @@ -4267,7 +4262,7 @@ if i32.const 0 i32.const 1008 - i32.const 64 + i32.const 62 i32.const 4 call $~lib/env/abort unreachable @@ -4279,7 +4274,7 @@ end get_local $0 ) - (func $~lib/array/Array#push (; 41 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#push (; 42 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4341,7 +4336,7 @@ i32.store offset=8 get_local $5 ) - (func $~lib/string/String#split (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4596,7 +4591,7 @@ end get_local $10 ) - (func $~lib/string/String#split|trampoline (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split|trampoline (; 44 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $2of2 block $1of2 block $0of2 @@ -4617,7 +4612,7 @@ get_local $2 call $~lib/string/String#split ) - (func $~lib/array/Array#__get (; 44 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 45 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) get_local $0 @@ -4644,7 +4639,7 @@ unreachable end ) - (func $~lib/internal/number/decimalCount32 (; 45 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/number/decimalCount32 (; 46 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) get_local $0 i32.const 100000 @@ -4713,7 +4708,7 @@ unreachable unreachable ) - (func $~lib/internal/number/utoa32_lut (; 46 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/number/utoa32_lut (; 47 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4883,7 +4878,7 @@ i32.store16 offset=4 end ) - (func $~lib/internal/number/itoa32 (; 47 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/number/itoa32 (; 48 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4924,7 +4919,7 @@ end get_local $3 ) - (func $~lib/internal/number/utoa32 (; 48 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/number/utoa32 (; 49 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) get_local $0 @@ -4945,7 +4940,7 @@ call $~lib/internal/number/utoa32_lut get_local $2 ) - (func $~lib/internal/number/decimalCount64 (; 49 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/number/decimalCount64 (; 50 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) get_local $0 i64.const 1000000000000000 @@ -5014,7 +5009,7 @@ unreachable unreachable ) - (func $~lib/internal/number/utoa64_lut (; 50 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/internal/number/utoa64_lut (; 51 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -5169,7 +5164,7 @@ get_local $2 call $~lib/internal/number/utoa32_lut ) - (func $~lib/internal/number/utoa64 (; 51 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/number/utoa64 (; 52 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5211,7 +5206,7 @@ end get_local $1 ) - (func $~lib/internal/number/itoa64 (; 52 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/number/itoa64 (; 53 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5275,19 +5270,19 @@ end get_local $2 ) - (func $~lib/builtins/isFinite (; 53 ;) (type $Fi) (param $0 f64) (result i32) + (func $~lib/builtins/isFinite (; 54 ;) (type $Fi) (param $0 f64) (result i32) get_local $0 get_local $0 f64.sub f64.const 0 f64.eq ) - (func $~lib/builtins/isNaN (; 54 ;) (type $Fi) (param $0 f64) (result i32) + (func $~lib/builtins/isNaN (; 55 ;) (type $Fi) (param $0 f64) (result i32) get_local $0 get_local $0 f64.ne ) - (func $~lib/internal/number/genDigits (; 55 ;) (type $iIiIiIii) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/internal/number/genDigits (; 56 ;) (type $iIiIiIii) (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) @@ -5843,7 +5838,7 @@ end get_local $15 ) - (func $~lib/internal/number/prettify (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/internal/number/prettify (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6187,7 +6182,7 @@ unreachable unreachable ) - (func $~lib/internal/number/dtoa_core (; 57 ;) (type $iFi) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/internal/number/dtoa_core (; 58 ;) (type $iFi) (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 i64) (local $4 i32) @@ -6626,7 +6621,7 @@ get_local $2 i32.add ) - (func $~lib/string/String#substring (; 58 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#substring (; 59 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6736,9 +6731,6 @@ call $~lib/internal/string/copyUnsafe get_local $10 ) - (func $~lib/allocator/arena/__memory_free (; 59 ;) (type $iv) (param $0 i32) - nop - ) (func $~lib/internal/number/dtoa (; 60 ;) (type $Fi) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) @@ -6790,11 +6782,11 @@ call $~lib/env/abort unreachable end - block $~lib/memory/memory.free|inlined.0 + block $~lib/memory/memory.free|inlined.1 block get_local $1 call $~lib/allocator/arena/__memory_free - br $~lib/memory/memory.free|inlined.0 + br $~lib/memory/memory.free|inlined.1 unreachable end unreachable