diff options
Diffstat (limited to 'survey.py')
| -rwxr-xr-x | survey.py | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -128,7 +128,28 @@ def observe(word, pc, map): ValueError: label reference out of range (8 bit): 'label' (0x1234) """ if not subv.is_reference(word): - return word + if len(word) != 2: + return word + + ref = subv.parse_immediate(word[1]) + if not ref or "split" not in ref: + return word + + value = word[0] + + sgn = -1 if value < 0 else 1 + value *= sgn + + if ref["split"] == "hi" and ref["size"] == 20: + value = value >> 12 + elif ref["split"] == "lo" and ref["size"] == 12: + value = value & 0xFFF + else: + raise ValueError( + "unknown label split mode {mode}{size}{split}".format(**ref) + ) + + return (value, "imm{size}".format(**ref)) ref = subv.parse_reference(word) |
