resolve spr names in ISACaller
[soc.git] / src / soc / decoder / isa / caller.py
index b79b90995f80fce54681ca25d3f6f7ec0c171b6d..a57194bec41ab28490d0df91d75362b7f62d88f8 100644 (file)
@@ -191,27 +191,40 @@ class SPR(dict):
             if isinstance(key, SelectableInt):
                 key = key.value
             key = special_sprs.get(key, key)
-            info = spr_byname[key]
+            if isinstance(key, int):
+                info = spr_dict[key]
+            else:
+                info = spr_byname[key]
             if not isinstance(v, SelectableInt):
                 v = SelectableInt(v, info.length)
             self[key] = v
 
     def __getitem__(self, key):
+        print ("get spr", key)
+        print ("dict", self.items())
         # if key in special_sprs get the special spr, otherwise return key
         if isinstance(key, SelectableInt):
             key = key.value
+        if isinstance(key, int):
+            key = spr_dict[key].SPR
         key = special_sprs.get(key, key)
         if key in self:
-            return dict.__getitem__(self, key)
+            res = dict.__getitem__(self, key)
         else:
             info = spr_dict[key]
             dict.__setitem__(self, key, SelectableInt(0, info.length))
-            return dict.__getitem__(self, key)
+            res = dict.__getitem__(self, key)
+        print ("spr returning", key, res)
+        return res
 
     def __setitem__(self, key, value):
         if isinstance(key, SelectableInt):
             key = key.value
+        if isinstance(key, int):
+            key = spr_dict[key].SPR
+            print ("spr key", key)
         key = special_sprs.get(key, key)
+        print ("setting spr", key, value)
         dict.__setitem__(self, key, value)
 
     def __call__(self, ridx):