stage2-wasm: clz fix

This commit is contained in:
Pavel Verigo 2025-02-27 15:12:18 +01:00
parent a429d04ba9
commit 15bc2ab0a8
2 changed files with 12 additions and 3 deletions

View File

@ -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);
},

View File

@ -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;