Release on shrink/zero on grow in std/array, managed copyWithin

This commit is contained in:
dcode
2019-06-05 06:28:07 +02:00
parent b7ca4baf42
commit 3229b71d91
17 changed files with 208 additions and 326 deletions

View File

@ -2367,7 +2367,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -2521,7 +2521,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -2858,7 +2858,7 @@
if
i32.const 872
i32.const 488
i32.const 273
i32.const 287
i32.const 20
call $~lib/builtins/abort
unreachable
@ -2905,7 +2905,7 @@
call $~lib/rt/pure/__release
i32.const 272
i32.const 488
i32.const 215
i32.const 217
i32.const 59
call $~lib/builtins/abort
unreachable
@ -2942,9 +2942,6 @@
(func $~lib/array/Array<i32>#copyWithin (; 50 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load offset=4
local.set $5
local.get $3
local.get $0
i32.load offset=12
@ -2954,6 +2951,9 @@
i32.lt_s
select
local.set $3
local.get $0
i32.load offset=4
local.tee $5
local.get $1
i32.const 0
i32.lt_s
@ -2975,7 +2975,10 @@
i32.lt_s
select
end
local.set $1
local.tee $1
i32.const 2
i32.shl
i32.add
local.get $2
i32.const 0
i32.lt_s
@ -2997,7 +3000,11 @@
i32.lt_s
select
end
local.set $2
local.tee $2
i32.const 2
i32.shl
local.get $5
i32.add
local.get $3
i32.const 0
i32.lt_s
@ -3021,84 +3028,18 @@
end
local.get $2
i32.sub
local.tee $3
local.tee $2
local.get $4
local.get $1
i32.sub
local.tee $4
local.get $3
local.get $4
i32.lt_s
select
local.set $3
local.get $1
local.get $2
local.get $3
i32.add
i32.lt_s
i32.const 0
local.tee $1
local.get $2
local.get $1
i32.lt_s
select
if
local.get $3
i32.const 1
i32.sub
local.tee $4
local.get $2
i32.add
local.set $2
local.get $1
local.get $4
i32.add
local.set $1
loop $continue|0
local.get $3
if
local.get $1
i32.const 2
i32.shl
local.get $5
i32.add
local.get $2
i32.const 2
i32.shl
local.get $5
i32.add
i32.load
i32.store
local.get $2
i32.const 1
i32.sub
local.set $2
local.get $1
i32.const 1
i32.sub
local.set $1
local.get $3
i32.const 1
i32.sub
local.set $3
br $continue|0
end
end
else
local.get $1
i32.const 2
i32.shl
local.get $5
i32.add
local.get $2
i32.const 2
i32.shl
local.get $5
i32.add
local.get $3
i32.const 2
i32.shl
call $~lib/memory/memory.copy
end
i32.const 2
i32.shl
call $~lib/memory/memory.copy
local.get $0
call $~lib/rt/pure/__retain
)
@ -3144,7 +3085,7 @@
if
i32.const 872
i32.const 488
i32.const 334
i32.const 348
i32.const 20
call $~lib/builtins/abort
unreachable
@ -3985,7 +3926,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -5397,7 +5338,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -5911,7 +5852,7 @@
if
i32.const 272
i32.const 488
i32.const 47
i32.const 45
i32.const 61
call $~lib/builtins/abort
unreachable
@ -6187,7 +6128,7 @@
call $~lib/rt/pure/__release
i32.const 4040
i32.const 488
i32.const 114
i32.const 121
i32.const 38
call $~lib/builtins/abort
unreachable
@ -6443,7 +6384,7 @@
if
i32.const 4040
i32.const 488
i32.const 99
i32.const 106
i32.const 45
call $~lib/builtins/abort
unreachable
@ -6457,7 +6398,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -6636,7 +6577,7 @@
if
i32.const 176
i32.const 488
i32.const 102
i32.const 109
i32.const 61
call $~lib/builtins/abort
unreachable
@ -17031,7 +16972,9 @@
i32.load offset=4
local.tee $2
local.get $0
i32.load offset=8
i32.load offset=12
i32.const 2
i32.shl
i32.add
local.set $0
loop $continue|0