import unittest
from copy import copy
from soc.decoder.power_fields import BitRange
-from operator import (add, sub, mul, truediv, mod, or_, and_, xor, neg, inv)
+from operator import (add, sub, mul, truediv, mod, or_, and_, xor, neg, inv,
+ lshift, rshift)
def check_extsign(a, b):
self.value = b.value
self.bits = b.bits
- def __add__(self, b):
+ def _op(self, op, b):
if isinstance(b, int):
b = SelectableInt(b, self.bits)
b = check_extsign(self, b)
assert b.bits == self.bits
- return SelectableInt(self.value + b.value, self.bits)
+ return SelectableInt(op(self.value, b.value), self.bits)
+ def __add__(self, b):
+ return self._op(add, b)
def __sub__(self, b):
- if isinstance(b, int):
- b = SelectableInt(b, self.bits)
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value - b.value, self.bits)
+ return self._op(sub, b)
+ def __mul__(self, b):
+ return self._op(mul, b)
+ def __div__(self, b):
+ return self._op(truediv, b)
+ def __mod__(self, b):
+ return self._op(mod, b)
+ def __and__(self, b):
+ return self._op(and_, b)
+ def __or__(self, b):
+ return self._op(or_, b)
+ def __xor__(self, b):
+ return self._op(xor, b)
def __rsub__(self, b):
if isinstance(b, int):
assert b.bits == self.bits
return SelectableInt(b.value + self.value, self.bits)
- def __mul__(self, b):
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value * b.value, self.bits)
-
- def __div__(self, b):
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value / b.value, self.bits)
-
- def __mod__(self, b):
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value % b.value, self.bits)
-
- def __or__(self, b):
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value | b.value, self.bits)
-
- def __and__(self, b):
- print ("__and__", self, b)
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value & b.value, self.bits)
-
- def __xor__(self, b):
- b = check_extsign(self, b)
- assert b.bits == self.bits
- return SelectableInt(self.value ^ b.value, self.bits)
-
def __rxor__(self, b):
b = check_extsign(self, b)
assert b.bits == self.bits