def __repr__(self):
return "FieldSelectableInt(si=%s, br=%s)" % (self.si, self.br)
+ def asint(self, msb0=False):
+ res = 0
+ brlen = len(self.br)
+ for i, key in enumerate(self.br):
+ res |= self.si[key].value << ((brlen-i-1) if msb0 else i)
+ return res
+
class FieldSelectableIntTestCase(unittest.TestCase):
def test_arith(self):
mask = (1 << bits) - 1
self.value = value & mask
self.bits = bits
+ self.overflow = (value & ~mask) != 0
def eq(self, b):
self.value = b.value
return SelectableInt(~self.value, self.bits)
def __neg__(self):
- return SelectableInt(~self.value + 1, self.bits)
+ res = SelectableInt((~self.value) + 1, self.bits)
+ print ("neg", hex(self.value), hex(res.value))
+ return res
def __lshift__(self, b):
b = check_extsign(self, b)
def __getitem__(self, key):
if isinstance(key, SelectableInt):
key = key.value
+ print("getitem", key, self.bits, hex(self.value))
if isinstance(key, int):
assert key < self.bits, "key %d accessing %d" % (key, self.bits)
assert key >= 0
start = self.bits - key.stop
bits = stop - start
- #print ("__getitem__ slice num bits", bits)
+ #print ("__getitem__ slice num bits", start, stop, bits)
mask = (1 << bits) - 1
value = (self.value >> start) & mask
return SelectableInt(value, bits)
def __setitem__(self, key, value):
if isinstance(key, SelectableInt):
key = key.value
+ print("setitem", key, self.bits, hex(self.value))
if isinstance(key, int):
assert key < self.bits
assert key >= 0