diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 087f7e3d629b6d7732a5ce22736398d7e2cd96d8..be053f310c1c9e45e97aad0fe0c69533bc26bdcb 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -1154,7 +1154,8 @@ fn airNot(self: *Self, inst: Air.Inst.Index) !void { }; defer if (dst_mcv_lock) |lock| self.register_manager.unlockReg(lock); - try self.genBinOpMir(.xor, operand_ty, dst_mcv, .{ .immediate = 1 }); + const mask = ~@as(u64, 0); + try self.genBinOpMir(.xor, operand_ty, dst_mcv, .{ .immediate = mask }); break :result dst_mcv; }; diff --git a/test/behavior/math.zig b/test/behavior/math.zig index 85b62e02757cae7dbd05dcf0596e572f377db25f..53a3f61d146a664126889f5d739bb8ea7466988b 100644 --- a/test/behavior/math.zig +++ b/test/behavior/math.zig @@ -362,7 +362,6 @@ fn comptimeAdd(comptime a: comptime_int, comptime b: comptime_int) comptime_int test "binary not" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO try expect(comptime x: { break :x ~@as(u16, 0b1010101010101010) == 0b0101010101010101;