diff --git a/tests/allocators/arena/optimized.wat b/tests/allocators/arena/optimized.wat index b4b341e5..96023e27 100644 --- a/tests/allocators/arena/optimized.wat +++ b/tests/allocators/arena/optimized.wat @@ -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 ) ) diff --git a/tests/allocators/arena/untouched.wat b/tests/allocators/arena/untouched.wat index 47f9113f..bf627fb6 100644 --- a/tests/allocators/arena/untouched.wat +++ b/tests/allocators/arena/untouched.wat @@ -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) ) ) diff --git a/tests/allocators/buddy/assembly/buddy.ts b/tests/allocators/buddy/assembly/buddy.ts index 88c1a104..52cff567 100644 --- a/tests/allocators/buddy/assembly/buddy.ts +++ b/tests/allocators/buddy/assembly/buddy.ts @@ -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; /* diff --git a/tests/allocators/buddy/optimized.wat b/tests/allocators/buddy/optimized.wat index 4624ce82..a0be6bb9 100644 --- a/tests/allocators/buddy/optimized.wat +++ b/tests/allocators/buddy/optimized.wat @@ -7,7 +7,9 @@ (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (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 $assembly/buddy/BUCKETS_START (mut i32) (i32.const 0)) @@ -17,8 +19,10 @@ (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/memory.implemented i32 (i32.const 1)) (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)) @@ -28,13 +32,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 $assembly/buddy/update_max_ptr (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/update_max_ptr (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 global.get $assembly/buddy/max_ptr i32.gt_u @@ -63,14 +77,14 @@ end i32.const 1 ) - (func $assembly/buddy/buckets$get (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/buckets$get (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) global.get $assembly/buddy/BUCKETS_START local.get $0 i32.const 3 i32.shl i32.add ) - (func $assembly/buddy/list_init (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $assembly/buddy/list_init (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.store @@ -78,7 +92,7 @@ local.get $0 i32.store offset=4 ) - (func $assembly/buddy/list_push (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $assembly/buddy/list_push (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 local.get $0 @@ -95,7 +109,7 @@ local.get $1 i32.store ) - (func $assembly/buddy/bucket_for_request (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/bucket_for_request (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) i32.const 26 @@ -120,7 +134,7 @@ end local.get $1 ) - (func $assembly/buddy/node_for_ptr (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $assembly/buddy/node_for_ptr (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) i32.const 1 local.get $1 i32.shl @@ -135,13 +149,13 @@ i32.const 1 i32.sub ) - (func $assembly/buddy/node_is_split$get (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/node_is_split$get (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) global.get $assembly/buddy/NODE_IS_SPLIT_START local.get $0 i32.add i32.load8_u ) - (func $assembly/buddy/parent_is_split (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/parent_is_split (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1 i32.sub @@ -160,7 +174,7 @@ i32.const 1 i32.eq ) - (func $assembly/buddy/list_remove (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $assembly/buddy/list_remove (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load @@ -173,7 +187,7 @@ local.get $1 i32.store ) - (func $assembly/buddy/ptr_for_node (; 11 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $assembly/buddy/ptr_for_node (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) global.get $assembly/buddy/base_ptr local.get $0 i32.const 1 @@ -188,7 +202,7 @@ i32.shl i32.add ) - (func $assembly/buddy/flip_parent_is_split (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $assembly/buddy/flip_parent_is_split (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -216,7 +230,7 @@ local.get $0 i32.store8 ) - (func $assembly/buddy/lower_bucket_limit (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/lower_bucket_limit (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) loop $continue|0 @@ -227,7 +241,7 @@ global.get $assembly/buddy/base_ptr global.get $assembly/buddy/bucket_limit call $assembly/buddy/node_for_ptr - local.tee $2 + local.tee $1 call $assembly/buddy/parent_is_split i32.eqz if @@ -249,12 +263,12 @@ call $assembly/buddy/list_push br $continue|0 end - local.get $2 + local.get $1 i32.const 1 i32.add global.get $assembly/buddy/bucket_limit call $assembly/buddy/ptr_for_node - local.tee $1 + local.tee $2 i32.const 8 i32.add call $assembly/buddy/update_max_ptr @@ -265,26 +279,26 @@ end global.get $assembly/buddy/bucket_limit call $assembly/buddy/buckets$get - local.get $1 + local.get $2 call $assembly/buddy/list_push block (result i32) global.get $assembly/buddy/bucket_limit i32.const 1 i32.sub - local.tee $1 + local.tee $2 global.set $assembly/buddy/bucket_limit - local.get $1 + local.get $2 end call $assembly/buddy/buckets$get call $assembly/buddy/list_init - local.get $2 + local.get $1 i32.const 1 i32.sub i32.const 2 i32.div_u - local.tee $2 + local.tee $1 if - local.get $2 + local.get $1 call $assembly/buddy/flip_parent_is_split end br $continue|0 @@ -292,7 +306,7 @@ end i32.const 1 ) - (func $assembly/buddy/list_pop (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/list_pop (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 local.get $0 i32.load @@ -306,7 +320,7 @@ call $assembly/buddy/list_remove local.get $0 ) - (func $assembly/buddy/__memory_allocate (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $assembly/buddy/__mem_allocate (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -479,11 +493,11 @@ end i32.const 0 ) - (func $~lib/memory/memory.allocate (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - call $assembly/buddy/__memory_allocate + call $assembly/buddy/__mem_allocate ) - (func $assembly/buddy/__memory_free (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $assembly/buddy/__mem_free (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -494,74 +508,80 @@ local.get $0 i32.const 8 i32.sub - local.tee $0 + local.tee $1 i32.load i32.const 8 i32.add call $assembly/buddy/bucket_for_request - local.set $1 - local.get $0 - local.get $1 - call $assembly/buddy/node_for_ptr local.set $0 + local.get $1 + local.get $0 + call $assembly/buddy/node_for_ptr + local.set $1 loop $continue|0 - local.get $0 + local.get $1 if block $break|0 - local.get $0 + local.get $1 call $assembly/buddy/flip_parent_is_split - local.get $0 + local.get $1 call $assembly/buddy/parent_is_split local.tee $2 if (result i32) local.get $2 else - local.get $1 + local.get $0 global.get $assembly/buddy/bucket_limit i32.eq end br_if $break|0 - local.get $0 + local.get $1 i32.const 1 i32.sub i32.const 1 i32.xor i32.const 1 i32.add - local.get $1 + local.get $0 call $assembly/buddy/ptr_for_node call $assembly/buddy/list_remove - local.get $0 + local.get $1 i32.const 1 i32.sub i32.const 2 i32.div_u - local.set $0 - local.get $1 + local.set $1 + local.get $0 i32.const 1 i32.sub - local.set $1 + local.set $0 br $continue|0 end end end - local.get $1 - call $assembly/buddy/buckets$get local.get $0 + call $assembly/buddy/buckets$get local.get $1 + local.get $0 call $assembly/buddy/ptr_for_node call $assembly/buddy/list_push ) - (func $~lib/memory/memory.free (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.free (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - call $assembly/buddy/__memory_free + call $assembly/buddy/__mem_free ) - (func $~lib/memory/memory.reset (; 19 ;) (type $FUNCSIG$v) + (func $~lib/memory/memory.reset (; 20 ;) (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 (; 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) loop $continue|0 local.get $1 i32.const 3 @@ -710,14 +730,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 @@ -741,52 +755,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 @@ -876,22 +878,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 @@ -899,6 +891,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1099,6 +1093,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 @@ -1106,6 +1106,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1115,6 +1117,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 @@ -1122,6 +1130,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1131,6 +1141,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 @@ -1138,6 +1154,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1147,6 +1165,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 @@ -1154,6 +1178,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1163,6 +1189,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 @@ -1170,6 +1202,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1179,6 +1213,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 @@ -1186,6 +1226,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1195,6 +1237,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 @@ -1202,6 +1250,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1211,22 +1261,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 @@ -1234,118 +1274,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 @@ -1360,6 +1290,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 @@ -1367,6 +1303,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1376,6 +1314,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 @@ -1383,6 +1327,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1392,6 +1338,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 @@ -1399,6 +1351,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1408,22 +1362,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 @@ -1431,54 +1375,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 @@ -1493,6 +1391,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 @@ -1500,6 +1404,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1509,22 +1415,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 @@ -1532,22 +1428,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 @@ -1562,22 +1444,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 @@ -1585,6 +1457,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1599,18 +1473,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 (; 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) block $~lib/util/memory/memmove|inlined.0 local.get $0 @@ -1806,7 +1674,7 @@ end end ) - (func $~lib/memory/memory.repeat (; 22 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/memory/memory.repeat (; 23 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) local.get $2 local.get $3 @@ -1831,7 +1699,7 @@ end end ) - (func $~lib/memory/memory.compare (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/memory/memory.compare (; 24 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 local.get $1 @@ -1881,8 +1749,8 @@ end end ) - (func $start (; 24 ;) (type $FUNCSIG$v) - i32.const 8 + (func $start (; 25 ;) (type $FUNCSIG$v) + i32.const 44 global.set $assembly/buddy/BUCKETS_START global.get $assembly/buddy/BUCKETS_START i32.const 216 @@ -1895,7 +1763,7 @@ i32.add global.set $assembly/buddy/NODE_IS_SPLIT_END ) - (func $null (; 25 ;) (type $FUNCSIG$v) + (func $null (; 26 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/allocators/buddy/untouched.wat b/tests/allocators/buddy/untouched.wat index 5f8c771f..1d9e0dff 100644 --- a/tests/allocators/buddy/untouched.wat +++ b/tests/allocators/buddy/untouched.wat @@ -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) diff --git a/tests/allocators/index.js b/tests/allocators/index.js index f87bd13e..754ec8ff 100644 --- a/tests/allocators/index.js +++ b/tests/allocators/index.js @@ -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); diff --git a/tests/allocators/tlsf/optimized.wat b/tests/allocators/tlsf/optimized.wat index edc38303..f37b5d8d 100644 --- a/tests/allocators/tlsf/optimized.wat +++ b/tests/allocators/tlsf/optimized.wat @@ -7,12 +7,16 @@ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$v (func)) - (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/allocator/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/memory.implemented i32 (i32.const 1)) (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,18 +25,28 @@ (export "memory.reset" (func $~lib/memory/memory.reset)) (export "memory.repeat" (func $~lib/memory/memory.repeat)) (export "memory.compare" (func $~lib/memory/memory.compare)) - (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/allocator/tlsf/Root#set:tailRef (; 2 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/allocator/tlsf/Root#set:tailRef (; 3 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 2912 local.get $0 i32.store ) - (func $~lib/allocator/tlsf/Root#setSLMap (; 3 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/allocator/tlsf/Root#setSLMap (; 4 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 local.get $1 i32.const 2 @@ -41,7 +55,7 @@ local.get $2 i32.store offset=4 ) - (func $~lib/allocator/tlsf/Root#setHead (; 4 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/allocator/tlsf/Root#setHead (; 5 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) local.get $0 local.get $1 i32.const 5 @@ -54,7 +68,7 @@ local.get $3 i32.store offset=96 ) - (func $~lib/allocator/tlsf/Block#get:right (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/allocator/tlsf/Block#get:right (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 8 i32.add @@ -64,13 +78,13 @@ i32.and i32.add ) - (func $~lib/allocator/tlsf/fls (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/allocator/tlsf/fls (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 31 local.get $0 i32.clz i32.sub ) - (func $~lib/allocator/tlsf/Root#getHead (; 7 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/allocator/tlsf/Root#getHead (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 local.get $1 i32.const 5 @@ -82,7 +96,7 @@ i32.add i32.load offset=96 ) - (func $~lib/allocator/tlsf/Root#getSLMap (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/allocator/tlsf/Root#getSLMap (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.const 2 @@ -90,7 +104,7 @@ i32.add i32.load offset=4 ) - (func $~lib/allocator/tlsf/Root#remove (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/allocator/tlsf/Root#remove (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -186,7 +200,7 @@ end end ) - (func $~lib/allocator/tlsf/Root#insert (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/allocator/tlsf/Root#insert (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -196,18 +210,18 @@ local.set $2 local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if local.get $0 - local.get $4 + local.get $3 call $~lib/allocator/tlsf/Root#remove local.get $1 local.get $2 - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 8 @@ -217,9 +231,9 @@ i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end local.get $2 i32.const 2 @@ -231,29 +245,27 @@ i32.load local.tee $1 i32.load - local.set $3 + local.set $5 local.get $0 local.get $1 call $~lib/allocator/tlsf/Root#remove local.get $1 - local.get $3 + local.get $5 local.get $2 i32.const -4 i32.and i32.const 8 i32.add i32.add - local.tee $3 + local.tee $2 i32.store - local.get $3 - local.set $2 end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $4 + local.get $3 i32.const 4 i32.sub local.get $1 @@ -262,32 +274,32 @@ local.get $2 i32.const -4 i32.and - local.tee $3 + local.tee $2 i32.const 256 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 8 i32.div_u - local.set $3 + local.set $2 i32.const 0 else - local.get $3 - local.get $3 + local.get $2 + local.get $2 call $~lib/allocator/tlsf/fls - local.tee $2 + local.tee $3 i32.const 5 i32.sub i32.shr_u i32.const 32 i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $3 i32.const 7 i32.sub end - local.tee $2 - local.get $3 + local.tee $3 + local.get $2 call $~lib/allocator/tlsf/Root#getHead local.set $4 local.get $1 @@ -303,30 +315,30 @@ i32.store offset=4 end local.get $0 - local.get $2 local.get $3 + local.get $2 local.get $1 call $~lib/allocator/tlsf/Root#setHead local.get $0 local.get $0 i32.load i32.const 1 - local.get $2 + local.get $3 i32.shl i32.or i32.store local.get $0 - local.get $2 + local.get $3 local.get $0 - local.get $2 + local.get $3 call $~lib/allocator/tlsf/Root#getSLMap i32.const 1 - local.get $3 + local.get $2 i32.shl i32.or call $~lib/allocator/tlsf/Root#setSLMap ) - (func $~lib/allocator/tlsf/Root#addMemory (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/allocator/tlsf/Root#addMemory (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 block (result i32) @@ -389,7 +401,7 @@ local.get $1 call $~lib/allocator/tlsf/Root#insert ) - (func $~lib/allocator/tlsf/Root#search (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/allocator/tlsf/Root#search (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 i32.const 256 @@ -457,12 +469,10 @@ local.get $0 local.get $1 i32.ctz - local.tee $2 - call $~lib/allocator/tlsf/Root#getSLMap - local.set $1 + local.tee $1 local.get $0 - local.get $2 local.get $1 + call $~lib/allocator/tlsf/Root#getSLMap i32.ctz call $~lib/allocator/tlsf/Root#getHead else @@ -470,7 +480,7 @@ end end ) - (func $~lib/allocator/tlsf/Root#use (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/allocator/tlsf/Root#use (; 14 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $1 @@ -518,8 +528,8 @@ i32.store local.get $1 call $~lib/allocator/tlsf/Block#get:right - local.tee $2 - local.get $2 + local.tee $0 + local.get $0 i32.load i32.const -3 i32.and @@ -529,50 +539,48 @@ i32.const 8 i32.add ) - (func $~lib/memory/memory.allocate (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/allocator/tlsf/__mem_allocate (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - local.get $0 - local.set $3 global.get $~lib/allocator/tlsf/ROOT - local.tee $0 + local.tee $1 i32.eqz if - i32.const 8 - local.tee $5 + i32.const 48 + local.tee $4 i32.const 68451 i32.add i32.const -65536 i32.and i32.const 16 i32.shr_u - local.tee $1 - current_memory - local.tee $4 - i32.gt_s local.tee $2 + current_memory + local.tee $3 + i32.gt_s + local.tee $1 if (result i32) - local.get $1 - local.get $4 + local.get $2 + local.get $3 i32.sub grow_memory i32.const 0 i32.lt_s else - local.get $2 + local.get $1 end if unreachable end - local.get $5 - local.tee $0 + local.get $4 + local.tee $1 global.set $~lib/allocator/tlsf/ROOT i32.const 0 call $~lib/allocator/tlsf/Root#set:tailRef - local.get $0 + local.get $1 i32.const 0 i32.store i32.const 0 @@ -583,27 +591,27 @@ i32.const 22 i32.ge_u br_if $break|0 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $~lib/allocator/tlsf/Root#setSLMap i32.const 0 - local.set $1 + local.set $3 loop $repeat|1 block $break|1 - local.get $1 + local.get $3 i32.const 32 i32.ge_u br_if $break|1 - local.get $0 - local.get $2 local.get $1 + local.get $2 + local.get $3 i32.const 0 call $~lib/allocator/tlsf/Root#setHead - local.get $1 + local.get $3 i32.const 1 i32.add - local.set $1 + local.set $3 br $repeat|1 end end @@ -614,8 +622,8 @@ br $repeat|0 end end - local.get $0 - local.get $5 + local.get $1 + local.get $4 i32.const 2923 i32.add i32.const -8 @@ -625,53 +633,53 @@ i32.shl call $~lib/allocator/tlsf/Root#addMemory end - local.get $3 + local.get $0 i32.const 1073741824 i32.gt_u if unreachable end + local.get $1 + local.get $1 local.get $0 - local.get $0 - local.get $3 i32.const 7 i32.add i32.const -8 i32.and - local.tee $1 - i32.const 16 local.tee $4 - local.get $1 + i32.const 16 + local.tee $0 local.get $4 + local.get $0 i32.gt_u select - local.tee $3 + local.tee $5 call $~lib/allocator/tlsf/Root#search - local.tee $1 + local.tee $0 if (result i32) - local.get $1 + local.get $0 else current_memory - local.tee $4 local.tee $2 - local.get $3 + local.tee $3 + local.get $5 i32.const 65535 i32.add i32.const -65536 i32.and i32.const 16 i32.shr_u - local.tee $5 - local.tee $1 - local.get $2 - local.get $1 + local.tee $4 + local.tee $0 + local.get $3 + local.get $0 i32.gt_s select grow_memory i32.const 0 i32.lt_s if - local.get $5 + local.get $4 grow_memory i32.const 0 i32.lt_s @@ -679,22 +687,26 @@ unreachable end end - local.get $0 - local.get $4 + local.get $1 + local.get $2 i32.const 16 i32.shl current_memory i32.const 16 i32.shl call $~lib/allocator/tlsf/Root#addMemory - local.get $0 - local.get $3 + local.get $1 + local.get $5 call $~lib/allocator/tlsf/Root#search end - local.get $3 + local.get $5 call $~lib/allocator/tlsf/Root#use ) - (func $~lib/memory/memory.free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/memory/memory.allocate (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + call $~lib/allocator/tlsf/__mem_allocate + ) + (func $~lib/allocator/tlsf/__mem_free (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -719,12 +731,22 @@ end end ) - (func $~lib/memory/memory.reset (; 16 ;) (type $FUNCSIG$v) + (func $~lib/memory/memory.free (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + call $~lib/allocator/tlsf/__mem_free + ) + (func $~lib/memory/memory.reset (; 19 ;) (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 (; 17 ;) (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) loop $continue|0 local.get $1 i32.const 3 @@ -873,14 +895,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 @@ -904,52 +920,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 @@ -1039,22 +1043,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 @@ -1062,6 +1056,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1262,6 +1258,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 @@ -1269,6 +1271,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1278,6 +1282,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 @@ -1285,6 +1295,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1294,6 +1306,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 @@ -1301,6 +1319,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1310,6 +1330,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 @@ -1317,6 +1343,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1326,6 +1354,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 @@ -1333,6 +1367,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1342,6 +1378,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 @@ -1349,6 +1391,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1358,6 +1402,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 @@ -1365,6 +1415,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1374,22 +1426,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 @@ -1397,118 +1439,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 @@ -1523,6 +1455,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 @@ -1530,6 +1468,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1539,6 +1479,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 @@ -1546,6 +1492,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1555,6 +1503,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 @@ -1562,6 +1516,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1571,22 +1527,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 @@ -1594,54 +1540,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 @@ -1656,6 +1556,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 @@ -1663,6 +1569,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1672,22 +1580,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 @@ -1695,22 +1593,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 @@ -1725,22 +1609,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 @@ -1748,6 +1622,8 @@ local.get $3 block (result i32) local.get $1 + i32.const 1 + i32.add local.tee $3 i32.const 1 i32.add @@ -1762,18 +1638,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 (; 18 ;) (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) block $~lib/util/memory/memmove|inlined.0 local.get $0 @@ -1969,7 +1839,7 @@ end end ) - (func $~lib/memory/memory.repeat (; 19 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/memory/memory.repeat (; 22 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) local.get $2 local.get $3 @@ -1994,7 +1864,7 @@ end end ) - (func $~lib/memory/memory.compare (; 20 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/memory/memory.compare (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 local.get $1 @@ -2044,7 +1914,7 @@ end end ) - (func $null (; 21 ;) (type $FUNCSIG$v) + (func $null (; 24 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/allocators/tlsf/untouched.wat b/tests/allocators/tlsf/untouched.wat index eefda937..59c8b75b 100644 --- a/tests/allocators/tlsf/untouched.wat +++ b/tests/allocators/tlsf/untouched.wat @@ -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) ) )