From 2415a34131979da9a33594212655bfbe72f74a6f Mon Sep 17 00:00:00 2001 From: "Pavel I. Kryukov" Date: Wed, 18 May 2022 10:10:24 +0300 Subject: Check for overlapping fields (#120) * Check for overlapping fields * Enable unit test --- parse.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'parse.py') diff --git a/parse.py b/parse.py index 243a8bb..65d2875 100755 --- a/parse.py +++ b/parse.py @@ -126,10 +126,19 @@ def process_enc_line(line, ext): # check if all args of the instruction are present in arg_lut present in # constants.py args = single_fixed.sub(' ', args).split() + encoding_args = ['-'] * 32 for a in args: if a not in arg_lut: logging.error(f' Found variable {a} in instruction {name} whose mapping in arg_lut does not exist') raise SystemExit(1) + else: + (msb, lsb) = arg_lut[a] + for ind in range(lsb, msb): + # overlapping bits + if encoding_args[ind] != '-': + logging.error(f' Found variable {a} in instruction {name} overlapping {encoding_args[ind]} variable') + raise SystemExit(1) + encoding_args[ind] = a # update the fields of the instruction as a dict and return back along with # the name of the instruction -- cgit v1.1