Skip to content

Commit 6265862

Browse files
committed
compiler: Add more bit-level operations
1 parent 21b76ec commit 6265862

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

devito/ir/cgen/printer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,9 @@ def _print_BitwiseNot(self, expr):
281281
arg = expr.args[0]
282282
return f'~{self._print(arg)}'
283283

284-
def _print_BitwiseXor(self, expr):
285-
# Binary function
284+
def _print_BitwiseBinaryOp(self, expr):
286285
arg0, arg1 = expr.args
287-
return f'{self._print(arg0)} ^ {self._print(arg1)}'
286+
return f'{self._print(arg0)} {expr.op} {self._print(arg1)}'
288287

289288
def _print_Add(self, expr, order=None):
290289
""""

devito/symbolics/extended_sympy.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@
1717
from devito.types import Symbol
1818
from devito.types.basic import Basic
1919

20-
__all__ = ['CondEq', 'CondNe', 'BitwiseNot', 'BitwiseXor', 'IntDiv', # noqa
21-
'CallFromPointer', 'CallFromComposite', 'FieldFromPointer',
22-
'FieldFromComposite', 'ListInitializer', 'Byref', 'IndexedPointer',
23-
'Cast', 'DefFunction', 'MathFunction', 'InlineIf', 'ReservedWord',
24-
'Keyword', 'String', 'Macro', 'Class', 'MacroArgument', 'Deref',
25-
'Namespace', 'Rvalue', 'Null', 'SizeOf', 'rfunc', 'BasicWrapperMixin',
26-
'ValueLimit', 'VectorAccess']
20+
__all__ = ['CondEq', 'CondNe', 'BitwiseNot', 'BitwiseXor', 'BitwiseAnd', # noqa
21+
'LeftShift', 'RightShift', 'IntDiv', 'CallFromPointer',
22+
'CallFromComposite', 'FieldFromPointer', 'FieldFromComposite',
23+
'ListInitializer', 'Byref', 'IndexedPointer', 'Cast', 'DefFunction',
24+
'MathFunction', 'InlineIf', 'ReservedWord', 'Keyword', 'String',
25+
'Macro', 'Class', 'MacroArgument', 'Deref', 'Namespace', 'Rvalue',
26+
'Null', 'SizeOf', 'rfunc', 'BasicWrapperMixin', 'ValueLimit',
27+
'VectorAccess']
2728

2829

2930
class CondEq(sympy.Eq):
@@ -65,16 +66,33 @@ def negated(self):
6566

6667

6768
class BitwiseNot(BooleanFunction):
68-
pass
69+
op = '~'
6970

7071

71-
class BitwiseXor(BooleanFunction):
72+
class BitwiseBinaryOp(BooleanFunction):
73+
op = ''
7274

7375
# Enforce two args
7476
def __new__(cls, arg0, arg1, **kwargs):
7577
return super().__new__(cls, arg0, arg1, **kwargs)
7678

7779

80+
class BitwiseXor(BitwiseBinaryOp):
81+
op = '^'
82+
83+
84+
class BitwiseAnd(BitwiseBinaryOp):
85+
op = '&'
86+
87+
88+
class LeftShift(BitwiseBinaryOp):
89+
op = '<<'
90+
91+
92+
class RightShift(BitwiseBinaryOp):
93+
op = '>>'
94+
95+
7896
class IntDiv(sympy.Expr):
7997

8098
"""

0 commit comments

Comments
 (0)