sorting out trap fastregs
[soc.git] / src / soc / decoder / isa / caller.py
index 12cb66478cca422e5261abc2650801706ef62a45..17e9ed94078e43d02e61efbea57e682d50be96d6 100644 (file)
@@ -188,8 +188,6 @@ class SPR(dict):
         self.sd = dec2
         dict.__init__(self)
         for key, v in initial_sprs.items():
-            if isinstance(key, str):
-                key = spr_byname[key].SPR
             if isinstance(key, SelectableInt):
                 key = key.value
             key = special_sprs.get(key, key)
@@ -207,11 +205,16 @@ class SPR(dict):
         # 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:
             res = dict.__getitem__(self, key)
         else:
-            info = spr_dict[key]
+            if isinstance(key, int):
+                info = spr_dict[key]
+            else:
+                info = spr_byname[key]
             dict.__setitem__(self, key, SelectableInt(0, info.length))
             res = dict.__getitem__(self, key)
         print ("spr returning", key, res)
@@ -220,6 +223,9 @@ class SPR(dict):
     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)