add better debug logs and asserts for SelectableInt slice
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 8 Jun 2021 12:09:01 +0000 (13:09 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 8 Jun 2021 12:09:01 +0000 (13:09 +0100)
src/openpower/decoder/selectable_int.py

index 81e28d347bf5607415633d9d52712b8a725d06cc..a3e2974c3d498ee407e25c082d12fb1cdf51190a 100644 (file)
@@ -310,14 +310,15 @@ class SelectableInt:
     def __setitem__(self, key, value):
         if isinstance(key, SelectableInt):
             key = key.value
-        log("setitem", key, self.bits, hex(self.value))
         if isinstance(key, int):
-            assert key < self.bits
-            assert key >= 0
-            key = self.bits - (key + 1)
             if isinstance(value, SelectableInt):
                 assert value.bits == 1
                 value = value.value
+            log("setitem", key, self.bits, hex(self.value), hex(value))
+
+            assert key < self.bits
+            assert key >= 0
+            key = self.bits - (key + 1)
 
             value = value << key
             mask = 1 << key
@@ -326,7 +327,8 @@ class SelectableInt:
             assert key.step is None or key.step == 1
             assert key.start < key.stop
             assert key.start >= 0
-            assert key.stop <= self.bits
+            assert key.stop <= self.bits, \
+                   "key stop %d bits %d" % (key.stop, self.bits)
 
             stop = self.bits - key.start
             start = self.bits - key.stop
@@ -336,6 +338,7 @@ class SelectableInt:
             if isinstance(value, SelectableInt):
                 assert value.bits == bits, "%d into %d" % (value.bits, bits)
                 value = value.value
+            log("setitem", key, self.bits, hex(self.value), hex(value))
             mask = ((1 << bits) - 1) << start
             value = value << start
             self.value = (self.value & ~mask) | (value & mask)