diff options
| author | s-ol <s+removethis@s-ol.nu> | 2021-07-06 10:03:57 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2021-07-06 10:04:36 +0000 |
| commit | 912b5df8aef99aa00848d2a87bb5e5cebc7ff6b2 (patch) | |
| tree | 3c62b2a7db782bd6c142a2fdb37d232f31f16eb1 /subv.py | |
| parent | update ex.subv to work with new pipeline (diff) | |
| download | subv-912b5df8aef99aa00848d2a87bb5e5cebc7ff6b2.tar.gz subv-912b5df8aef99aa00848d2a87bb5e5cebc7ff6b2.zip | |
fix and finish new pipeline
Diffstat (limited to 'subv.py')
| -rw-r--r-- | subv.py | 31 |
1 files changed, 5 insertions, 26 deletions
@@ -7,6 +7,7 @@ num = re.compile(r"^\d+$") ref_re = re.compile(r"^([^\[+-]+)(?:([+-]\d+))?$") immediate_re = re.compile(r"^(imm|off)(\d+)(hi|lo)?$") + # parsing def parse_part(part): """parse a literal with attached metadata. @@ -113,7 +114,7 @@ def parse_reference(part): """parse a sliced-label part. >>> parse_reference(('lbl', 'imm32')) - {'label': 'lbl', 'mode': 'imm', 'size': 32, offset: 0} + {'label': 'lbl', 'mode': 'imm', 'size': 32, 'offset': 0} >>> parse_reference(('lbl+0', 'off32')) {'label': 'lbl', 'mode': 'off', 'size': 32, 'offset': 0} >>> parse_reference(('lbl+2', 'imm32')) @@ -274,30 +275,6 @@ def untag(part, expect=None): return part[0] -def format_reference(ref): - """opposite of parse_reference.. - - >>> format_reference({'label': 'lbl', 'mode': 'imm', 'size': 32, 'meta': ()}) - ('lbl', 'imm32') - >>> format_reference({'label': 'lbl', 'offset': 0, 'mode': 'imm', 'size': 32, 'meta': ()}) - ('lbl+0', 'imm32') - >>> format_reference({'label': 'lbl', 'offset': 2, 'mode': 'imm', 'size': 32, 'meta': ()}) - ('lbl+2', 'imm32') - >>> format_reference({'label': 'x', 'mode': 'off', 'size': 12, 'meta': (), 'hi': 11, 'lo': 0}) - ('x[11:0]', 'off12') - >>> format_reference({'label': 'x', 'offset': -16, 'mode': 'off', 'size': 12, 'meta': (), 'hi': 11, 'lo': 0}) - ('x-16[11:0]', 'off12') - >>> format_reference({'label': 'x', 'offset': -16, 'mode': 'off', 'size': 12, 'meta': ('extra', 'stuff'), 'hi': 11, 'lo': 0}) - ('x-16[11:0]', 'off12', 'extra', 'stuff') - """ - label = ref["label"] - if "offset" in ref: - label += "{:+}".format(ref["offset"]) - if "hi" in ref: - label += "[{hi}:{lo}]".format(**ref) - return (label, "{mode}{size}".format(**ref), *ref["meta"]) - - def format_immediate(imm): tag = "{mode}{size}".format(**imm) if "split" in imm: @@ -327,7 +304,7 @@ def format_part(part): >>> format_part(('$label:suff', 'tag')) '$label:suff/tag' """ - if isinstance(part, bits.WordBase): + if isinstance(part, bits.Bitfield): return str(part) elif not is_reference(part): first = "{:x}".format(part[0]) @@ -351,6 +328,8 @@ def format(line): if line["comment"]: packed = packed + " # " + line["comment"] return packed + elif type == "empty": + return line["raw"] else: raise NotImplementedError("type {}".format(type)) |
