Merge branch 'runtime' into runtime-encoding

This commit is contained in:
dcode 2019-03-29 15:09:37 +01:00
commit 5b7193bb45
9 changed files with 1025 additions and 1364 deletions

View File

@ -3,9 +3,6 @@ notifications:
email: false
before_install: npm config set progress=false && npm i -g npm@latest --no-audit
install: npm ci --no-audit
cache:
directories:
- node_modules
jobs:
include:
- node_js: lts/*

View File

@ -5,13 +5,17 @@
(type $FUNCSIG$v (func))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(memory $0 0)
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/memory/memory.implemented i32 (i32.const 1))
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(export "memory" (memory $0))
(export "table" (table $0))
(export "memory.implemented" (global $~lib/memory/memory.implemented))
(export "memory.copy" (func $~lib/memory/memory.copy))
(export "memory.init" (func $~lib/memory/memory.init))
(export "memory.drop" (func $~lib/memory/memory.drop))
@ -21,13 +25,23 @@
(export "memory.repeat" (func $~lib/memory/memory.repeat))
(export "memory.compare" (func $~lib/memory/memory.compare))
(start $start)
(func $~lib/memory/memory.init (; 0 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $~lib/memory/memory.init (; 1 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 0
i32.const 16
i32.const 46
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.drop (; 1 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/memory/memory.drop (; 2 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 0
i32.const 16
i32.const 53
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.allocate (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/allocator/arena/__mem_allocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -38,8 +52,6 @@
if
unreachable
end
global.get $~lib/allocator/arena/offset
local.tee $2
local.get $0
i32.const 1
local.tee $1
@ -47,21 +59,23 @@
local.get $1
i32.gt_u
select
global.get $~lib/allocator/arena/offset
local.tee $0
i32.add
i32.const 7
i32.add
i32.const -8
i32.and
local.tee $0
current_memory
local.tee $1
current_memory
local.tee $2
i32.const 16
i32.shl
i32.gt_u
if
local.get $2
local.get $1
local.get $0
local.get $2
i32.sub
i32.const 65535
i32.add
@ -71,7 +85,7 @@
i32.shr_u
local.tee $3
local.tee $4
local.get $1
local.get $2
local.get $4
i32.gt_s
select
@ -88,20 +102,25 @@
end
end
end
local.get $0
local.get $1
global.set $~lib/allocator/arena/offset
local.get $2
local.get $0
)
(func $~lib/memory/memory.free (; 3 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/memory/memory.allocate (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/allocator/arena/__mem_allocate
)
(func $~lib/memory/memory.free (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
nop
)
(func $~lib/memory/memory.reset (; 4 ;) (type $FUNCSIG$v)
(func $~lib/memory/memory.reset (; 6 ;) (type $FUNCSIG$v)
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $~lib/util/memory/memcpy (; 5 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/util/memory/memcpy (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
loop $continue|0
local.get $1
i32.const 3
@ -250,14 +269,8 @@
i32.and
if
local.get $0
local.set $3
local.get $3
block (result i32)
local.get $1
local.set $3
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
end
return
@ -281,52 +294,40 @@
i32.load
local.set $4
local.get $0
local.tee $3
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.set $0
local.get $3
local.tee $0
i32.const 1
i32.add
local.set $3
local.get $0
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
local.tee $0
i32.const 1
i32.add
local.set $5
local.get $0
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
local.get $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
local.get $5
i32.const 1
i32.add
local.set $0
local.set $1
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $5
i32.load8_u
i32.store8
local.get $2
i32.const 3
@ -416,22 +417,12 @@
i32.load
local.set $4
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -439,6 +430,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -639,6 +632,12 @@
i32.and
if
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -646,6 +645,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -655,6 +656,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -662,6 +669,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -671,6 +680,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -678,6 +693,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -687,6 +704,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -694,6 +717,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -703,6 +728,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -710,6 +741,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -719,6 +752,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -726,6 +765,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -735,6 +776,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -742,6 +789,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -751,22 +800,12 @@
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -774,118 +813,8 @@
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
@ -900,6 +829,12 @@
i32.and
if
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -907,6 +842,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -916,6 +853,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -923,6 +866,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -932,6 +877,12 @@
end
i32.store8
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -939,6 +890,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -948,22 +901,12 @@
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -971,54 +914,8 @@
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
@ -1033,6 +930,12 @@
i32.and
if
local.get $0
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -1040,6 +943,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -1049,22 +954,12 @@
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -1072,22 +967,8 @@
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
i32.store8
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
@ -1102,22 +983,12 @@
i32.and
if
local.get $0
local.tee $3
i32.const 1
i32.add
local.set $0
local.get $3
block (result i32)
local.get $1
local.tee $3
i32.const 1
i32.add
local.set $1
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
local.get $0
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -1125,6 +996,8 @@
local.get $3
block (result i32)
local.get $1
i32.const 1
i32.add
local.tee $3
i32.const 1
i32.add
@ -1139,18 +1012,12 @@
i32.and
if
local.get $0
local.set $3
local.get $3
block (result i32)
local.get $1
local.set $3
local.get $3
i32.load8_u
end
local.get $1
i32.load8_u
i32.store8
end
)
(func $~lib/memory/memory.copy (; 6 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.copy (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
block $~lib/util/memory/memmove|inlined.0
local.get $0
@ -1346,7 +1213,7 @@
end
end
)
(func $~lib/memory/memory.repeat (; 7 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $~lib/memory/memory.repeat (; 9 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $2
local.get $3
@ -1371,7 +1238,7 @@
end
end
)
(func $~lib/memory/memory.compare (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/memory/memory.compare (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
local.get $0
local.get $1
@ -1421,13 +1288,13 @@
end
end
)
(func $start (; 9 ;) (type $FUNCSIG$v)
i32.const 8
(func $start (; 11 ;) (type $FUNCSIG$v)
i32.const 48
global.set $~lib/allocator/arena/startOffset
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $null (; 10 ;) (type $FUNCSIG$v)
(func $null (; 12 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -5,14 +5,18 @@
(type $FUNCSIG$v (func))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(memory $0 0)
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/memory/memory.implemented i32 (i32.const 1))
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 8))
(global $~lib/memory/HEAP_BASE i32 (i32.const 44))
(export "memory" (memory $0))
(export "table" (table $0))
(export "memory.implemented" (global $~lib/memory/memory.implemented))
(export "memory.copy" (func $~lib/memory/memory.copy))
(export "memory.init" (func $~lib/memory/memory.init))
(export "memory.drop" (func $~lib/memory/memory.drop))
@ -22,107 +26,121 @@
(export "memory.repeat" (func $~lib/memory/memory.repeat))
(export "memory.compare" (func $~lib/memory/memory.compare))
(start $start)
(func $~lib/memory/memory.init (; 0 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $~lib/memory/memory.init (; 1 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 0
i32.const 16
i32.const 46
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.drop (; 1 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/memory/memory.drop (; 2 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 0
i32.const 16
i32.const 53
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.allocate (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/allocator/arena/__mem_allocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
(local $7 i32)
block $~lib/allocator/arena/__memory_allocate|inlined.0 (result i32)
local.get $0
local.set $1
local.get $1
i32.const 1073741824
i32.gt_u
if
unreachable
end
global.get $~lib/allocator/arena/offset
local.set $2
local.get $2
local.get $1
local.tee $3
i32.const 1
local.tee $4
local.get $3
local.get $0
i32.const 1073741824
i32.gt_u
if
unreachable
end
global.get $~lib/allocator/arena/offset
local.set $1
local.get $1
local.get $0
local.tee $2
i32.const 1
local.tee $3
local.get $2
local.get $3
i32.gt_u
select
i32.add
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
local.set $4
current_memory
local.set $5
local.get $4
local.get $5
i32.const 16
i32.shl
i32.gt_u
if
local.get $4
i32.gt_u
select
local.get $1
i32.sub
i32.const 65535
i32.add
i32.const 7
i32.add
i32.const 7
i32.const 65535
i32.const -1
i32.xor
i32.and
local.set $3
current_memory
local.set $4
local.get $3
local.get $4
i32.const 16
i32.shl
i32.gt_u
i32.shr_u
local.set $2
local.get $5
local.tee $3
local.get $2
local.tee $6
local.get $3
local.get $6
i32.gt_s
select
local.set $3
local.get $3
grow_memory
i32.const 0
i32.lt_s
if
local.get $3
local.get $2
i32.sub
i32.const 65535
i32.add
i32.const 65535
i32.const -1
i32.xor
i32.and
i32.const 16
i32.shr_u
local.set $5
local.get $4
local.tee $6
local.get $5
local.tee $7
local.get $6
local.get $7
i32.gt_s
select
local.set $6
local.get $6
grow_memory
i32.const 0
i32.lt_s
if
local.get $5
grow_memory
i32.const 0
i32.lt_s
if
unreachable
end
unreachable
end
end
local.get $3
global.set $~lib/allocator/arena/offset
local.get $2
end
local.get $4
global.set $~lib/allocator/arena/offset
local.get $1
)
(func $~lib/memory/memory.allocate (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/allocator/arena/__mem_allocate
return
)
(func $~lib/memory/memory.free (; 3 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32)
local.get $0
local.set $1
(func $~lib/allocator/arena/__mem_free (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
nop
)
(func $~lib/memory/memory.reset (; 4 ;) (type $FUNCSIG$v)
(func $~lib/memory/memory.free (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0
call $~lib/allocator/arena/__mem_free
)
(func $~lib/allocator/arena/__mem_reset (; 7 ;) (type $FUNCSIG$v)
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $~lib/util/memory/memcpy (; 5 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.reset (; 8 ;) (type $FUNCSIG$v)
call $~lib/allocator/arena/__mem_reset
)
(func $~lib/util/memory/memcpy (; 9 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1323,7 +1341,7 @@
i32.store8
end
)
(func $~lib/memory/memory.copy (; 6 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.copy (; 10 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1554,7 +1572,7 @@
end
end
)
(func $~lib/memory/memory.repeat (; 7 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $~lib/memory/memory.repeat (; 11 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
(local $5 i32)
i32.const 0
@ -1586,7 +1604,7 @@
end
end
)
(func $~lib/memory/memory.compare (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/memory/memory.compare (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1651,7 +1669,7 @@
end
end
)
(func $start (; 9 ;) (type $FUNCSIG$v)
(func $start (; 13 ;) (type $FUNCSIG$v)
global.get $~lib/memory/HEAP_BASE
i32.const 7
i32.add
@ -1663,6 +1681,6 @@
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $null (; 10 ;) (type $FUNCSIG$v)
(func $null (; 14 ;) (type $FUNCSIG$v)
)
)

View File

@ -335,7 +335,7 @@ function lower_bucket_limit(bucket: usize): u32 {
// Memory allocator interface
@global export function __memory_allocate(request: usize): usize {
@global export function __mem_allocate(request: usize): usize {
var original_bucket: usize, bucket: usize;
/*
@ -469,7 +469,7 @@ function lower_bucket_limit(bucket: usize): u32 {
return 0;
}
@global export function __memory_free(ptr: usize): void {
@global export function __mem_free(ptr: usize): void {
var bucket: usize, i: usize;
/*

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,8 @@
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\"\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00b\00u\00d\00d\00y\00.\00t\00s\00")
(data (i32.const 8) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s\00")
(data (i32.const 48) "\01\00\00\00\"\00\00\00a\00s\00s\00e\00m\00b\00l\00y\00/\00b\00u\00d\00d\00y\00.\00t\00s\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $assembly/buddy/HEADER_SIZE i32 (i32.const 8))
@ -27,9 +28,11 @@
(global $assembly/buddy/NODE_IS_SPLIT_END (mut i32) (i32.const 0))
(global $assembly/buddy/base_ptr (mut i32) (i32.const 0))
(global $assembly/buddy/max_ptr (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 52))
(global $~lib/memory/memory.implemented i32 (i32.const 1))
(global $~lib/memory/HEAP_BASE i32 (i32.const 92))
(export "memory" (memory $0))
(export "table" (table $0))
(export "memory.implemented" (global $~lib/memory/memory.implemented))
(export "memory.copy" (func $~lib/memory/memory.copy))
(export "memory.init" (func $~lib/memory/memory.init))
(export "memory.drop" (func $~lib/memory/memory.drop))
@ -61,9 +64,19 @@
call $start:assembly/buddy
)
(func $~lib/memory/memory.init (; 3 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 0
i32.const 16
i32.const 46
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.drop (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 0
i32.const 16
i32.const 53
i32.const 4
call $~lib/env/abort
unreachable
)
(func $assembly/buddy/update_max_ptr (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
@ -91,7 +104,7 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 56
i32.const 176
i32.const 4
call $~lib/env/abort
@ -121,7 +134,7 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 56
i32.const 96
i32.const 2
call $~lib/env/abort
@ -212,7 +225,7 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 56
i32.const 142
i32.const 2
call $~lib/env/abort
@ -281,7 +294,7 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 56
i32.const 147
i32.const 2
call $~lib/env/abort
@ -418,7 +431,7 @@
call $assembly/buddy/list_remove
local.get $1
)
(func $assembly/buddy/__memory_allocate (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $assembly/buddy/__mem_allocate (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -625,10 +638,10 @@
)
(func $~lib/memory/memory.allocate (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $assembly/buddy/__memory_allocate
call $assembly/buddy/__mem_allocate
return
)
(func $assembly/buddy/__memory_free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $assembly/buddy/__mem_free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -707,9 +720,14 @@
)
(func $~lib/memory/memory.free (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0
call $assembly/buddy/__memory_free
call $assembly/buddy/__mem_free
)
(func $~lib/memory/memory.reset (; 23 ;) (type $FUNCSIG$v)
i32.const 0
i32.const 16
i32.const 77
i32.const 9
call $~lib/env/abort
unreachable
)
(func $~lib/util/memory/memcpy (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)

View File

@ -14,10 +14,15 @@ function test(file) {
}
}).exports;
const RUNTIME_HEADER_SIZE = exports[".capabilities"] & 2 ? 16 : 8;
function getString(ptr) {
var len = new Uint32Array(exports.memory.buffer, ptr)[0];
var str = new Uint16Array(exports.memory.buffer, ptr + 4).subarray(0, len);
return String.fromCharCode.apply(String, str);
if (!ptr) return "null";
var U32 = new Uint32Array(exports.memory.buffer);
var U16 = new Uint16Array(exports.memory.buffer);
var len16 = U32[(ptr - RUNTIME_HEADER_SIZE + 4) >>> 2] >>> 1;
var ptr16 = ptr >>> 1;
return String.fromCharCode.apply(String, U16.subarray(ptr16, ptr16 + len16));
}
require("./runner")(exports, 20, 20000);

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00,\00\00\00~\00l\00i\00b\00/\00a\00l\00l\00o\00c\00a\00t\00o\00r\00/\00t\00l\00s\00f\00.\00t\00s\00")
(data (i32.const 64) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/allocator/tlsf/SL_BITS i32 (i32.const 5))
@ -29,9 +30,11 @@
(global $~lib/allocator/tlsf/Root.HL_END i32 (i32.const 2912))
(global $~lib/allocator/tlsf/Root.SIZE i32 (i32.const 2916))
(global $~lib/allocator/tlsf/ROOT (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 60))
(global $~lib/memory/memory.implemented i32 (i32.const 1))
(global $~lib/memory/HEAP_BASE i32 (i32.const 100))
(export "memory" (memory $0))
(export "table" (table $0))
(export "memory.implemented" (global $~lib/memory/memory.implemented))
(export "memory.copy" (func $~lib/memory/memory.copy))
(export "memory.init" (func $~lib/memory/memory.init))
(export "memory.drop" (func $~lib/memory/memory.drop))
@ -61,9 +64,19 @@
call $start:~lib/allocator/tlsf
)
(func $~lib/memory/memory.init (; 3 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 0
i32.const 72
i32.const 46
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/memory/memory.drop (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 0
i32.const 72
i32.const 53
i32.const 4
call $~lib/env/abort
unreachable
)
(func $~lib/allocator/tlsf/Root#set:tailRef (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
@ -1190,7 +1203,7 @@
global.get $~lib/allocator/tlsf/Block.INFO
i32.add
)
(func $~lib/memory/memory.allocate (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/allocator/tlsf/__mem_allocate (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -1198,261 +1211,257 @@
(local $5 i32)
(local $6 i32)
(local $7 i32)
(local $8 i32)
block $~lib/allocator/tlsf/__memory_allocate|inlined.0 (result i32)
local.get $0
local.set $1
global.get $~lib/allocator/tlsf/ROOT
local.set $2
local.get $2
i32.eqz
if
global.get $~lib/memory/HEAP_BASE
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
local.set $3
current_memory
local.set $4
local.get $3
global.get $~lib/allocator/tlsf/Root.SIZE
i32.add
i32.const 65535
i32.add
i32.const 65535
i32.const -1
i32.xor
i32.and
i32.const 16
i32.shr_u
local.set $5
local.get $5
local.get $4
i32.gt_s
local.tee $6
if (result i32)
local.get $5
local.get $4
i32.sub
grow_memory
i32.const 0
i32.lt_s
else
local.get $6
end
if
unreachable
end
local.get $3
local.tee $2
global.set $~lib/allocator/tlsf/ROOT
local.get $2
i32.const 0
call $~lib/allocator/tlsf/Root#set:tailRef
local.get $2
i32.const 0
i32.store
block $break|0
i32.const 0
local.set $6
loop $repeat|0
local.get $6
global.get $~lib/allocator/tlsf/FL_BITS
i32.lt_u
i32.eqz
br_if $break|0
block
local.get $2
local.get $6
i32.const 0
call $~lib/allocator/tlsf/Root#setSLMap
block $break|1
i32.const 0
local.set $7
loop $repeat|1
local.get $7
global.get $~lib/allocator/tlsf/SL_SIZE
i32.lt_u
i32.eqz
br_if $break|1
local.get $2
local.get $6
local.get $7
i32.const 0
call $~lib/allocator/tlsf/Root#setHead
local.get $7
i32.const 1
i32.add
local.set $7
br $repeat|1
unreachable
end
unreachable
end
end
local.get $6
i32.const 1
i32.add
local.set $6
br $repeat|0
unreachable
end
unreachable
end
local.get $2
local.get $3
global.get $~lib/allocator/tlsf/Root.SIZE
i32.add
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
current_memory
i32.const 16
i32.shl
call $~lib/allocator/tlsf/Root#addMemory
drop
end
local.get $1
global.get $~lib/allocator/tlsf/Block.MAX_SIZE
i32.gt_u
if
unreachable
end
local.get $1
global.get $~lib/allocator/tlsf/ROOT
local.set $1
local.get $1
i32.eqz
if
global.get $~lib/memory/HEAP_BASE
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
local.tee $5
global.get $~lib/allocator/tlsf/Block.MIN_SIZE
local.tee $4
local.get $5
local.get $4
i32.gt_u
select
local.set $1
local.set $2
current_memory
local.set $3
local.get $2
local.get $1
call $~lib/allocator/tlsf/Root#search
local.set $5
local.get $5
i32.eqz
if
current_memory
local.set $4
local.get $1
i32.const 65535
i32.add
i32.const 65535
i32.const -1
i32.xor
i32.and
i32.const 16
i32.shr_u
local.set $3
global.get $~lib/allocator/tlsf/Root.SIZE
i32.add
i32.const 65535
i32.add
i32.const 65535
i32.const -1
i32.xor
i32.and
i32.const 16
i32.shr_u
local.set $4
local.get $4
local.get $3
i32.gt_s
local.tee $5
if (result i32)
local.get $4
local.tee $6
local.get $3
local.tee $7
local.get $6
local.get $7
i32.gt_s
select
local.set $6
local.get $6
i32.sub
grow_memory
i32.const 0
i32.lt_s
else
local.get $5
end
if
unreachable
end
local.get $2
local.tee $1
global.set $~lib/allocator/tlsf/ROOT
local.get $1
i32.const 0
call $~lib/allocator/tlsf/Root#set:tailRef
local.get $1
i32.const 0
i32.store
block $break|0
i32.const 0
local.set $5
loop $repeat|0
local.get $5
global.get $~lib/allocator/tlsf/FL_BITS
i32.lt_u
i32.eqz
br_if $break|0
block
local.get $1
local.get $5
i32.const 0
call $~lib/allocator/tlsf/Root#setSLMap
block $break|1
i32.const 0
local.set $6
loop $repeat|1
local.get $6
global.get $~lib/allocator/tlsf/SL_SIZE
i32.lt_u
i32.eqz
br_if $break|1
local.get $1
local.get $5
local.get $6
i32.const 0
call $~lib/allocator/tlsf/Root#setHead
local.get $6
i32.const 1
i32.add
local.set $6
br $repeat|1
unreachable
end
unreachable
end
end
local.get $5
i32.const 1
i32.add
local.set $5
br $repeat|0
unreachable
end
unreachable
end
local.get $1
local.get $2
global.get $~lib/allocator/tlsf/Root.SIZE
i32.add
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
current_memory
i32.const 16
i32.shl
call $~lib/allocator/tlsf/Root#addMemory
drop
end
local.get $0
global.get $~lib/allocator/tlsf/Block.MAX_SIZE
i32.gt_u
if
unreachable
end
local.get $0
i32.const 7
i32.add
i32.const 7
i32.const -1
i32.xor
i32.and
local.tee $4
global.get $~lib/allocator/tlsf/Block.MIN_SIZE
local.tee $3
local.get $4
local.get $3
i32.gt_u
select
local.set $0
local.get $1
local.get $0
call $~lib/allocator/tlsf/Root#search
local.set $7
local.get $7
i32.eqz
if
current_memory
local.set $4
local.get $0
i32.const 65535
i32.add
i32.const 65535
i32.const -1
i32.xor
i32.and
i32.const 16
i32.shr_u
local.set $3
local.get $4
local.tee $2
local.get $3
local.tee $5
local.get $2
local.get $5
i32.gt_s
select
local.set $2
local.get $2
grow_memory
i32.const 0
i32.lt_s
if
local.get $3
grow_memory
i32.const 0
i32.lt_s
if
local.get $3
grow_memory
i32.const 0
i32.lt_s
if
unreachable
end
end
current_memory
local.set $7
local.get $2
local.get $4
i32.const 16
i32.shl
local.get $7
i32.const 16
i32.shl
call $~lib/allocator/tlsf/Root#addMemory
drop
local.get $2
local.get $1
call $~lib/allocator/tlsf/Root#search
local.tee $8
i32.eqz
if (result i32)
i32.const 0
i32.const 16
i32.const 472
i32.const 12
call $~lib/env/abort
unreachable
else
local.get $8
end
local.set $5
end
local.get $5
i32.load
global.get $~lib/allocator/tlsf/TAGS
i32.const -1
i32.xor
i32.and
current_memory
local.set $5
local.get $1
i32.ge_u
local.get $4
i32.const 16
i32.shl
local.get $5
i32.const 16
i32.shl
call $~lib/allocator/tlsf/Root#addMemory
drop
local.get $1
local.get $0
call $~lib/allocator/tlsf/Root#search
local.tee $6
i32.eqz
if
if (result i32)
i32.const 0
i32.const 16
i32.const 475
i32.const 2
i32.const 472
i32.const 12
call $~lib/env/abort
unreachable
else
local.get $6
end
local.get $2
local.get $5
local.get $1
call $~lib/allocator/tlsf/Root#use
local.set $7
end
local.get $7
i32.load
global.get $~lib/allocator/tlsf/TAGS
i32.const -1
i32.xor
i32.and
local.get $0
i32.ge_u
i32.eqz
if
i32.const 0
i32.const 16
i32.const 475
i32.const 2
call $~lib/env/abort
unreachable
end
local.get $1
local.get $7
local.get $0
call $~lib/allocator/tlsf/Root#use
)
(func $~lib/memory/memory.allocate (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/allocator/tlsf/__mem_allocate
return
)
(func $~lib/memory/memory.free (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/allocator/tlsf/__mem_free (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
local.get $0
local.set $1
local.get $1
if
global.get $~lib/allocator/tlsf/ROOT
local.set $2
local.get $2
local.set $1
local.get $1
if
local.get $1
local.get $0
global.get $~lib/allocator/tlsf/Block.INFO
i32.sub
local.set $2
local.get $2
i32.load
local.set $3
local.get $3
i32.load
local.set $4
local.get $4
global.get $~lib/allocator/tlsf/FREE
i32.and
i32.eqz
@ -1465,23 +1474,32 @@
call $~lib/env/abort
unreachable
end
local.get $2
local.get $3
local.get $4
global.get $~lib/allocator/tlsf/FREE
i32.or
i32.store
local.get $2
local.get $1
local.get $0
global.get $~lib/allocator/tlsf/Block.INFO
i32.sub
call $~lib/allocator/tlsf/Root#insert
end
end
)
(func $~lib/memory/memory.reset (; 24 ;) (type $FUNCSIG$v)
(func $~lib/memory/memory.free (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0
call $~lib/allocator/tlsf/__mem_free
)
(func $~lib/memory/memory.reset (; 26 ;) (type $FUNCSIG$v)
i32.const 0
i32.const 72
i32.const 77
i32.const 9
call $~lib/env/abort
unreachable
)
(func $~lib/util/memory/memcpy (; 25 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/util/memory/memcpy (; 27 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -2682,7 +2700,7 @@
i32.store8
end
)
(func $~lib/memory/memory.copy (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.copy (; 28 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -2913,7 +2931,7 @@
end
end
)
(func $~lib/memory/memory.repeat (; 27 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $~lib/memory/memory.repeat (; 29 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
(local $5 i32)
i32.const 0
@ -2945,7 +2963,7 @@
end
end
)
(func $~lib/memory/memory.compare (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/memory/memory.compare (; 30 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -3010,9 +3028,9 @@
end
end
)
(func $start (; 29 ;) (type $FUNCSIG$v)
(func $start (; 31 ;) (type $FUNCSIG$v)
call $start:assembly/index
)
(func $null (; 30 ;) (type $FUNCSIG$v)
(func $null (; 32 ;) (type $FUNCSIG$v)
)
)