From 7829be6ee07aba6574fa5035c3d33023b3e23de7 Mon Sep 17 00:00:00 2001 From: Pavel Verigo Date: Fri, 14 Jun 2024 20:28:50 +0200 Subject: [PATCH] stage2-wasm: enum bigint <= 128 bits --- src/arch/wasm/CodeGen.zig | 10 ++++------ test/behavior/enum.zig | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index fe94c06136..23ca2e1075 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -1727,7 +1727,6 @@ fn isByRef(ty: Type, mod: *Module) bool { .Bool, .ErrorSet, .Fn, - .Enum, .AnyFrame, => return false, @@ -1750,6 +1749,7 @@ fn isByRef(ty: Type, mod: *Module) bool { }, .Vector => return determineSimdStoreStrategy(ty, mod) == .unrolled, .Int => return ty.intInfo(mod).bits > 64, + .Enum => return ty.intInfo(mod).bits > 64, .Float => return ty.floatBits(target) > 64, .ErrorUnion => { const pl_ty = ty.errorUnionPayload(mod); @@ -2404,7 +2404,7 @@ fn store(func: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, offset: u32) InnerE return; } }, - .Int, .Float => if (abi_size > 8 and abi_size <= 16) { + .Int, .Enum, .Float => if (abi_size > 8 and abi_size <= 16) { try func.emitWValue(lhs); const lsb = try func.load(rhs, Type.u64, 0); try func.store(.{ .stack = {} }, lsb, Type.u64, 0 + lhs.offset()); @@ -3187,12 +3187,10 @@ fn toTwosComplement(value: anytype, bits: u7) std.meta.Int(.unsigned, @typeInfo( return @as(WantedT, @intCast(result)); } -/// This function is intended to assert that `isByRef` returns `false` for `ty`. -/// However such an assertion fails on the behavior tests currently. +/// Asserts that `isByRef` returns `false` for `ty`. fn lowerConstant(func: *CodeGen, val: Value, ty: Type) InnerError!WValue { const mod = func.bin_file.base.comp.module.?; - // TODO: enable this assertion - //assert(!isByRef(ty, mod)); + assert(!isByRef(ty, mod)); const ip = &mod.intern_pool; if (val.isUndefDeep(mod)) return func.emitUndefined(ty); diff --git a/test/behavior/enum.zig b/test/behavior/enum.zig index 0742c2d91c..5f59f61355 100644 --- a/test/behavior/enum.zig +++ b/test/behavior/enum.zig @@ -1284,7 +1284,6 @@ test "matching captures causes enum equivalence" { } test "large enum field values" { - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;