From a4e5857f7f22e06960227e37250fc360b7381705 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Sat, 15 Jun 2019 02:00:49 +0300 Subject: [PATCH] Fix missing clear to all zeros when constructing a new ArrayBufferView (#669) --- std/assembly/arraybuffer.ts | 1 + .../retain-release-sanity.optimized.wat | 1380 +++++++++-------- .../retain-release-sanity.untouched.wat | 564 +++---- tests/compiler/std/array.optimized.wat | 1219 +++++++-------- tests/compiler/std/array.untouched.wat | 578 +++---- tests/compiler/std/arraybuffer.optimized.wat | 256 ++- tests/compiler/std/arraybuffer.untouched.wat | 6 +- tests/compiler/std/dataview.optimized.wat | 147 +- tests/compiler/std/dataview.untouched.wat | 384 ++++- tests/compiler/std/map.optimized.wat | 2 +- tests/compiler/std/map.untouched.wat | 2 +- tests/compiler/std/set.optimized.wat | 2 +- tests/compiler/std/set.untouched.wat | 2 +- tests/compiler/std/symbol.optimized.wat | 2 +- tests/compiler/std/symbol.untouched.wat | 2 +- tests/compiler/std/typedarray.optimized.wat | 519 ++++--- tests/compiler/std/typedarray.untouched.wat | 620 ++++---- 17 files changed, 3096 insertions(+), 2590 deletions(-) diff --git a/std/assembly/arraybuffer.ts b/std/assembly/arraybuffer.ts index 9725098a..ea44f6c6 100644 --- a/std/assembly/arraybuffer.ts +++ b/std/assembly/arraybuffer.ts @@ -13,6 +13,7 @@ export abstract class ArrayBufferView { protected constructor(length: i32, alignLog2: i32) { if (length > BLOCK_MAXSIZE >>> alignLog2) throw new RangeError(E_INVALIDLENGTH); var buffer = __alloc(length = length << alignLog2, idof()); + memory.fill(buffer, 0, length); this.data = changetype(buffer); // retains this.dataStart = buffer; this.dataLength = length; diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 55e4754d..f1bcc470 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -1029,695 +1029,7 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.tee $1 - i32.const -268435456 - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.ne - if - i32.const 0 - i32.const 232 - i32.const 104 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $0 - call $~lib/rt/rtrace/onincrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 232 - i32.const 107 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 748 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $0 - ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 - i32.load - local.tee $2 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 128 - i32.const 531 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $2 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/rtrace/onfree - ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 680 - i32.load - i32.gt_u - if - i32.const 280 - i32.const 336 - i32.const 22 - i32.const 27 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3 - i32.shl - i32.const 684 - i32.add - i32.load - ) - (func $~lib/memory/memory.copy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - block $~lib/util/memory/memmove|inlined.0 - local.get $2 - local.set $3 - local.get $0 - local.get $1 - i32.eq - br_if $~lib/util/memory/memmove|inlined.0 - local.get $0 - local.get $1 - i32.lt_u - if - local.get $1 - i32.const 7 - i32.and - local.get $0 - i32.const 7 - i32.and - i32.eq - if - loop $continue|0 - local.get $0 - i32.const 7 - i32.and - if - local.get $3 - i32.eqz - br_if $~lib/util/memory/memmove|inlined.0 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - local.get $0 - local.tee $2 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.tee $4 - i32.const 1 - i32.add - local.set $1 - local.get $2 - local.get $4 - i32.load8_u - i32.store8 - br $continue|0 - end - end - loop $continue|1 - local.get $3 - i32.const 8 - i32.lt_u - i32.eqz - if - local.get $0 - local.get $1 - i64.load - i64.store - local.get $3 - i32.const 8 - i32.sub - local.set $3 - local.get $0 - i32.const 8 - i32.add - local.set $0 - local.get $1 - i32.const 8 - i32.add - local.set $1 - br $continue|1 - end - end - end - loop $continue|2 - local.get $3 - if - local.get $0 - local.tee $2 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.tee $4 - i32.const 1 - i32.add - local.set $1 - local.get $2 - local.get $4 - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - else - local.get $1 - i32.const 7 - i32.and - local.get $0 - i32.const 7 - i32.and - i32.eq - if - loop $continue|3 - local.get $0 - local.get $3 - i32.add - i32.const 7 - i32.and - if - local.get $3 - i32.eqz - br_if $~lib/util/memory/memmove|inlined.0 - local.get $0 - local.get $3 - i32.const 1 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i32.load8_u - i32.store8 - br $continue|3 - end - end - loop $continue|4 - local.get $3 - i32.const 8 - i32.lt_u - i32.eqz - if - local.get $0 - local.get $3 - i32.const 8 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i64.load - i64.store - br $continue|4 - end - end - end - loop $continue|5 - local.get $3 - if - local.get $0 - local.get $3 - i32.const 1 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i32.load8_u - i32.store8 - br $continue|5 - end - end - end - end - ) - (func $~lib/rt/tlsf/__free (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 561 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 15 - i32.and - i32.eqz - i32.const 0 - local.get $0 - select - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 562 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/pure/growRoots (; 21 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/pure/CUR - global.get $~lib/rt/pure/ROOTS - local.tee $1 - i32.sub - local.tee $2 - i32.const 1 - i32.shl - local.tee $0 - i32.const 256 - local.get $0 - i32.const 256 - i32.gt_u - select - local.tee $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.tee $0 - i32.const 16 - i32.sub - call $~lib/rt/rtrace/onfree - local.get $0 - local.get $1 - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/rtrace/onalloc - local.get $1 - call $~lib/rt/tlsf/__free - end - local.get $0 - global.set $~lib/rt/pure/ROOTS - local.get $0 - local.get $2 - i32.add - global.set $~lib/rt/pure/CUR - local.get $0 - local.get $3 - i32.add - global.set $~lib/rt/pure/END - ) - (func $~lib/rt/pure/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/pure/CUR - local.tee $1 - global.get $~lib/rt/pure/END - i32.ge_u - if - call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 4 - i32.add - global.set $~lib/rt/pure/CUR - ) - (func $~lib/rt/pure/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - i32.const 268435455 - i32.and - local.set $1 - local.get $0 - call $~lib/rt/rtrace/ondecrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 232 - i32.const 115 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.eq - if - local.get $0 - i32.const 16 - i32.add - i32.const 1 - call $~lib/rt/__visit_members - local.get $2 - i32.const -2147483648 - i32.and - if - local.get $0 - i32.const -2147483648 - i32.store offset=4 - else - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - end - else - local.get $1 - i32.const 0 - i32.le_u - if - i32.const 0 - i32.const 232 - i32.const 124 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/__typeinfo - i32.const 16 - i32.and - 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 - i32.sub - i32.const -1342177280 - i32.or - i32.store offset=4 - local.get $2 - i32.const -2147483648 - i32.and - i32.eqz - if - local.get $0 - call $~lib/rt/pure/appendRoot - end - end - end - ) - (func $~lib/rt/pure/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.const 748 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $1 - i32.const 268435452 - i32.gt_u - if - i32.const 24 - i32.const 72 - i32.const 14 - i32.const 56 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 2 - i32.shl - local.tee $2 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $1 - local.get $0 - i32.eqz - if - i32.const 12 - i32.const 2 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $1 - local.get $0 - i32.load - local.tee $3 - i32.ne - if - local.get $1 - call $~lib/rt/pure/__retain - drop - local.get $3 - call $~lib/rt/pure/__release - end - local.get $0 - local.get $1 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.get $2 - i32.store offset=8 - local.get $0 - ) - (func $~lib/rt/tlsf/reallocateBlock (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.tee $4 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 128 - i32.const 493 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - local.get $1 - i32.const 16 - i32.add - local.get $1 - i32.load - i32.const -4 - i32.and - i32.add - local.tee $6 - i32.load - local.tee $5 - i32.const 1 - i32.and - if - local.get $4 - i32.const -4 - i32.and - i32.const 16 - i32.add - local.get $5 - i32.const -4 - i32.and - i32.add - local.tee $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $3 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $3 - ) - (func $~lib/rt/tlsf/__realloc (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 553 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 15 - i32.and - i32.eqz - i32.const 0 - local.get $0 - select - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 554 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.fill (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $~lib/util/memory/memset|inlined.0 local.get $1 @@ -1926,6 +1238,696 @@ end end ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 232 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 232 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 748 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 128 + i32.const 531 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 680 + i32.load + i32.gt_u + if + i32.const 280 + i32.const 336 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 684 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $continue|0 + end + end + loop $continue|1 + local.get $3 + i32.const 8 + i32.lt_u + i32.eqz + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $continue|1 + end + end + end + loop $continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + loop $continue|4 + local.get $3 + i32.const 8 + i32.lt_u + i32.eqz + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 561 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 562 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $0 + local.get $1 + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $1 + call $~lib/rt/tlsf/__free + end + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 232 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 232 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + 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 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 748 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + i32.const 268435452 + i32.gt_u + if + i32.const 24 + i32.const 72 + i32.const 14 + i32.const 56 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + local.tee $2 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $1 + local.get $2 + call $~lib/memory/memory.fill + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 2 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $1 + local.get $0 + i32.load + local.tee $3 + i32.ne + if + local.get $1 + call $~lib/rt/pure/__retain + drop + local.get $3 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/rt/tlsf/reallocateBlock (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $2 + call $~lib/rt/tlsf/prepareSize + local.set $3 + local.get $1 + i32.load + local.tee $4 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 128 + i32.const 493 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32.const -4 + i32.and + i32.le_u + if + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + local.get $2 + i32.store offset=12 + local.get $1 + return + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $6 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $4 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $5 + local.get $3 + i32.ge_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $4 + i32.const 3 + i32.and + local.get $5 + i32.or + i32.store + local.get $1 + local.get $2 + i32.store offset=12 + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + return + end + end + local.get $0 + local.get $2 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + local.get $1 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $1 + i32.load offset=8 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + local.get $4 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $3 + ) + (func $~lib/rt/tlsf/__realloc (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 553 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 554 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + local.get $1 + call $~lib/rt/tlsf/reallocateBlock + i32.const 16 + i32.add + ) (func $~lib/array/ensureSize (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) diff --git a/tests/compiler/retain-release-sanity.untouched.wat b/tests/compiler/retain-release-sanity.untouched.wat index 42543afa..a0f82653 100644 --- a/tests/compiler/retain-release-sanity.untouched.wat +++ b/tests/compiler/retain-release-sanity.untouched.wat @@ -32,10 +32,10 @@ (table $0 1 funcref) (elem (i32.const 0) $null) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 680)) (global $~lib/heap/__heap_base i32 (i32.const 748)) (export "memory" (memory $0)) @@ -1341,7 +1341,271 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i64) + block $~lib/util/memory/memset|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $3 + i32.eqz + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 1 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 2 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 1 + i32.add + local.get $4 + i32.store8 + local.get $5 + i32.const 2 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 2 + i32.sub + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 3 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 6 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 3 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + i32.const 0 + local.get $5 + i32.sub + i32.const 3 + i32.and + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $3 + i32.const -4 + i32.and + local.set $3 + i32.const -1 + i32.const 255 + i32.div_u + local.get $4 + i32.const 255 + i32.and + i32.mul + local.set $7 + local.get $5 + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 4 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 8 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 12 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 8 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 24 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 12 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 16 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 20 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 24 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 28 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 24 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 20 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.get $7 + i32.store + i32.const 24 + local.get $5 + i32.const 4 + i32.and + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $7 + i64.extend_i32_u + local.get $7 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $8 + block $break|0 + loop $continue|0 + local.get $3 + i32.const 32 + i32.ge_u + i32.eqz + br_if $break|0 + local.get $5 + local.get $8 + i64.store + local.get $5 + i32.const 8 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 16 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 24 + i32.add + local.get $8 + i64.store + local.get $3 + i32.const 32 + i32.sub + local.set $3 + local.get $5 + i32.const 32 + i32.add + local.set $5 + br $continue|0 + end + unreachable + end + end + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1390,7 +1654,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -1402,7 +1666,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1431,7 +1695,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base local.set $1 @@ -1456,7 +1720,7 @@ i32.add i32.load ) - (func $~lib/util/memory/memcpy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/memory/memcpy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2484,7 +2748,7 @@ i32.store8 end ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2709,7 +2973,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -2746,7 +3010,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 23 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -2804,7 +3068,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.set $1 @@ -2824,7 +3088,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -2928,7 +3192,7 @@ end end ) - (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -2939,7 +3203,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2963,6 +3227,10 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -3006,7 +3274,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3028,7 +3296,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/rt/tlsf/reallocateBlock (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3159,7 +3427,7 @@ call $~lib/rt/tlsf/insertBlock local.get $8 ) - (func $~lib/rt/tlsf/__realloc (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__realloc (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -3199,270 +3467,6 @@ i32.const 16 i32.add ) - (func $~lib/memory/memory.fill (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i64) - block $~lib/util/memory/memset|inlined.0 - local.get $0 - local.set $5 - local.get $1 - local.set $4 - local.get $2 - local.set $3 - local.get $3 - i32.eqz - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 1 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 2 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 1 - i32.add - local.get $4 - i32.store8 - local.get $5 - i32.const 2 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 2 - i32.sub - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 3 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 6 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 3 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - i32.const 0 - local.get $5 - i32.sub - i32.const 3 - i32.and - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $3 - i32.const -4 - i32.and - local.set $3 - i32.const -1 - i32.const 255 - i32.div_u - local.get $4 - i32.const 255 - i32.and - i32.mul - local.set $7 - local.get $5 - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 4 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 8 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 12 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 8 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 24 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 12 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 16 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 20 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 24 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 28 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 24 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 20 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 16 - i32.sub - local.get $7 - i32.store - i32.const 24 - local.get $5 - i32.const 4 - i32.and - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $7 - i64.extend_i32_u - local.get $7 - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 - local.get $5 - local.get $8 - i64.store - local.get $5 - i32.const 8 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 16 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 24 - i32.add - local.get $8 - i64.store - local.get $3 - i32.const 32 - i32.sub - local.set $3 - local.get $5 - i32.const 32 - i32.add - local.set $5 - br $continue|0 - end - unreachable - end - end - ) (func $~lib/array/ensureSize (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 1dca1cd3..c8705e85 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -1227,614 +1227,7 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.tee $1 - i32.const -268435456 - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const -268435456 - i32.and - i32.ne - if - i32.const 0 - i32.const 232 - i32.const 104 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32.const 1 - i32.add - i32.store offset=4 - local.get $0 - call $~lib/rt/rtrace/onincrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 232 - i32.const 107 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 7412 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/increment - end - local.get $0 - ) - (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 - i32.load - local.tee $2 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 128 - i32.const 531 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $2 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/rtrace/onfree - ) - (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 7200 - i32.load - i32.gt_u - if - i32.const 280 - i32.const 336 - i32.const 22 - i32.const 27 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3 - i32.shl - i32.const 7204 - i32.add - i32.load - ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - block $~lib/util/memory/memmove|inlined.0 - local.get $2 - local.set $3 - local.get $0 - local.get $1 - i32.eq - br_if $~lib/util/memory/memmove|inlined.0 - local.get $0 - local.get $1 - i32.lt_u - if - local.get $1 - i32.const 7 - i32.and - local.get $0 - i32.const 7 - i32.and - i32.eq - if - loop $continue|0 - local.get $0 - i32.const 7 - i32.and - if - local.get $3 - i32.eqz - br_if $~lib/util/memory/memmove|inlined.0 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - local.get $0 - local.tee $2 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.tee $4 - i32.const 1 - i32.add - local.set $1 - local.get $2 - local.get $4 - i32.load8_u - i32.store8 - br $continue|0 - end - end - loop $continue|1 - local.get $3 - i32.const 8 - i32.lt_u - i32.eqz - if - local.get $0 - local.get $1 - i64.load - i64.store - local.get $3 - i32.const 8 - i32.sub - local.set $3 - local.get $0 - i32.const 8 - i32.add - local.set $0 - local.get $1 - i32.const 8 - i32.add - local.set $1 - br $continue|1 - end - end - end - loop $continue|2 - local.get $3 - if - local.get $0 - local.tee $2 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.tee $4 - i32.const 1 - i32.add - local.set $1 - local.get $2 - local.get $4 - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - else - local.get $1 - i32.const 7 - i32.and - local.get $0 - i32.const 7 - i32.and - i32.eq - if - loop $continue|3 - local.get $0 - local.get $3 - i32.add - i32.const 7 - i32.and - if - local.get $3 - i32.eqz - br_if $~lib/util/memory/memmove|inlined.0 - local.get $0 - local.get $3 - i32.const 1 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i32.load8_u - i32.store8 - br $continue|3 - end - end - loop $continue|4 - local.get $3 - i32.const 8 - i32.lt_u - i32.eqz - if - local.get $0 - local.get $3 - i32.const 8 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i64.load - i64.store - br $continue|4 - end - end - end - loop $continue|5 - local.get $3 - if - local.get $0 - local.get $3 - i32.const 1 - i32.sub - local.tee $3 - i32.add - local.get $1 - local.get $3 - i32.add - i32.load8_u - i32.store8 - br $continue|5 - end - end - end - end - ) - (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 561 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 15 - i32.and - i32.eqz - i32.const 0 - local.get $0 - select - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 562 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/pure/CUR - global.get $~lib/rt/pure/ROOTS - local.tee $1 - i32.sub - local.tee $2 - i32.const 1 - i32.shl - local.tee $0 - i32.const 256 - local.get $0 - i32.const 256 - i32.gt_u - select - local.tee $3 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.tee $0 - i32.const 16 - i32.sub - call $~lib/rt/rtrace/onfree - local.get $0 - local.get $1 - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/rtrace/onalloc - local.get $1 - call $~lib/rt/tlsf/__free - end - local.get $0 - global.set $~lib/rt/pure/ROOTS - local.get $0 - local.get $2 - i32.add - global.set $~lib/rt/pure/CUR - local.get $0 - local.get $3 - i32.add - global.set $~lib/rt/pure/END - ) - (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/pure/CUR - local.tee $1 - global.get $~lib/rt/pure/END - i32.ge_u - if - call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 4 - i32.add - global.set $~lib/rt/pure/CUR - ) - (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - i32.const 268435455 - i32.and - local.set $1 - local.get $0 - call $~lib/rt/rtrace/ondecrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 232 - i32.const 115 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.eq - if - local.get $0 - i32.const 16 - i32.add - i32.const 1 - call $~lib/rt/__visit_members - local.get $2 - i32.const -2147483648 - i32.and - if - local.get $0 - i32.const -2147483648 - i32.store offset=4 - else - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - end - else - local.get $1 - i32.const 0 - i32.le_u - if - i32.const 0 - i32.const 232 - i32.const 124 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/__typeinfo - i32.const 16 - i32.and - 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 - i32.sub - i32.const -1342177280 - i32.or - i32.store offset=4 - local.get $2 - i32.const -2147483648 - i32.and - i32.eqz - if - local.get $0 - call $~lib/rt/pure/appendRoot - end - end - end - ) - (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.const 7412 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/pure/decrement - end - ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $1 - i32.const 1073741808 - local.get $2 - i32.shr_u - i32.gt_u - if - i32.const 24 - i32.const 72 - i32.const 14 - i32.const 56 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $2 - i32.shl - local.tee $2 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.set $1 - local.get $0 - i32.eqz - if - i32.const 12 - i32.const 2 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.load - local.tee $3 - local.get $1 - i32.ne - if - local.get $1 - call $~lib/rt/pure/__retain - drop - local.get $3 - call $~lib/rt/pure/__release - end - local.get $0 - local.get $1 - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.get $2 - i32.store offset=8 - local.get $0 - ) - (func $~lib/array/Array#constructor (; 27 ;) (type $FUNCSIG$i) (result i32) - (local $0 i32) - i32.const 16 - i32.const 3 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/pure/__retain - i32.const 0 - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - call $~lib/rt/pure/__retain - drop - local.get $0 - call $~lib/rt/pure/__release - local.get $0 - i32.const 0 - i32.ne - ) - (func $~lib/array/Array.isArray (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - call $~lib/rt/pure/__retain - drop - local.get $0 - call $~lib/rt/pure/__release - i32.const 0 - ) - (func $~lib/rt/__allocArray (; 30 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (local $4 i32) - i32.const 16 - local.get $2 - call $~lib/rt/tlsf/__alloc - local.tee $2 - local.get $0 - local.get $1 - i32.shl - local.tee $1 - i32.const 0 - call $~lib/rt/tlsf/__alloc - local.tee $4 - call $~lib/rt/pure/__retain - i32.store - local.get $2 - local.get $4 - i32.store offset=4 - local.get $2 - local.get $1 - i32.store offset=8 - local.get $2 - local.get $0 - i32.store offset=12 - local.get $3 - if - local.get $4 - local.get $3 - local.get $1 - call $~lib/memory/memory.copy - end - local.get $2 - ) - (func $~lib/memory/memory.fill (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.fill (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i64) block $~lib/util/memory/memset|inlined.0 @@ -2058,6 +1451,616 @@ end end ) + (func $~lib/rt/pure/increment (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 232 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 232 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 7412 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/tlsf/freeBlock (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 128 + i32.const 531 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/__typeinfo (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 7200 + i32.load + i32.gt_u + if + i32.const 280 + i32.const 336 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 7204 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $continue|0 + end + end + loop $continue|1 + local.get $3 + i32.const 8 + i32.lt_u + i32.eqz + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $continue|1 + end + end + end + loop $continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + loop $continue|4 + local.get $3 + i32.const 8 + i32.lt_u + i32.eqz + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 561 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 562 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 23 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $0 + local.get $1 + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $1 + call $~lib/rt/tlsf/__free + end + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 232 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 232 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + 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 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 7412 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + local.get $1 + i32.const 1073741808 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 24 + i32.const 72 + i32.const 14 + i32.const 56 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.shl + local.tee $2 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $1 + i32.const 0 + local.get $2 + call $~lib/memory/memory.fill + local.get $0 + i32.eqz + if + i32.const 12 + i32.const 2 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.load + local.tee $3 + local.get $1 + i32.ne + if + local.get $1 + call $~lib/rt/pure/__retain + drop + local.get $3 + call $~lib/rt/pure/__release + end + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $0 + ) + (func $~lib/array/Array#constructor (; 28 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 16 + i32.const 3 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + i32.const 0 + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + drop + local.get $0 + call $~lib/rt/pure/__release + local.get $0 + i32.const 0 + i32.ne + ) + (func $~lib/array/Array.isArray (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + call $~lib/rt/pure/__retain + drop + local.get $0 + call $~lib/rt/pure/__release + i32.const 0 + ) + (func $~lib/rt/__allocArray (; 31 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + i32.const 16 + local.get $2 + call $~lib/rt/tlsf/__alloc + local.tee $2 + local.get $0 + local.get $1 + i32.shl + local.tee $1 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $4 + call $~lib/rt/pure/__retain + i32.store + local.get $2 + local.get $4 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + local.get $0 + i32.store offset=12 + local.get $3 + if + local.get $4 + local.get $3 + local.get $1 + call $~lib/memory/memory.copy + end + local.get $2 + ) (func $~lib/array/Array#fill (; 32 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 88d7ccea..53a705f0 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -210,10 +210,10 @@ (table $0 57 funcref) (elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $std/array/i (mut i32) (i32.const 0)) @@ -1539,7 +1539,271 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i64) + block $~lib/util/memory/memset|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $3 + i32.eqz + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 1 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 2 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 1 + i32.add + local.get $4 + i32.store8 + local.get $5 + i32.const 2 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 2 + i32.sub + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 3 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 6 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 3 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + i32.const 0 + local.get $5 + i32.sub + i32.const 3 + i32.and + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $3 + i32.const -4 + i32.and + local.set $3 + i32.const -1 + i32.const 255 + i32.div_u + local.get $4 + i32.const 255 + i32.and + i32.mul + local.set $7 + local.get $5 + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 4 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 8 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 12 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 8 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 24 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 12 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 16 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 20 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 24 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 28 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 24 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 20 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.get $7 + i32.store + i32.const 24 + local.get $5 + i32.const 4 + i32.and + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $7 + i64.extend_i32_u + local.get $7 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $8 + block $break|0 + loop $continue|0 + local.get $3 + i32.const 32 + i32.ge_u + i32.eqz + br_if $break|0 + local.get $5 + local.get $8 + i64.store + local.get $5 + i32.const 8 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 16 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 24 + i32.add + local.get $8 + i64.store + local.get $3 + i32.const 32 + i32.sub + local.set $3 + local.get $5 + i32.const 32 + i32.add + local.set $5 + br $continue|0 + end + unreachable + end + end + ) + (func $~lib/rt/pure/increment (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1588,7 +1852,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -1600,7 +1864,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1629,7 +1893,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base local.set $1 @@ -1654,7 +1918,7 @@ i32.add i32.load ) - (func $~lib/util/memory/memcpy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/memory/memcpy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2682,7 +2946,7 @@ i32.store8 end ) - (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2907,7 +3171,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -2944,7 +3208,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 23 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 24 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -3002,7 +3266,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.set $1 @@ -3022,7 +3286,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -3126,7 +3390,7 @@ end end ) - (func $~lib/rt/pure/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -3137,7 +3401,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3161,6 +3425,10 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -3204,7 +3472,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3226,7 +3494,7 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3244,7 +3512,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array.isArray<~lib/array/Array> (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array> (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3262,7 +3530,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $std/array/P#constructor (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/P#constructor (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.eqz if @@ -3274,7 +3542,7 @@ end local.get $0 ) - (func $~lib/array/Array.isArray (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3292,7 +3560,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/typedarray/Uint8Array#constructor (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3308,7 +3576,7 @@ local.set $0 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3326,7 +3594,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array.isArray (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 0 if (result i32) local.get $0 @@ -3336,7 +3604,7 @@ i32.const 0 end ) - (func $~lib/array/Array.isArray<~lib/string/String> (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/string/String> (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 call $~lib/rt/pure/__retain @@ -3354,7 +3622,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/rt/__allocArray (; 37 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/rt/__allocArray (; 38 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3392,270 +3660,6 @@ end local.get $4 ) - (func $~lib/memory/memory.fill (; 38 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i64) - block $~lib/util/memory/memset|inlined.0 - local.get $0 - local.set $5 - local.get $1 - local.set $4 - local.get $2 - local.set $3 - local.get $3 - i32.eqz - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 1 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 2 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 1 - i32.add - local.get $4 - i32.store8 - local.get $5 - i32.const 2 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 2 - i32.sub - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 3 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 6 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 3 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - i32.const 0 - local.get $5 - i32.sub - i32.const 3 - i32.and - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $3 - i32.const -4 - i32.and - local.set $3 - i32.const -1 - i32.const 255 - i32.div_u - local.get $4 - i32.const 255 - i32.and - i32.mul - local.set $7 - local.get $5 - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 4 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 8 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 12 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 8 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 24 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 12 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 16 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 20 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 24 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 28 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 24 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 20 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 16 - i32.sub - local.get $7 - i32.store - i32.const 24 - local.get $5 - i32.const 4 - i32.and - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $7 - i64.extend_i32_u - local.get $7 - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 - local.get $5 - local.get $8 - i64.store - local.get $5 - i32.const 8 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 16 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 24 - i32.add - local.get $8 - i64.store - local.get $3 - i32.const 32 - i32.sub - local.set $3 - local.get $5 - i32.const 32 - i32.add - local.set $5 - br $continue|0 - end - unreachable - end - end - ) (func $~lib/array/Array#fill (; 39 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index c883da19..31399cd7 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -1026,49 +1026,214 @@ i32.const 16 i32.add ) - (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.const 0 - i32.store8 - local.get $0 - i32.const 8 - i32.add - local.tee $1 - i32.const 1 - i32.sub - i32.const 0 - i32.store8 - local.get $0 - i32.const 1 - i32.add - i32.const 0 - i32.store8 - local.get $0 - i32.const 2 - i32.add - i32.const 0 - i32.store8 - local.get $1 - i32.const 2 - i32.sub - i32.const 0 - i32.store8 - local.get $1 - i32.const 3 - i32.sub - i32.const 0 - i32.store8 - local.get $0 - i32.const 3 - i32.add - i32.const 0 - i32.store8 - local.get $1 - i32.const 4 - i32.sub - i32.const 0 - i32.store8 + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + block $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.eqz + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 2 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 1 + i32.add + i32.const 0 + i32.store8 + local.get $0 + i32.const 2 + i32.add + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + local.get $2 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 6 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 3 + i32.add + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.const 0 + local.get $0 + i32.sub + i32.const 3 + i32.and + local.tee $1 + i32.sub + local.get $0 + local.get $1 + i32.add + local.tee $0 + i32.const 0 + i32.store + i32.const -4 + i32.and + local.tee $1 + local.get $0 + i32.add + i32.const 4 + i32.sub + i32.const 0 + i32.store + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 4 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 8 + i32.add + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 12 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 8 + i32.sub + i32.const 0 + i32.store + local.get $1 + i32.const 24 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 12 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 16 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 20 + i32.add + i32.const 0 + i32.store + local.get $0 + i32.const 24 + i32.add + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.add + local.tee $2 + i32.const 28 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 24 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.const 0 + i32.store + local.get $2 + i32.const 16 + i32.sub + i32.const 0 + i32.store + local.get $0 + i32.const 4 + i32.and + i32.const 24 + i32.add + local.tee $2 + local.get $0 + i32.add + local.set $0 + local.get $1 + local.get $2 + i32.sub + local.set $1 + loop $continue|0 + local.get $1 + i32.const 32 + i32.ge_u + if + local.get $0 + i64.const 0 + i64.store + local.get $0 + i32.const 8 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 16 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 24 + i32.add + i64.const 0 + i64.store + local.get $1 + i32.const 32 + i32.sub + local.set $1 + local.get $0 + i32.const 32 + i32.add + local.set $0 + br $continue|0 + end + end + end ) (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) @@ -1665,7 +1830,9 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.tee $1 + local.get $2 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -1810,6 +1977,7 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.tee $0 + i32.const 8 call $~lib/memory/memory.fill local.get $0 call $~lib/rt/pure/__retain diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index a2158288..4ff1a6d0 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -1671,7 +1671,7 @@ if i32.const 24 i32.const 72 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable @@ -4011,6 +4011,10 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 8dbdbb92..d47671b8 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -1032,7 +1032,51 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.const 0 + i32.store8 + local.get $0 + i32.const 8 + i32.add + local.tee $1 + i32.const 1 + i32.sub + i32.const 0 + i32.store8 + local.get $0 + i32.const 1 + i32.add + i32.const 0 + i32.store8 + local.get $0 + i32.const 2 + i32.add + i32.const 0 + i32.store8 + local.get $1 + i32.const 2 + i32.sub + i32.const 0 + i32.store8 + local.get $1 + i32.const 3 + i32.sub + i32.const 0 + i32.store8 + local.get $0 + i32.const 3 + i32.add + i32.const 0 + i32.store8 + local.get $1 + i32.const 4 + i32.sub + i32.const 0 + i32.store8 + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1073,7 +1117,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 556 i32.gt_u @@ -1085,7 +1129,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1111,7 +1155,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 512 i32.load @@ -1131,7 +1175,7 @@ i32.add i32.load ) - (func $~lib/memory/memory.copy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) block $~lib/util/memory/memmove|inlined.0 @@ -1306,7 +1350,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -1339,7 +1383,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 21 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -1388,7 +1432,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.tee $1 @@ -1407,7 +1451,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1497,7 +1541,7 @@ end end ) - (func $~lib/rt/pure/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 i32.const 556 i32.gt_u @@ -1508,13 +1552,14 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) i32.const 8 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.tee $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -1556,7 +1601,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/typedarray/Uint8Array#__set (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/Uint8Array#__set (; 27 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -1576,13 +1621,13 @@ local.get $2 i32.store8 ) - (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=12 ) - (func $~lib/dataview/DataView#constructor (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#constructor (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -1648,19 +1693,19 @@ call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/typedarray/Uint8Array#get:buffer (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8Array#get:buffer (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load call $~lib/rt/pure/__retain ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load i32.sub ) - (func $~lib/polyfills/bswap (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const -16711936 i32.and @@ -1673,7 +1718,7 @@ i32.rotr i32.or ) - (func $~lib/dataview/DataView#getFloat32 (; 32 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) + (func $~lib/dataview/DataView#getFloat32 (; 33 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) local.get $1 i32.const 0 i32.lt_s @@ -1709,7 +1754,7 @@ f32.reinterpret_i32 end ) - (func $~lib/polyfills/bswap (; 33 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) + (func $~lib/polyfills/bswap (; 34 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) local.get $0 i64.const 8 i64.shr_u @@ -1735,7 +1780,7 @@ i64.const 32 i64.rotr ) - (func $~lib/dataview/DataView#getFloat64 (; 34 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/dataview/DataView#getFloat64 (; 35 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) i32.const 8 local.get $0 i32.load offset=8 @@ -1761,7 +1806,7 @@ f64.reinterpret_i64 end ) - (func $~lib/dataview/DataView#getInt8 (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/dataview/DataView#getInt8 (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -1780,7 +1825,7 @@ i32.add i32.load8_s ) - (func $~lib/polyfills/bswap (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 16 i32.shl @@ -1793,7 +1838,7 @@ i32.shl i32.or ) - (func $~lib/dataview/DataView#getInt16 (; 37 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getInt16 (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 0 i32.lt_s @@ -1827,7 +1872,7 @@ end local.get $0 ) - (func $~lib/dataview/DataView#getInt32 (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getInt32 (; 39 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 0 i32.lt_s @@ -1861,7 +1906,7 @@ end local.get $0 ) - (func $~lib/dataview/DataView#getInt64 (; 39 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/dataview/DataView#getInt64 (; 40 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) (local $2 i64) i32.const 8 local.get $0 @@ -1887,7 +1932,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#getUint8 (; 40 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/dataview/DataView#getUint8 (; 41 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -1906,7 +1951,7 @@ i32.add i32.load8_u ) - (func $~lib/polyfills/bswap (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 8 i32.shl @@ -1917,7 +1962,7 @@ i32.shr_u i32.or ) - (func $~lib/dataview/DataView#getUint16 (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getUint16 (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 0 i32.lt_s @@ -1951,7 +1996,7 @@ end local.get $0 ) - (func $~lib/dataview/DataView#getUint32 (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getUint32 (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 0 i32.lt_s @@ -1985,7 +2030,7 @@ end local.get $0 ) - (func $~lib/dataview/DataView#getUint64 (; 44 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/dataview/DataView#getUint64 (; 45 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) (local $2 i64) i32.const 8 local.get $0 @@ -2011,7 +2056,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#setFloat32 (; 45 ;) (type $FUNCSIG$vifi) (param $0 i32) (param $1 f32) (param $2 i32) + (func $~lib/dataview/DataView#setFloat32 (; 46 ;) (type $FUNCSIG$vifi) (param $0 i32) (param $1 f32) (param $2 i32) i32.const 4 local.get $0 i32.load offset=8 @@ -2039,7 +2084,7 @@ i32.store end ) - (func $~lib/dataview/DataView#setFloat64 (; 46 ;) (type $FUNCSIG$vidi) (param $0 i32) (param $1 f64) (param $2 i32) + (func $~lib/dataview/DataView#setFloat64 (; 47 ;) (type $FUNCSIG$vidi) (param $0 i32) (param $1 f64) (param $2 i32) i32.const 8 local.get $0 i32.load offset=8 @@ -2067,7 +2112,7 @@ i64.store end ) - (func $~lib/dataview/DataView#setInt8 (; 47 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/dataview/DataView#setInt8 (; 48 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 0 local.get $0 i32.load offset=8 @@ -2085,7 +2130,7 @@ i32.const 108 i32.store8 ) - (func $~lib/dataview/DataView#setInt16 (; 48 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setInt16 (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) i32.const 2 local.get $0 i32.load offset=8 @@ -2109,7 +2154,7 @@ end i32.store16 ) - (func $~lib/dataview/DataView#setInt32 (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setInt32 (; 50 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) i32.const 4 local.get $0 i32.load offset=8 @@ -2133,7 +2178,7 @@ end i32.store ) - (func $~lib/dataview/DataView#setInt64 (; 50 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/dataview/DataView#setInt64 (; 51 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) i32.const 8 local.get $0 i32.load offset=8 @@ -2157,7 +2202,7 @@ end i64.store ) - (func $~lib/dataview/DataView#setUint8 (; 51 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/dataview/DataView#setUint8 (; 52 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 0 local.get $0 i32.load offset=8 @@ -2175,7 +2220,7 @@ i32.const 238 i32.store8 ) - (func $~lib/dataview/DataView#setUint16 (; 52 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setUint16 (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) i32.const 2 local.get $0 i32.load offset=8 @@ -2199,7 +2244,7 @@ end i32.store16 ) - (func $~lib/dataview/DataView#setUint32 (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setUint32 (; 54 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) i32.const 4 local.get $0 i32.load offset=8 @@ -2223,7 +2268,7 @@ end i32.store ) - (func $~lib/dataview/DataView#setUint64 (; 54 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/dataview/DataView#setUint64 (; 55 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) i32.const 8 local.get $0 i32.load offset=8 @@ -2247,7 +2292,7 @@ end i64.store ) - (func $~lib/dataview/DataView#constructor|trampoline (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/dataview/DataView#constructor|trampoline (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) block $2of2 block $1of2 @@ -2268,7 +2313,7 @@ local.get $1 call $~lib/dataview/DataView#constructor ) - (func $start:std/dataview (; 56 ;) (type $FUNCSIG$v) + (func $start:std/dataview (; 57 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -3833,10 +3878,10 @@ local.get $4 call $~lib/rt/pure/__release ) - (func $start (; 57 ;) (type $FUNCSIG$v) + (func $start (; 58 ;) (type $FUNCSIG$v) call $start:std/dataview ) - (func $~lib/rt/pure/markGray (; 58 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 59 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -3860,7 +3905,7 @@ call $~lib/rt/__visit_members end ) - (func $~lib/rt/pure/scanBlack (; 59 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 60 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -3873,7 +3918,7 @@ i32.const 4 call $~lib/rt/__visit_members ) - (func $~lib/rt/pure/scan (; 60 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 61 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -3907,7 +3952,7 @@ end end ) - (func $~lib/rt/pure/collectWhite (; 61 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 62 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -3940,7 +3985,7 @@ call $~lib/rt/tlsf/freeBlock end ) - (func $~lib/rt/pure/__visit (; 62 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 i32.const 556 i32.lt_u @@ -4050,7 +4095,7 @@ unreachable end ) - (func $~lib/rt/__visit_members (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $switch$1$default block $switch$1$case$4 block $switch$1$case$2 @@ -4074,7 +4119,7 @@ end unreachable ) - (func $null (; 64 ;) (type $FUNCSIG$v) + (func $null (; 65 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat index 82f363e1..406b72e8 100644 --- a/tests/compiler/std/dataview.untouched.wat +++ b/tests/compiler/std/dataview.untouched.wat @@ -35,10 +35,10 @@ (table $0 1 funcref) (elem (i32.const 0) $null) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/argc (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 512)) (global $~lib/heap/__heap_base i32 (i32.const 556)) @@ -1345,7 +1345,271 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i64) + block $~lib/util/memory/memset|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $3 + i32.eqz + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 1 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 2 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 1 + i32.add + local.get $4 + i32.store8 + local.get $5 + i32.const 2 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 2 + i32.sub + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 3 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 6 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 3 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + i32.const 0 + local.get $5 + i32.sub + i32.const 3 + i32.and + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $3 + i32.const -4 + i32.and + local.set $3 + i32.const -1 + i32.const 255 + i32.div_u + local.get $4 + i32.const 255 + i32.and + i32.mul + local.set $7 + local.get $5 + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 4 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 8 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 12 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 8 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 24 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 12 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 16 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 20 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 24 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 28 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 24 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 20 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.get $7 + i32.store + i32.const 24 + local.get $5 + i32.const 4 + i32.and + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $7 + i64.extend_i32_u + local.get $7 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $8 + block $break|0 + loop $continue|0 + local.get $3 + i32.const 32 + i32.ge_u + i32.eqz + br_if $break|0 + local.get $5 + local.get $8 + i64.store + local.get $5 + i32.const 8 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 16 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 24 + i32.add + local.get $8 + i64.store + local.get $3 + i32.const 32 + i32.sub + local.set $3 + local.get $5 + i32.const 32 + i32.add + local.set $5 + br $continue|0 + end + unreachable + end + end + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1394,7 +1658,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -1406,7 +1670,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1435,7 +1699,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base local.set $1 @@ -1460,7 +1724,7 @@ i32.add i32.load ) - (func $~lib/util/memory/memcpy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/memory/memcpy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2488,7 +2752,7 @@ i32.store8 end ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2713,7 +2977,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -2750,7 +3014,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 23 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -2808,7 +3072,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.set $1 @@ -2828,7 +3092,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -2932,7 +3196,7 @@ end end ) - (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -2943,7 +3207,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2967,6 +3231,10 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -3010,7 +3278,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/typedarray/Uint8Array#constructor (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3026,7 +3294,7 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint8Array#__set (; 28 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/Uint8Array#__set (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -3046,13 +3314,13 @@ local.get $2 i32.store8 ) - (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=12 ) - (func $~lib/dataview/DataView#constructor (; 30 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/dataview/DataView#constructor (; 31 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3128,23 +3396,23 @@ call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/typedarray/Uint8Array#get:buffer (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8Array#get:buffer (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load call $~lib/rt/pure/__retain ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load i32.sub ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 ) - (func $~lib/polyfills/bswap (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const -16711936 i32.and @@ -3158,7 +3426,7 @@ i32.or return ) - (func $~lib/dataview/DataView#getFloat32 (; 35 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) + (func $~lib/dataview/DataView#getFloat32 (; 36 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) local.get $1 i32.const 0 i32.lt_s @@ -3194,7 +3462,7 @@ f32.reinterpret_i32 end ) - (func $~lib/polyfills/bswap (; 36 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) + (func $~lib/polyfills/bswap (; 37 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) (local $1 i64) (local $2 i64) (local $3 i64) @@ -3233,7 +3501,7 @@ i64.rotr return ) - (func $~lib/dataview/DataView#getFloat64 (; 37 ;) (type $FUNCSIG$diii) (param $0 i32) (param $1 i32) (param $2 i32) (result f64) + (func $~lib/dataview/DataView#getFloat64 (; 38 ;) (type $FUNCSIG$diii) (param $0 i32) (param $1 i32) (param $2 i32) (result f64) local.get $1 i32.const 0 i32.lt_s @@ -3269,7 +3537,7 @@ f64.reinterpret_i64 end ) - (func $~lib/dataview/DataView#getInt8 (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/dataview/DataView#getInt8 (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -3288,7 +3556,7 @@ i32.add i32.load8_s ) - (func $~lib/polyfills/bswap (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 8 i32.shl @@ -3304,7 +3572,7 @@ i32.or return ) - (func $~lib/dataview/DataView#getInt16 (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getInt16 (; 41 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 0 @@ -3338,7 +3606,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/polyfills/bswap (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const -16711936 i32.and @@ -3352,7 +3620,7 @@ i32.or return ) - (func $~lib/dataview/DataView#getInt32 (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getInt32 (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 0 @@ -3386,7 +3654,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/polyfills/bswap (; 43 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) + (func $~lib/polyfills/bswap (; 44 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) (local $1 i64) (local $2 i64) (local $3 i64) @@ -3425,7 +3693,7 @@ i64.rotr return ) - (func $~lib/dataview/DataView#getInt64 (; 44 ;) (type $FUNCSIG$jiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i64) + (func $~lib/dataview/DataView#getInt64 (; 45 ;) (type $FUNCSIG$jiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i64) (local $3 i64) local.get $1 i32.const 0 @@ -3459,7 +3727,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#getUint8 (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/dataview/DataView#getUint8 (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -3478,7 +3746,7 @@ i32.add i32.load8_u ) - (func $~lib/polyfills/bswap (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/polyfills/bswap (; 47 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 8 i32.shl @@ -3492,7 +3760,7 @@ i32.or return ) - (func $~lib/dataview/DataView#getUint16 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getUint16 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 0 @@ -3526,7 +3794,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#getUint32 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/dataview/DataView#getUint32 (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 0 @@ -3560,7 +3828,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#getUint64 (; 49 ;) (type $FUNCSIG$jiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i64) + (func $~lib/dataview/DataView#getUint64 (; 50 ;) (type $FUNCSIG$jiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i64) (local $3 i64) local.get $1 i32.const 0 @@ -3594,7 +3862,7 @@ call $~lib/polyfills/bswap end ) - (func $~lib/dataview/DataView#setFloat32 (; 50 ;) (type $FUNCSIG$viifi) (param $0 i32) (param $1 i32) (param $2 f32) (param $3 i32) + (func $~lib/dataview/DataView#setFloat32 (; 51 ;) (type $FUNCSIG$viifi) (param $0 i32) (param $1 i32) (param $2 f32) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3632,7 +3900,7 @@ i32.store end ) - (func $~lib/dataview/DataView#setFloat64 (; 51 ;) (type $FUNCSIG$viidi) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 i32) + (func $~lib/dataview/DataView#setFloat64 (; 52 ;) (type $FUNCSIG$viidi) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3670,7 +3938,7 @@ i64.store end ) - (func $~lib/dataview/DataView#setInt8 (; 52 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setInt8 (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -3690,7 +3958,7 @@ local.get $2 i32.store8 ) - (func $~lib/dataview/DataView#setInt16 (; 53 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/dataview/DataView#setInt16 (; 54 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3722,7 +3990,7 @@ end i32.store16 ) - (func $~lib/dataview/DataView#setInt32 (; 54 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/dataview/DataView#setInt32 (; 55 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3754,7 +4022,7 @@ end i32.store ) - (func $~lib/dataview/DataView#setInt64 (; 55 ;) (type $FUNCSIG$viiji) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i32) + (func $~lib/dataview/DataView#setInt64 (; 56 ;) (type $FUNCSIG$viiji) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3786,7 +4054,7 @@ end i64.store ) - (func $~lib/dataview/DataView#setUint8 (; 56 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/dataview/DataView#setUint8 (; 57 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -3806,7 +4074,7 @@ local.get $2 i32.store8 ) - (func $~lib/dataview/DataView#setUint16 (; 57 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/dataview/DataView#setUint16 (; 58 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3838,7 +4106,7 @@ end i32.store16 ) - (func $~lib/dataview/DataView#setUint32 (; 58 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/dataview/DataView#setUint32 (; 59 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3870,7 +4138,7 @@ end i32.store ) - (func $~lib/dataview/DataView#setUint64 (; 59 ;) (type $FUNCSIG$viiji) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i32) + (func $~lib/dataview/DataView#setUint64 (; 60 ;) (type $FUNCSIG$viiji) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i32) local.get $1 i32.const 0 i32.lt_s @@ -3902,7 +4170,7 @@ end i64.store ) - (func $~lib/dataview/DataView#constructor|trampoline (; 60 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/dataview/DataView#constructor|trampoline (; 61 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) block $2of2 block $1of2 block $0of2 @@ -3927,18 +4195,18 @@ local.get $3 call $~lib/dataview/DataView#constructor ) - (func $~lib/dataview/DataView#get:byteOffset (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/dataview/DataView#get:byteOffset (; 62 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load i32.sub ) - (func $~lib/dataview/DataView#get:byteLength (; 62 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/dataview/DataView#get:byteLength (; 63 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 ) - (func $start:std/dataview (; 63 ;) (type $FUNCSIG$v) + (func $start:std/dataview (; 64 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -5675,10 +5943,10 @@ local.get $3 call $~lib/rt/pure/__release ) - (func $start (; 64 ;) (type $FUNCSIG$v) + (func $start (; 65 ;) (type $FUNCSIG$v) call $start:std/dataview ) - (func $~lib/rt/pure/markGray (; 65 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 66 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -5705,7 +5973,7 @@ call $~lib/rt/__visit_members end ) - (func $~lib/rt/pure/scanBlack (; 66 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 67 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -5722,7 +5990,7 @@ i32.const 4 call $~lib/rt/__visit_members ) - (func $~lib/rt/pure/scan (; 67 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 68 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -5759,7 +6027,7 @@ end end ) - (func $~lib/rt/pure/collectWhite (; 68 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 69 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -5797,7 +6065,7 @@ call $~lib/rt/tlsf/freeBlock end ) - (func $~lib/rt/pure/__visit (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 70 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -5931,7 +6199,7 @@ end end ) - (func $~lib/rt/__visit_members (; 70 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 71 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $switch$1$default block $switch$1$case$4 @@ -5956,6 +6224,6 @@ end unreachable ) - (func $null (; 71 ;) (type $FUNCSIG$v) + (func $null (; 72 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index bab4f540..0bd1913c 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -1306,7 +1306,7 @@ if i32.const 176 i32.const 224 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index edb8f666..0e4cde4c 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -1677,7 +1677,7 @@ if i32.const 176 i32.const 224 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index a9d9e3bb..50c6528a 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -1303,7 +1303,7 @@ if i32.const 176 i32.const 224 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 81a775de..c09c3b96 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -1677,7 +1677,7 @@ if i32.const 176 i32.const 224 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 837accea..99ff5fce 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -354,7 +354,7 @@ if i32.const 96 i32.const 144 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index 42fda050..89ff851c 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -450,7 +450,7 @@ if i32.const 96 i32.const 144 - i32.const 56 + i32.const 57 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 913493a6..d32f93d5 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -1083,7 +1083,231 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i64) + block $~lib/util/memory/memset|inlined.0 + local.get $2 + i32.eqz + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + local.get $1 + i32.store8 + local.get $0 + local.get $2 + i32.add + i32.const 1 + i32.sub + local.get $1 + i32.store8 + local.get $2 + i32.const 2 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.store8 + local.get $0 + i32.const 2 + i32.add + local.get $1 + i32.store8 + local.get $0 + local.get $2 + i32.add + local.tee $3 + i32.const 2 + i32.sub + local.get $1 + i32.store8 + local.get $3 + i32.const 3 + i32.sub + local.get $1 + i32.store8 + local.get $2 + i32.const 6 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 3 + i32.add + local.get $1 + i32.store8 + local.get $0 + local.get $2 + i32.add + i32.const 4 + i32.sub + local.get $1 + i32.store8 + local.get $2 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $2 + i32.const 0 + local.get $0 + i32.sub + i32.const 3 + i32.and + local.tee $2 + i32.sub + local.get $0 + local.get $2 + i32.add + local.tee $2 + local.get $1 + i32.const 255 + i32.and + i32.const 16843009 + i32.mul + local.tee $0 + i32.store + i32.const -4 + i32.and + local.tee $3 + local.get $2 + i32.add + i32.const 4 + i32.sub + local.get $0 + i32.store + local.get $3 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $2 + i32.const 4 + i32.add + local.get $0 + i32.store + local.get $2 + i32.const 8 + i32.add + local.get $0 + i32.store + local.get $2 + local.get $3 + i32.add + local.tee $1 + i32.const 12 + i32.sub + local.get $0 + i32.store + local.get $1 + i32.const 8 + i32.sub + local.get $0 + i32.store + local.get $3 + i32.const 24 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $2 + i32.const 12 + i32.add + local.get $0 + i32.store + local.get $2 + i32.const 16 + i32.add + local.get $0 + i32.store + local.get $2 + i32.const 20 + i32.add + local.get $0 + i32.store + local.get $2 + i32.const 24 + i32.add + local.get $0 + i32.store + local.get $2 + local.get $3 + i32.add + local.tee $1 + i32.const 28 + i32.sub + local.get $0 + i32.store + local.get $1 + i32.const 24 + i32.sub + local.get $0 + i32.store + local.get $1 + i32.const 20 + i32.sub + local.get $0 + i32.store + local.get $1 + i32.const 16 + i32.sub + local.get $0 + i32.store + local.get $2 + local.get $2 + i32.const 4 + i32.and + i32.const 24 + i32.add + local.tee $2 + i32.add + local.set $1 + local.get $3 + local.get $2 + i32.sub + local.set $2 + local.get $0 + i64.extend_i32_u + local.get $0 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $4 + loop $continue|0 + local.get $2 + i32.const 32 + i32.lt_u + i32.eqz + if + local.get $1 + local.get $4 + i64.store + local.get $1 + i32.const 8 + i32.add + local.get $4 + i64.store + local.get $1 + i32.const 16 + i32.add + local.get $4 + i64.store + local.get $1 + i32.const 24 + i32.add + local.get $4 + i64.store + local.get $2 + i32.const 32 + i32.sub + local.set $2 + local.get $1 + i32.const 32 + i32.add + local.set $1 + br $continue|0 + end + end + end + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1124,7 +1348,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1820 i32.gt_u @@ -1136,7 +1360,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1162,7 +1386,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1688 i32.load @@ -1182,7 +1406,7 @@ i32.add i32.load ) - (func $~lib/memory/memory.copy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) block $~lib/util/memory/memmove|inlined.0 @@ -1357,7 +1581,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -1390,7 +1614,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 21 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -1439,7 +1663,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.tee $1 @@ -1458,7 +1682,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1548,7 +1772,7 @@ end end ) - (func $~lib/rt/pure/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 i32.const 1820 i32.gt_u @@ -1559,7 +1783,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 1073741808 @@ -1580,7 +1804,10 @@ local.tee $2 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $1 + local.tee $1 + i32.const 0 + local.get $2 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -1622,7 +1849,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/typedarray/Int8Array#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int8Array#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 3 call $~lib/rt/tlsf/__alloc @@ -1631,14 +1858,14 @@ i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load i32.sub ) - (func $~lib/typedarray/Uint8Array#constructor (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 4 call $~lib/rt/tlsf/__alloc @@ -1647,7 +1874,7 @@ i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Uint8ClampedArray#constructor (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#constructor (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 5 call $~lib/rt/tlsf/__alloc @@ -1656,7 +1883,7 @@ i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int16Array#constructor (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int16Array#constructor (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 6 call $~lib/rt/tlsf/__alloc @@ -1665,13 +1892,13 @@ i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int16Array#get:length (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int16Array#get:length (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 i32.const 1 i32.shr_u ) - (func $~lib/typedarray/Uint16Array#constructor (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint16Array#constructor (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 7 call $~lib/rt/tlsf/__alloc @@ -1680,7 +1907,7 @@ i32.const 1 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int32Array#constructor (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int32Array#constructor (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 8 call $~lib/rt/tlsf/__alloc @@ -1689,13 +1916,13 @@ i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int32Array#get:length (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int32Array#get:length (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 i32.const 2 i32.shr_u ) - (func $~lib/typedarray/Uint32Array#constructor (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint32Array#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 9 call $~lib/rt/tlsf/__alloc @@ -1704,7 +1931,7 @@ i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int64Array#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int64Array#constructor (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 10 call $~lib/rt/tlsf/__alloc @@ -1713,13 +1940,13 @@ i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Int64Array#get:length (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int64Array#get:length (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 i32.const 3 i32.shr_u ) - (func $~lib/typedarray/Uint64Array#constructor (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint64Array#constructor (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 11 call $~lib/rt/tlsf/__alloc @@ -1728,7 +1955,7 @@ i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Float32Array#constructor (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Float32Array#constructor (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 12 call $~lib/rt/tlsf/__alloc @@ -1737,7 +1964,7 @@ i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $~lib/typedarray/Float64Array#constructor (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Float64Array#constructor (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 12 i32.const 13 call $~lib/rt/tlsf/__alloc @@ -1746,7 +1973,7 @@ i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor ) - (func $std/typedarray/testInstantiate (; 41 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/typedarray/testInstantiate (; 42 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2193,7 +2420,7 @@ local.get $11 call $~lib/rt/pure/__release ) - (func $~lib/typedarray/Int32Array#__set (; 42 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/Int32Array#__set (; 43 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -2217,7 +2444,7 @@ local.get $2 i32.store ) - (func $~lib/typedarray/Int32Array#__get (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int32Array#__get (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -2240,7 +2467,7 @@ i32.add i32.load ) - (func $~lib/typedarray/Int32Array#subarray (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Int32Array#subarray (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2340,7 +2567,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/typedarray/Float64Array#__set (; 45 ;) (type $FUNCSIG$viid) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/typedarray/Float64Array#__set (; 46 ;) (type $FUNCSIG$viid) (param $0 i32) (param $1 i32) (param $2 f64) local.get $1 local.get $0 i32.load offset=8 @@ -2364,7 +2591,7 @@ local.get $2 f64.store ) - (func $~lib/typedarray/Float64Array#subarray (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Float64Array#subarray (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2464,7 +2691,7 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/sort/insertionSort (; 47 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 48 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 f64) @@ -2544,230 +2771,6 @@ unreachable end ) - (func $~lib/memory/memory.fill (; 48 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i64) - block $~lib/util/memory/memset|inlined.0 - local.get $2 - i32.eqz - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - local.get $1 - i32.store8 - local.get $0 - local.get $2 - i32.add - i32.const 1 - i32.sub - local.get $1 - i32.store8 - local.get $2 - i32.const 2 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 1 - i32.add - local.get $1 - i32.store8 - local.get $0 - i32.const 2 - i32.add - local.get $1 - i32.store8 - local.get $0 - local.get $2 - i32.add - local.tee $3 - i32.const 2 - i32.sub - local.get $1 - i32.store8 - local.get $3 - i32.const 3 - i32.sub - local.get $1 - i32.store8 - local.get $2 - i32.const 6 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $0 - i32.const 3 - i32.add - local.get $1 - i32.store8 - local.get $0 - local.get $2 - i32.add - i32.const 4 - i32.sub - local.get $1 - i32.store8 - local.get $2 - i32.const 8 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $2 - i32.const 0 - local.get $0 - i32.sub - i32.const 3 - i32.and - local.tee $2 - i32.sub - local.get $0 - local.get $2 - i32.add - local.tee $2 - local.get $1 - i32.const 255 - i32.and - i32.const 16843009 - i32.mul - local.tee $0 - i32.store - i32.const -4 - i32.and - local.tee $3 - local.get $2 - i32.add - i32.const 4 - i32.sub - local.get $0 - i32.store - local.get $3 - i32.const 8 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $2 - i32.const 4 - i32.add - local.get $0 - i32.store - local.get $2 - i32.const 8 - i32.add - local.get $0 - i32.store - local.get $2 - local.get $3 - i32.add - local.tee $1 - i32.const 12 - i32.sub - local.get $0 - i32.store - local.get $1 - i32.const 8 - i32.sub - local.get $0 - i32.store - local.get $3 - i32.const 24 - i32.le_u - br_if $~lib/util/memory/memset|inlined.0 - local.get $2 - i32.const 12 - i32.add - local.get $0 - i32.store - local.get $2 - i32.const 16 - i32.add - local.get $0 - i32.store - local.get $2 - i32.const 20 - i32.add - local.get $0 - i32.store - local.get $2 - i32.const 24 - i32.add - local.get $0 - i32.store - local.get $2 - local.get $3 - i32.add - local.tee $1 - i32.const 28 - i32.sub - local.get $0 - i32.store - local.get $1 - i32.const 24 - i32.sub - local.get $0 - i32.store - local.get $1 - i32.const 20 - i32.sub - local.get $0 - i32.store - local.get $1 - i32.const 16 - i32.sub - local.get $0 - i32.store - local.get $2 - local.get $2 - i32.const 4 - i32.and - i32.const 24 - i32.add - local.tee $2 - i32.add - local.set $1 - local.get $3 - local.get $2 - i32.sub - local.set $2 - local.get $0 - i64.extend_i32_u - local.get $0 - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - local.set $4 - loop $continue|0 - local.get $2 - i32.const 32 - i32.lt_u - i32.eqz - if - local.get $1 - local.get $4 - i64.store - local.get $1 - i32.const 8 - i32.add - local.get $4 - i64.store - local.get $1 - i32.const 16 - i32.add - local.get $4 - i64.store - local.get $1 - i32.const 24 - i32.add - local.get $4 - i64.store - local.get $2 - i32.const 32 - i32.sub - local.set $2 - local.get $1 - i32.const 32 - i32.add - local.set $1 - br $continue|0 - end - end - end - ) (func $~lib/util/sort/weakHeapSort (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index 911996f6..13843dad 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -91,10 +91,10 @@ (global $~lib/typedarray/Float32Array.BYTES_PER_ELEMENT i32 (i32.const 4)) (global $~lib/typedarray/Float64Array.BYTES_PER_ELEMENT i32 (i32.const 8)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/argc (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $std/typedarray/forEachCallCount (mut i32) (i32.const 0)) @@ -1407,7 +1407,271 @@ i32.const 16 i32.add ) - (func $~lib/rt/pure/increment (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.fill (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i64) + block $~lib/util/memory/memset|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $3 + i32.eqz + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 1 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 2 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 1 + i32.add + local.get $4 + i32.store8 + local.get $5 + i32.const 2 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 2 + i32.sub + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 3 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 6 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 3 + i32.add + local.get $4 + i32.store8 + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $4 + i32.store8 + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + i32.const 0 + local.get $5 + i32.sub + i32.const 3 + i32.and + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $3 + i32.const -4 + i32.and + local.set $3 + i32.const -1 + i32.const 255 + i32.div_u + local.get $4 + i32.const 255 + i32.and + i32.mul + local.set $7 + local.get $5 + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 4 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 8 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 4 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 8 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 12 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 8 + i32.sub + local.get $7 + i32.store + local.get $3 + i32.const 24 + i32.le_u + if + br $~lib/util/memory/memset|inlined.0 + end + local.get $5 + i32.const 12 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 16 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 20 + i32.add + local.get $7 + i32.store + local.get $5 + i32.const 24 + i32.add + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 28 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 24 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 20 + i32.sub + local.get $7 + i32.store + local.get $5 + local.get $3 + i32.add + i32.const 16 + i32.sub + local.get $7 + i32.store + i32.const 24 + local.get $5 + i32.const 4 + i32.and + i32.add + local.set $6 + local.get $5 + local.get $6 + i32.add + local.set $5 + local.get $3 + local.get $6 + i32.sub + local.set $3 + local.get $7 + i64.extend_i32_u + local.get $7 + i64.extend_i32_u + i64.const 32 + i64.shl + i64.or + local.set $8 + block $break|0 + loop $continue|0 + local.get $3 + i32.const 32 + i32.ge_u + i32.eqz + br_if $break|0 + local.get $5 + local.get $8 + i64.store + local.get $5 + i32.const 8 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 16 + i32.add + local.get $8 + i64.store + local.get $5 + i32.const 24 + i32.add + local.get $8 + i64.store + local.get $3 + i32.const 32 + i32.sub + local.set $3 + local.get $5 + i32.const 32 + i32.add + local.set $5 + br $continue|0 + end + unreachable + end + end + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1456,7 +1720,7 @@ unreachable end ) - (func $~lib/rt/pure/__retain (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -1468,7 +1732,7 @@ end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -1497,7 +1761,7 @@ local.get $1 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base local.set $1 @@ -1522,7 +1786,7 @@ i32.add i32.load ) - (func $~lib/util/memory/memcpy (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/memory/memcpy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2550,7 +2814,7 @@ i32.store8 end ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2775,7 +3039,7 @@ end end ) - (func $~lib/rt/tlsf/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/__free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -2812,7 +3076,7 @@ i32.sub call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/pure/growRoots (; 22 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 23 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -2870,7 +3134,7 @@ i32.add global.set $~lib/rt/pure/END ) - (func $~lib/rt/pure/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) global.get $~lib/rt/pure/CUR local.set $1 @@ -2890,7 +3154,7 @@ i32.add global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/pure/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -2994,7 +3258,7 @@ end end ) - (func $~lib/rt/pure/__release (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 global.get $~lib/heap/__heap_base i32.gt_u @@ -3005,7 +3269,7 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3029,6 +3293,10 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 + local.get $3 + i32.const 0 + local.get $1 + call $~lib/memory/memory.fill local.get $0 i32.eqz if @@ -3072,7 +3340,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/typedarray/Int8Array#constructor (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int8Array#constructor (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3088,22 +3356,22 @@ local.set $0 local.get $0 ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=4 local.get $0 i32.load i32.sub ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=8 ) - (func $~lib/typedarray/Int8Array#get:length (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int8Array#get:length (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength ) - (func $~lib/typedarray/Uint8Array#constructor (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3119,11 +3387,11 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint8Array#get:length (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8Array#get:length (; 33 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength ) - (func $~lib/typedarray/Uint8ClampedArray#constructor (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#constructor (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3139,11 +3407,11 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint8ClampedArray#get:length (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#get:length (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength ) - (func $~lib/typedarray/Int16Array#constructor (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int16Array#constructor (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3159,13 +3427,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Int16Array#get:length (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int16Array#get:length (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 1 i32.shr_u ) - (func $~lib/typedarray/Uint16Array#constructor (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint16Array#constructor (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3181,13 +3449,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint16Array#get:length (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint16Array#get:length (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 1 i32.shr_u ) - (func $~lib/typedarray/Int32Array#constructor (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int32Array#constructor (; 40 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3203,13 +3471,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Int32Array#get:length (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int32Array#get:length (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 2 i32.shr_u ) - (func $~lib/typedarray/Uint32Array#constructor (; 41 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint32Array#constructor (; 42 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3225,13 +3493,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint32Array#get:length (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint32Array#get:length (; 43 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 2 i32.shr_u ) - (func $~lib/typedarray/Int64Array#constructor (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int64Array#constructor (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3247,13 +3515,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Int64Array#get:length (; 44 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Int64Array#get:length (; 45 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 3 i32.shr_u ) - (func $~lib/typedarray/Uint64Array#constructor (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint64Array#constructor (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3269,13 +3537,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Uint64Array#get:length (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Uint64Array#get:length (; 47 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 3 i32.shr_u ) - (func $~lib/typedarray/Float32Array#constructor (; 47 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Float32Array#constructor (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3291,13 +3559,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Float32Array#get:length (; 48 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Float32Array#get:length (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 2 i32.shr_u ) - (func $~lib/typedarray/Float64Array#constructor (; 49 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Float64Array#constructor (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 if (result i32) local.get $0 @@ -3313,13 +3581,13 @@ local.set $0 local.get $0 ) - (func $~lib/typedarray/Float64Array#get:length (; 50 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/typedarray/Float64Array#get:length (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 3 i32.shr_u ) - (func $std/typedarray/testInstantiate (; 51 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/typedarray/testInstantiate (; 52 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3849,7 +4117,7 @@ local.get $11 call $~lib/rt/pure/__release ) - (func $~lib/typedarray/Int32Array#__set (; 52 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/Int32Array#__set (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $1 local.get $0 i32.load offset=8 @@ -3873,7 +4141,7 @@ local.get $2 i32.store ) - (func $~lib/typedarray/Int32Array#__get (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Int32Array#__get (; 54 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -3896,7 +4164,7 @@ i32.add i32.load ) - (func $~lib/typedarray/Int32Array#subarray (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Int32Array#subarray (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4017,7 +4285,7 @@ call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/typedarray/Float64Array#__set (; 55 ;) (type $FUNCSIG$viid) (param $0 i32) (param $1 i32) (param $2 f64) + (func $~lib/typedarray/Float64Array#__set (; 56 ;) (type $FUNCSIG$viid) (param $0 i32) (param $1 i32) (param $2 f64) local.get $1 local.get $0 i32.load offset=8 @@ -4041,7 +4309,7 @@ local.get $2 f64.store ) - (func $~lib/typedarray/Float64Array#subarray (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/typedarray/Float64Array#subarray (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4162,7 +4430,7 @@ call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/util/sort/insertionSort (; 57 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 58 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) @@ -4250,270 +4518,6 @@ unreachable end ) - (func $~lib/memory/memory.fill (; 58 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i64) - block $~lib/util/memory/memset|inlined.0 - local.get $0 - local.set $5 - local.get $1 - local.set $4 - local.get $2 - local.set $3 - local.get $3 - i32.eqz - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 1 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 2 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 1 - i32.add - local.get $4 - i32.store8 - local.get $5 - i32.const 2 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 2 - i32.sub - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 3 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 6 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 3 - i32.add - local.get $4 - i32.store8 - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $4 - i32.store8 - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - i32.const 0 - local.get $5 - i32.sub - i32.const 3 - i32.and - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $3 - i32.const -4 - i32.and - local.set $3 - i32.const -1 - i32.const 255 - i32.div_u - local.get $4 - i32.const 255 - i32.and - i32.mul - local.set $7 - local.get $5 - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 4 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 8 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 4 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 8 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 12 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 8 - i32.sub - local.get $7 - i32.store - local.get $3 - i32.const 24 - i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - i32.const 12 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 16 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 20 - i32.add - local.get $7 - i32.store - local.get $5 - i32.const 24 - i32.add - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 28 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 24 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 20 - i32.sub - local.get $7 - i32.store - local.get $5 - local.get $3 - i32.add - i32.const 16 - i32.sub - local.get $7 - i32.store - i32.const 24 - local.get $5 - i32.const 4 - i32.and - i32.add - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 - i32.sub - local.set $3 - local.get $7 - i64.extend_i32_u - local.get $7 - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 - local.get $5 - local.get $8 - i64.store - local.get $5 - i32.const 8 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 16 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 24 - i32.add - local.get $8 - i64.store - local.get $3 - i32.const 32 - i32.sub - local.set $3 - local.get $5 - i32.const 32 - i32.add - local.set $5 - br $continue|0 - end - unreachable - end - end - ) (func $~lib/util/sort/weakHeapSort (; 59 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32)