diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 79091199fd..70c5ae7442 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -83,7 +83,7 @@ jobs: env: ASC_FEATURES: threads,reference-types,gc,exception-handling run: | - npm run test:compiler features/threads features/reference-types features/gc features/exception-handling + npm run test:compiler features/threads features/reference-types features/gc features/exception-handling bindings/esm bindings/raw runtimes: name: "Runtimes" runs-on: ubuntu-latest diff --git a/tests/compiler/bindings/esm.debug.wat b/tests/compiler/bindings/esm.debug.wat index fc771caa73..095fc5393f 100644 --- a/tests/compiler/bindings/esm.debug.wat +++ b/tests/compiler/bindings/esm.debug.wat @@ -1147,7 +1147,7 @@ if i32.const 0 i32.const 672 - i32.const 378 + i32.const 382 i32.const 14 call $~lib/builtins/abort unreachable @@ -1193,7 +1193,7 @@ if i32.const 0 i32.const 672 - i32.const 385 + i32.const 389 i32.const 16 call $~lib/builtins/abort unreachable @@ -1226,7 +1226,7 @@ if i32.const 0 i32.const 672 - i32.const 398 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1470,7 +1470,7 @@ if i32.const 0 i32.const 672 - i32.const 560 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable @@ -1799,7 +1799,7 @@ if i32.const 336 i32.const 672 - i32.const 459 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable @@ -1808,6 +1808,26 @@ call $~lib/rt/tlsf/computeSize return ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) (local $fl i32) (local $sl i32) @@ -1837,24 +1857,13 @@ local.set $sl else local.get $size - i32.const 536870910 - i32.lt_u - if (result i32) - local.get $size - i32.const 1 - i32.const 27 - local.get $size - i32.clz - i32.sub - i32.shl - i32.add - i32.const 1 - i32.sub - else - local.get $size - end + call $~lib/rt/tlsf/roundSize local.set $requestSize - i32.const 31 + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub local.get $requestSize i32.clz i32.sub @@ -1892,7 +1901,7 @@ if i32.const 0 i32.const 672 - i32.const 330 + i32.const 334 i32.const 14 call $~lib/builtins/abort unreachable @@ -1963,7 +1972,7 @@ if i32.const 0 i32.const 672 - i32.const 343 + i32.const 347 i32.const 18 call $~lib/builtins/abort unreachable @@ -2026,6 +2035,14 @@ (local $pagesAfter i32) i32.const 0 drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end memory.size $0 local.set $pagesBefore local.get $size @@ -2047,22 +2064,6 @@ i32.add local.set $size local.get $size - i32.const 536870910 - i32.lt_u - if - local.get $size - i32.const 1 - i32.const 27 - local.get $size - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - i32.add - local.set $size - end - local.get $size i32.const 65535 i32.add i32.const 65535 @@ -2128,7 +2129,7 @@ if i32.const 0 i32.const 672 - i32.const 357 + i32.const 361 i32.const 14 call $~lib/builtins/abort unreachable @@ -2243,7 +2244,7 @@ if i32.const 0 i32.const 672 - i32.const 497 + i32.const 499 i32.const 16 call $~lib/builtins/abort unreachable @@ -2263,7 +2264,7 @@ if i32.const 0 i32.const 672 - i32.const 499 + i32.const 501 i32.const 14 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/esm.release.wat b/tests/compiler/bindings/esm.release.wat index 7ea107e5e0..43a90778b0 100644 --- a/tests/compiler/bindings/esm.release.wat +++ b/tests/compiler/bindings/esm.release.wat @@ -741,7 +741,7 @@ if i32.const 0 i32.const 1696 - i32.const 378 + i32.const 382 i32.const 14 call $~lib/builtins/abort unreachable @@ -766,7 +766,7 @@ if i32.const 0 i32.const 1696 - i32.const 385 + i32.const 389 i32.const 16 call $~lib/builtins/abort unreachable @@ -794,7 +794,7 @@ if i32.const 0 i32.const 1696 - i32.const 398 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1161,7 +1161,7 @@ if i32.const 0 i32.const 1696 - i32.const 560 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable @@ -1245,7 +1245,7 @@ if i32.const 0 i32.const 1696 - i32.const 330 + i32.const 334 i32.const 14 call $~lib/builtins/abort unreachable @@ -1297,7 +1297,7 @@ if i32.const 0 i32.const 1696 - i32.const 343 + i32.const 347 i32.const 18 call $~lib/builtins/abort unreachable @@ -1386,7 +1386,7 @@ call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT - local.set $3 + local.set $4 local.get $0 i32.const 16 i32.add @@ -1396,12 +1396,12 @@ if i32.const 1360 i32.const 1696 - i32.const 459 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 12 local.get $2 i32.const 19 @@ -1422,50 +1422,54 @@ memory.size $0 local.tee $2 local.get $5 - i32.const 4 - local.get $3 - i32.load $0 offset=1568 - local.get $2 - i32.const 16 - i32.shl - i32.const 4 - i32.sub - i32.ne - i32.shl - i32.add - local.tee $4 - i32.const 536870910 - i32.lt_u + i32.const 256 + i32.ge_u if (result i32) - local.get $4 + local.get $5 i32.const 1 i32.const 27 - local.get $4 + local.get $5 i32.clz i32.sub i32.shl + i32.add i32.const 1 i32.sub - i32.add + local.get $5 + local.get $5 + i32.const 536870910 + i32.lt_u + select else - local.get $4 + local.get $5 end + i32.const 4 + local.get $4 + i32.load $0 offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add i32.const 65535 i32.add i32.const -65536 i32.and i32.const 16 i32.shr_u - local.tee $4 + local.tee $3 local.get $2 - local.get $4 + local.get $3 i32.gt_s select memory.grow $0 i32.const 0 i32.lt_s if - local.get $4 + local.get $3 memory.grow $0 i32.const 0 i32.lt_s @@ -1473,7 +1477,7 @@ unreachable end end - local.get $3 + local.get $4 local.get $2 i32.const 16 i32.shl @@ -1482,7 +1486,7 @@ i64.const 16 i64.shl call $~lib/rt/tlsf/addMemory - local.get $3 + local.get $4 local.get $5 call $~lib/rt/tlsf/searchBlock local.tee $2 @@ -1490,7 +1494,7 @@ if i32.const 0 i32.const 1696 - i32.const 497 + i32.const 499 i32.const 16 call $~lib/builtins/abort unreachable @@ -1505,17 +1509,17 @@ if i32.const 0 i32.const 1696 - i32.const 499 + i32.const 501 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 local.get $2 call $~lib/rt/tlsf/removeBlock local.get $2 i32.load $0 - local.set $4 + local.set $3 local.get $5 i32.const 4 i32.add @@ -1524,12 +1528,12 @@ if i32.const 0 i32.const 1696 - i32.const 357 + i32.const 361 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const -4 i32.and local.get $5 @@ -1540,7 +1544,7 @@ if local.get $2 local.get $5 - local.get $4 + local.get $3 i32.const 2 i32.and i32.or @@ -1550,19 +1554,19 @@ i32.add local.get $5 i32.add - local.tee $4 + local.tee $3 local.get $6 i32.const 4 i32.sub i32.const 1 i32.or i32.store $0 - local.get $3 local.get $4 + local.get $3 call $~lib/rt/tlsf/insertBlock else local.get $2 - local.get $4 + local.get $3 i32.const -2 i32.and i32.store $0 diff --git a/tests/compiler/bindings/raw.debug.wat b/tests/compiler/bindings/raw.debug.wat index 169584997b..d2c5453dc1 100644 --- a/tests/compiler/bindings/raw.debug.wat +++ b/tests/compiler/bindings/raw.debug.wat @@ -1150,7 +1150,7 @@ if i32.const 0 i32.const 672 - i32.const 378 + i32.const 382 i32.const 14 call $~lib/builtins/abort unreachable @@ -1196,7 +1196,7 @@ if i32.const 0 i32.const 672 - i32.const 385 + i32.const 389 i32.const 16 call $~lib/builtins/abort unreachable @@ -1229,7 +1229,7 @@ if i32.const 0 i32.const 672 - i32.const 398 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1473,7 +1473,7 @@ if i32.const 0 i32.const 672 - i32.const 560 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable @@ -1802,7 +1802,7 @@ if i32.const 336 i32.const 672 - i32.const 459 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable @@ -1811,6 +1811,26 @@ call $~lib/rt/tlsf/computeSize return ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) (local $fl i32) (local $sl i32) @@ -1840,24 +1860,13 @@ local.set $sl else local.get $size - i32.const 536870910 - i32.lt_u - if (result i32) - local.get $size - i32.const 1 - i32.const 27 - local.get $size - i32.clz - i32.sub - i32.shl - i32.add - i32.const 1 - i32.sub - else - local.get $size - end + call $~lib/rt/tlsf/roundSize local.set $requestSize - i32.const 31 + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub local.get $requestSize i32.clz i32.sub @@ -1895,7 +1904,7 @@ if i32.const 0 i32.const 672 - i32.const 330 + i32.const 334 i32.const 14 call $~lib/builtins/abort unreachable @@ -1966,7 +1975,7 @@ if i32.const 0 i32.const 672 - i32.const 343 + i32.const 347 i32.const 18 call $~lib/builtins/abort unreachable @@ -2029,6 +2038,14 @@ (local $pagesAfter i32) i32.const 0 drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end memory.size $0 local.set $pagesBefore local.get $size @@ -2050,22 +2067,6 @@ i32.add local.set $size local.get $size - i32.const 536870910 - i32.lt_u - if - local.get $size - i32.const 1 - i32.const 27 - local.get $size - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - i32.add - local.set $size - end - local.get $size i32.const 65535 i32.add i32.const 65535 @@ -2131,7 +2132,7 @@ if i32.const 0 i32.const 672 - i32.const 357 + i32.const 361 i32.const 14 call $~lib/builtins/abort unreachable @@ -2246,7 +2247,7 @@ if i32.const 0 i32.const 672 - i32.const 497 + i32.const 499 i32.const 16 call $~lib/builtins/abort unreachable @@ -2266,7 +2267,7 @@ if i32.const 0 i32.const 672 - i32.const 499 + i32.const 501 i32.const 14 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/raw.release.wat b/tests/compiler/bindings/raw.release.wat index 6a02844128..c83fe21937 100644 --- a/tests/compiler/bindings/raw.release.wat +++ b/tests/compiler/bindings/raw.release.wat @@ -741,7 +741,7 @@ if i32.const 0 i32.const 1696 - i32.const 378 + i32.const 382 i32.const 14 call $~lib/builtins/abort unreachable @@ -766,7 +766,7 @@ if i32.const 0 i32.const 1696 - i32.const 385 + i32.const 389 i32.const 16 call $~lib/builtins/abort unreachable @@ -794,7 +794,7 @@ if i32.const 0 i32.const 1696 - i32.const 398 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1161,7 +1161,7 @@ if i32.const 0 i32.const 1696 - i32.const 560 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable @@ -1245,7 +1245,7 @@ if i32.const 0 i32.const 1696 - i32.const 330 + i32.const 334 i32.const 14 call $~lib/builtins/abort unreachable @@ -1297,7 +1297,7 @@ if i32.const 0 i32.const 1696 - i32.const 343 + i32.const 347 i32.const 18 call $~lib/builtins/abort unreachable @@ -1386,7 +1386,7 @@ call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT - local.set $3 + local.set $4 local.get $0 i32.const 16 i32.add @@ -1396,12 +1396,12 @@ if i32.const 1360 i32.const 1696 - i32.const 459 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 i32.const 12 local.get $2 i32.const 19 @@ -1422,50 +1422,54 @@ memory.size $0 local.tee $2 local.get $5 - i32.const 4 - local.get $3 - i32.load $0 offset=1568 - local.get $2 - i32.const 16 - i32.shl - i32.const 4 - i32.sub - i32.ne - i32.shl - i32.add - local.tee $4 - i32.const 536870910 - i32.lt_u + i32.const 256 + i32.ge_u if (result i32) - local.get $4 + local.get $5 i32.const 1 i32.const 27 - local.get $4 + local.get $5 i32.clz i32.sub i32.shl + i32.add i32.const 1 i32.sub - i32.add + local.get $5 + local.get $5 + i32.const 536870910 + i32.lt_u + select else - local.get $4 + local.get $5 end + i32.const 4 + local.get $4 + i32.load $0 offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add i32.const 65535 i32.add i32.const -65536 i32.and i32.const 16 i32.shr_u - local.tee $4 + local.tee $3 local.get $2 - local.get $4 + local.get $3 i32.gt_s select memory.grow $0 i32.const 0 i32.lt_s if - local.get $4 + local.get $3 memory.grow $0 i32.const 0 i32.lt_s @@ -1473,7 +1477,7 @@ unreachable end end - local.get $3 + local.get $4 local.get $2 i32.const 16 i32.shl @@ -1482,7 +1486,7 @@ i64.const 16 i64.shl call $~lib/rt/tlsf/addMemory - local.get $3 + local.get $4 local.get $5 call $~lib/rt/tlsf/searchBlock local.tee $2 @@ -1490,7 +1494,7 @@ if i32.const 0 i32.const 1696 - i32.const 497 + i32.const 499 i32.const 16 call $~lib/builtins/abort unreachable @@ -1505,17 +1509,17 @@ if i32.const 0 i32.const 1696 - i32.const 499 + i32.const 501 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $4 local.get $2 call $~lib/rt/tlsf/removeBlock local.get $2 i32.load $0 - local.set $4 + local.set $3 local.get $5 i32.const 4 i32.add @@ -1524,12 +1528,12 @@ if i32.const 0 i32.const 1696 - i32.const 357 + i32.const 361 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const -4 i32.and local.get $5 @@ -1540,7 +1544,7 @@ if local.get $2 local.get $5 - local.get $4 + local.get $3 i32.const 2 i32.and i32.or @@ -1550,19 +1554,19 @@ i32.add local.get $5 i32.add - local.tee $4 + local.tee $3 local.get $6 i32.const 4 i32.sub i32.const 1 i32.or i32.store $0 - local.get $3 local.get $4 + local.get $3 call $~lib/rt/tlsf/insertBlock else local.get $2 - local.get $4 + local.get $3 i32.const -2 i32.and i32.store $0