From e012de4b7e58603fb14c46ce040302dee7f50f7b Mon Sep 17 00:00:00 2001 From: Nils Kohl <nils.kohl@fau.de> Date: Fri, 26 Apr 2019 16:04:17 +0200 Subject: [PATCH] Added int_div and int_power_of_2 functions --- pystencils/backends/cbackend.py | 6 +++++- pystencils/integer_functions.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 01b2fb33e..92a6080c7 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -13,7 +13,7 @@ except ImportError: from sympy.printing.ccode import CCodePrinter # for sympy versions < 1.1 from pystencils.integer_functions import bitwise_xor, bit_shift_right, bit_shift_left, bitwise_and, \ - bitwise_or, modulo_ceil + bitwise_or, modulo_ceil, int_div, int_power_of_2 from pystencils.astnodes import Node, KernelFunction from pystencils.data_types import create_type, PointerType, get_type_of_expression, VectorType, cast_func, \ vector_memory_access, reinterpret_cast_func @@ -301,6 +301,10 @@ class CustomSympyPrinter(CCodePrinter): return "({})".format(self._print(1 / sp.sqrt(expr.args[0]))) elif expr.func in infix_functions: return "(%s %s %s)" % (self._print(expr.args[0]), infix_functions[expr.func], self._print(expr.args[1])) + elif expr.func == int_power_of_2: + return "(1 << (%s))" % (self._print(expr.args[0])) + elif expr.func == int_div: + return "((%s) / (%s))" % (self._print(expr.args[0]), self._print(expr.args[1])) else: return super(CustomSympyPrinter, self)._print_Function(expr) diff --git a/pystencils/integer_functions.py b/pystencils/integer_functions.py index b1ac944a9..2fbc1ed67 100644 --- a/pystencils/integer_functions.py +++ b/pystencils/integer_functions.py @@ -8,6 +8,8 @@ bit_shift_right = sp.Function("bit_shift_right") bit_shift_left = sp.Function("bit_shift_left") bitwise_and = sp.Function("bitwise_and") bitwise_or = sp.Function("bitwise_or") +int_div = sp.Function("int_div") +int_power_of_2 = sp.Function("int_power_of_2") # noinspection PyPep8Naming -- GitLab