authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2024-05-20 14:38:59+03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-22 09:48:52-04:00
log0fb2015fd3422fc1df364995f9782dfe7255eccd
treed0e54ff758f3d391b1de6323b36ba2c64a2511fb
parentd78968c1b589811c970ac57a4be52361cca2b5b1

llvm: fix `@wasmMemory{Size,Grow}` for wasm64

Closes #19942

5 files changed, 12 insertions(+), 10 deletions(-)

doc/langref.html.in+2-2
......@@ -5056,7 +5056,7 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
50565056 {#header_close#}
50575057
50585058 {#header_open|@wasmMemorySize#}
5059 <pre>{#syntax#}@wasmMemorySize(index: u32) u32{#endsyntax#}</pre>
5059 <pre>{#syntax#}@wasmMemorySize(index: u32) usize{#endsyntax#}</pre>
50605060 <p>
50615061 This function returns the size of the Wasm memory identified by {#syntax#}index{#endsyntax#} as
50625062 an unsigned value in units of Wasm pages. Note that each Wasm page is 64KB in size.
......@@ -5070,7 +5070,7 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
50705070 {#header_close#}
50715071
50725072 {#header_open|@wasmMemoryGrow#}
5073 <pre>{#syntax#}@wasmMemoryGrow(index: u32, delta: u32) i32{#endsyntax#}</pre>
5073 <pre>{#syntax#}@wasmMemoryGrow(index: u32, delta: usize) isize{#endsyntax#}</pre>
50745074 <p>
50755075 This function increases the size of the Wasm memory identified by {#syntax#}index{#endsyntax#} by
50765076 {#syntax#}delta{#endsyntax#} in units of unsigned number of Wasm pages. Note that each Wasm page
lib/std/zig/AstGen.zig+1-1
......@@ -9461,7 +9461,7 @@ fn builtinCall(
94619461 },
94629462 .wasm_memory_grow => {
94639463 const index_arg = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0]);
9464 const delta_arg = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .u32_type } }, params[1]);
9464 const delta_arg = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, params[1]);
94659465 const result = try gz.addExtendedPayload(.wasm_memory_grow, Zir.Inst.BinNode{
94669466 .node = gz.nodeIndexToRelative(node),
94679467 .lhs = index_arg,
src/Air.zig+4-4
......@@ -782,13 +782,13 @@ pub const Inst = struct {
782782 field_parent_ptr,
783783
784784 /// Implements @wasmMemorySize builtin.
785 /// Result type is always `u32`,
785 /// Result type is always `usize`,
786786 /// Uses the `pl_op` field, payload represents the index of the target memory.
787787 /// The operand is unused and always set to `Ref.none`.
788788 wasm_memory_size,
789789
790790 /// Implements @wasmMemoryGrow builtin.
791 /// Result type is always `i32`,
791 /// Result type is always `isize`,
792792 /// Uses the `pl_op` field, payload represents the index of the target memory.
793793 wasm_memory_grow,
794794
......@@ -1471,8 +1471,8 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
14711471 .save_err_return_trace_index,
14721472 => return Type.usize,
14731473
1474 .wasm_memory_grow => return Type.i32,
1475 .wasm_memory_size => return Type.u32,
1474 .wasm_memory_grow => return Type.isize,
1475 .wasm_memory_size => return Type.usize,
14761476
14771477 .int_from_bool => return Type.u1,
14781478
src/Sema.zig+1-1
......@@ -26253,7 +26253,7 @@ fn zirWasmMemoryGrow(
2625326253 const index: u32 = @intCast(try sema.resolveInt(block, index_src, extra.lhs, Type.u32, .{
2625426254 .needed_comptime_reason = "wasm memory size index must be comptime-known",
2625526255 }));
26256 const delta = try sema.coerce(block, Type.u32, try sema.resolveInst(extra.rhs), delta_src);
26256 const delta = try sema.coerce(block, Type.usize, try sema.resolveInst(extra.rhs), delta_src);
2625726257
2625826258 try sema.requireRuntimeBlock(block, builtin_src, null);
2625926259 return block.addInst(.{
src/codegen/llvm.zig+4-2
......@@ -7625,7 +7625,8 @@ pub const FuncGen = struct {
76257625 const o = self.dg.object;
76267626 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
76277627 const index = pl_op.payload;
7628 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.size", &.{.i32}, &.{
7628 const llvm_usize = try o.lowerType(Type.usize);
7629 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.size", &.{llvm_usize}, &.{
76297630 try o.builder.intValue(.i32, index),
76307631 }, "");
76317632 }
......@@ -7634,7 +7635,8 @@ pub const FuncGen = struct {
76347635 const o = self.dg.object;
76357636 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
76367637 const index = pl_op.payload;
7637 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.grow", &.{.i32}, &.{
7638 const llvm_isize = try o.lowerType(Type.isize);
7639 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.grow", &.{llvm_isize}, &.{
76387640 try o.builder.intValue(.i32, index), try self.resolveInst(pl_op.operand),
76397641 }, "");
76407642 }