This commit is contained in:
Ulf Lilleengen 2021-06-03 14:31:27 +02:00
parent 332fc1728b
commit 529b991404
4 changed files with 6901 additions and 3325 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,43 +13,38 @@ def item_key(a):
def field_key(a): def field_key(a):
return int(a["bit_offset"]) return int(a["bit_offset"])
def block_items(origin, new): def merge_block(origin, new):
newarr=[] for newval in new:
sorted(origin, key=item_key) found = False
sorted(new, key=item_key) for val in origin:
if val["name"] == newval["name"] and val["byte_offset"] == newval["byte_offset"]:
found = True
if not found:
origin.append(newval)
for val in origin: def merge_fields(origin, new):
for newval in new: for newval in new:
if val["name"] == newval["name"] and val["byte_offset"] == newval["byte_offset"] and val["fieldset"] == newval["fieldset"]: found = False
newarr.append(newval) for val in origin:
return newarr
def reg_fields(origin, new):
newarr=[]
sorted(origin, key=field_key)
sorted(new, key=field_key)
for val in origin:
for newval in new:
if val["name"] == newval["name"] and val["bit_offset"] == newval["bit_offset"]: if val["name"] == newval["name"] and val["bit_offset"] == newval["bit_offset"]:
newarr.append(newval) found = True
return newarr if not found:
origin.append(newval)
def merge_dicts(origin, new): def merge_dicts(origin, new):
merged={} for k, v in new.items():
for k, v in origin.items(): if k in origin:
if k in new:
if type(v) is dict: if type(v) is dict:
merged[k] = merge_dicts(v, new[k]) merge_dicts(origin[k], v)
elif type(v) is list: elif type(v) is list:
if k == "items": if k == "items":
merged[k] = block_items(v, new[k]) merge_block(origin[k], v)
if k == "fields": if k == "fields":
merged[k] = reg_fields(v, new[k]) merge_fields(origin[k], v)
else: else:
merged[k] = v origin[k] = v
return merged else:
origin[k] = v
first=True first=True
reg_map={} reg_map={}
@ -57,10 +52,7 @@ for regfile in sys.argv[1:]:
print("Loading", regfile) print("Loading", regfile)
with open(regfile, 'r') as f: with open(regfile, 'r') as f:
y = yaml.load(f, Loader=yaml.SafeLoader) y = yaml.load(f, Loader=yaml.SafeLoader)
if not reg_map: merge_dicts(reg_map, y)
reg_map = y
else:
reg_map = merge_dicts(reg_map, y)
with open('regs_merged.yaml', 'w') as f: with open('regs_merged.yaml', 'w') as f: