supports hidden operands now (for flags or special instructions)

This commit is contained in:
JanLJL
2020-01-14 20:54:00 +01:00
parent a6bc25708a
commit 2c2e381278
4 changed files with 52 additions and 4 deletions

View File

@@ -86,6 +86,23 @@ class ISASemantics(object):
if op['destination']:
op_dict['destination'].append(operands[i])
continue
# check for hidden operands like flags or registers
if 'hidden_operands' in isa_data:
# add operand(s) to semantic_operands of instruction form
for op in isa_data['hidden_operands']:
dict_key = (
'src_dst'
if op['source'] and op['destination']
else 'source'
if op['source']
else 'destination'
)
hidden_op = {op['class']: {}}
key_filter = ['class', 'source', 'destination']
for key in [k for k in op.keys() if k not in key_filter]:
hidden_op[op['class']][key] = op[key]
hidden_op = AttrDict.convert_dict(hidden_op)
op_dict[dict_key].append(hidden_op)
# post-process pre- and post-indexing for aarch64 memory operands
if self._isa == 'aarch64':
for operand in [op for op in op_dict['source'] if 'memory' in op]: