aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-09-20 15:44:09 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-09-20 15:44:09 -0700
commit4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1 (patch)
tree2b3b5a2faf3a6c335d032c05bd7884e371ebabae /src/value.zig
parentf3147de7a28767a27406355fd2d93d1bbcec9437 (diff)
downloadzig-4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1.tar.gz
zig-4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1.zip
stage2: implement comptime bitwise nand
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/value.zig b/src/value.zig
index 177359d652..934aab7bc8 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -1690,12 +1690,17 @@ pub const Value = extern union {
}
/// operands must be integers; handles undefined.
- pub fn bitwiseNand(lhs: Value, rhs: Value, ty: Type, arena: *Allocator) !Value {
+ pub fn bitwiseNand(lhs: Value, rhs: Value, ty: Type, arena: *Allocator, target: Target) !Value {
if (lhs.isUndef() or rhs.isUndef()) return Value.initTag(.undef);
- _ = ty;
- _ = arena;
- @panic("TODO comptime bitwise NAND");
+ const anded = try bitwiseAnd(lhs, rhs, arena);
+
+ const all_ones = if (ty.isSignedInt())
+ try Value.Tag.int_i64.create(arena, -1)
+ else
+ try ty.maxInt(arena, target);
+
+ return bitwiseXor(anded, all_ones, arena);
}
/// operands must be integers; handles undefined.