From ce7e30edfe2c4ab1903448bc55e8e9eaa0065233 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sun, 1 Oct 2017 19:33:18 +0000 Subject: [PATCH] compiler: implement ~ operator (fix #836). --- artiq/compiler/transforms/artiq_ir_generator.py | 4 ++++ artiq/test/lit/integration/arithmetics.py | 2 ++ 2 files changed, 6 insertions(+) diff --git a/artiq/compiler/transforms/artiq_ir_generator.py b/artiq/compiler/transforms/artiq_ir_generator.py index 4a0e51693..0c99352f0 100644 --- a/artiq/compiler/transforms/artiq_ir_generator.py +++ b/artiq/compiler/transforms/artiq_ir_generator.py @@ -1289,6 +1289,10 @@ class ARTIQIRGenerator(algorithm.Visitor): return self.append(ir.Select(cond, ir.Constant(False, builtins.TBool()), ir.Constant(True, builtins.TBool()))) + elif isinstance(node.op, ast.Invert): + operand = self.visit(node.operand) + return self.append(ir.Arith(ast.BitXor(loc=None), + ir.Constant(-1, operand.type), operand)) elif isinstance(node.op, ast.USub): operand = self.visit(node.operand) return self.append(ir.Arith(ast.Sub(loc=None), diff --git a/artiq/test/lit/integration/arithmetics.py b/artiq/test/lit/integration/arithmetics.py index 01fd82efc..4fee4d27d 100644 --- a/artiq/test/lit/integration/arithmetics.py +++ b/artiq/test/lit/integration/arithmetics.py @@ -41,6 +41,8 @@ assert -1 >> 32 == -1 assert 0x18 & 0x0f == 0x08 assert 0x18 | 0x0f == 0x1f assert 0x18 ^ 0x0f == 0x17 +#ARTIQ#assert ~0x18 == -25 +#ARTIQ#assert ~int64(0x18) == -25 try: 1 / 0