Use table.fill in externref-xform (TODO) (#3446)

This commit is contained in:
Lukas Lihotzki
2024-06-19 20:39:08 +02:00
committed by GitHub
parent dd50433063
commit 617167fbee
3 changed files with 8 additions and 13 deletions

View File

@@ -652,19 +652,12 @@ impl Transform<'_> {
// Note that we pave over all our stack slots with `ref.null` to ensure
// that the table doesn't accidentally hold a strong reference to items
// no longer in use by our wasm instance.
//
// TODO: use `table.fill` once that's spec'd
if externref_stack > 0 {
for i in 0..externref_stack {
body.local_get(fp);
if i > 0 {
body.i32_const(i).binop(BinaryOp::I32Add);
}
body.ref_null(ValType::Externref);
body.table_set(self.table);
}
body.local_get(fp)
.ref_null(ValType::Externref)
.i32_const(externref_stack)
.table_fill(self.table)
.local_get(fp)
.i32_const(externref_stack)
.binop(BinaryOp::I32Add)
.global_set(self.stack_pointer);

View File

@@ -25,7 +25,8 @@
call $foo
local.get 1
ref.null extern
table.set 0
i32.const 1
table.fill 0
local.get 1
i32.const 1
i32.add

View File

@@ -34,7 +34,8 @@
call $a
local.get 5
ref.null extern
table.set 0
i32.const 1
table.fill 0
local.get 5
i32.const 1
i32.add