import EXTS which over-extends to 256 bits
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 4 Apr 2020 20:53:03 +0000 (21:53 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 4 Apr 2020 20:53:03 +0000 (21:53 +0100)
src/soc/decoder/helpers.py
src/soc/decoder/pseudo/pywriter.py

index 941bcbc8f46bc9f263aeef0596061879b2df390c..98b3e672f16158f7dd54286c2a843664f1e7bab0 100644 (file)
@@ -7,17 +7,26 @@ def exts(value, bits):
     return (value & (sign - 1)) - (value & sign)
 
 
+def EXTS(value):
+    """ extends sign bit out from current MSB to all 256 bits
+    """
+    assert isinstance(value, SelectableInt)
+    return SelectableInt(exts(value.value, value.bits) & ((1 << 256)-1), 256)
+
 def EXTS64(value):
-    if isinstance(value, SelectableInt):
-        value = value.value
-    return SelectableInt(exts(value, 32) & ((1 << 64)-1), 64)
+    """ extends sign bit out from current MSB to 64 bits
+    """
+    assert isinstance(value, SelectableInt)
+    return SelectableInt(exts(value.value, value.bits) & ((1 << 64)-1), 64)
 
 
+# XXX should this explicitly extend from 32 to 64?
 def EXTZ64(value):
     if isinstance(value, SelectableInt):
         value = value.value
     return SelectableInt(value & ((1<<32)-1), 64)
 
+
 def rotl(value, bits, wordlen):
     mask = (1 << wordlen) - 1
     bits = bits & (wordlen - 1)
index 049a1f3981fff254b073b2f5d7fca0cb18039142..40d10e8c8962047ee4d46cd6c9430102f7a4cfa9 100644 (file)
@@ -16,7 +16,7 @@ header = """\
 # auto-generated by pywriter.py, do not edit or commit
 
 from soc.decoder.isa.caller import ISACaller, inject
-from soc.decoder.helpers import (EXTS64, EXTZ64, ROTL64, ROTL32, MASK,)
+from soc.decoder.helpers import (EXTS, EXTS64, EXTZ64, ROTL64, ROTL32, MASK,)
 from soc.decoder.selectable_int import SelectableInt
 from soc.decoder.selectable_int import selectconcat as concat
 from soc.decoder.orderedset import OrderedSet
@@ -72,8 +72,9 @@ class PyISAWriter(ISA):
 
 if __name__ == '__main__':
     isa = PyISAWriter()
-    isa.write_pysource('fixedlogical')
+    isa.write_pysource('branch')
     exit(0)
+    isa.write_pysource('fixedlogical')
     isa.write_pysource('fixedstore')
     isa.write_pysource('fixedload')
     isa.write_pysource('comparefixed')