diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-09-20 15:44:09 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-09-20 15:44:09 -0700 |
| commit | 4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1 (patch) | |
| tree | 2b3b5a2faf3a6c335d032c05bd7884e371ebabae /src/value.zig | |
| parent | f3147de7a28767a27406355fd2d93d1bbcec9437 (diff) | |
| download | zig-4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1.tar.gz zig-4b2d7a9c67760aa9a81bfd364ac0d88cbb9737f1.zip | |
stage2: implement comptime bitwise nand
Diffstat (limited to 'src/value.zig')
| -rw-r--r-- | src/value.zig | 13 |
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. |
