zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 15bc2ab0a868fed31780d73451db4d1c69e7b489 (tree)
parent a429d04ba9cb1205d88211b7b39cbd68113b7178
Author: Pavel Verigo <paul.verigo@gmail.com>
Date:   Thu, 27 Feb 2025 15:12:18 +0100

stage2-wasm: clz fix

Diffstat:
Msrc/arch/wasm/CodeGen.zig | 14++++++++++++--
Mtest/behavior/math.zig | 1-
2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig @@ -6272,11 +6272,21 @@ fn airClz(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { switch (wasm_bits) { 32 => { - try cg.emitWValue(operand); + if (int_info.signedness == .signed) { + const mask = ~@as(u32, 0) >> @intCast(32 - int_info.bits); + _ = try cg.binOp(operand, .{ .imm32 = mask }, ty, .@"and"); + } else { + try cg.emitWValue(operand); + } try cg.addTag(.i32_clz); }, 64 => { - try cg.emitWValue(operand); + if (int_info.signedness == .signed) { + const mask = ~@as(u64, 0) >> @intCast(64 - int_info.bits); + _ = try cg.binOp(operand, .{ .imm64 = mask }, ty, .@"and"); + } else { + try cg.emitWValue(operand); + } try cg.addTag(.i64_clz); try cg.addTag(.i32_wrap_i64); }, diff --git a/test/behavior/math.zig b/test/behavior/math.zig @@ -65,7 +65,6 @@ test "@clz" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;