Merge branch 'master' into fix/increment_handling

This commit is contained in:
Julian Hammer
2020-10-15 16:36:29 +02:00
2 changed files with 55 additions and 8 deletions

View File

@@ -106,13 +106,57 @@ instruction_forms:
prefix: "*"
source: true
destination: false
- class: "memory"
prefix: "*"
base: "*"
offset: "*"
index: "*"
scale: "*"
pre-indexed: "*"
post-indexed: "*"
- class: "immediate"
imd: "int"
source: true
destination: false
- name: cmn
operands:
- class: "register"
prefix: "*"
source: true
destination: false
- class: "register"
prefix: "*"
source: true
destination: false
- name: cmn
operands:
- class: "register"
prefix: "*"
source: true
destination: false
- class: "immediate"
imd: "int"
source: true
destination: false
- name: fcmp
operands:
- class: "register"
prefix: "*"
source: true
destination: false
- class: "register"
prefix: "*"
source: true
destination: false
- name: fcmp
operands:
- class: "register"
prefix: "*"
source: true
destination: false
- class: "immediate"
imd: "double"
source: true
destination: false
- name: fcmp
operands:
- class: "register"
prefix: "*"
source: true
destination: false
- class: "immediate"
imd: "float"
source: true
destination: false

View File

@@ -493,6 +493,7 @@ class MachineModel(object):
if 'class' in operand:
# compare two DB entries
return self._compare_db_entries(i_operand, operand)
# TODO support class wildcards
# register
if 'register' in operand:
if i_operand['class'] != 'register':
@@ -504,12 +505,14 @@ class MachineModel(object):
return False
return self._is_AArch64_mem_type(i_operand, operand['memory'])
# immediate
# TODO support wildcards
if 'value' in operand or ('immediate' in operand and 'value' in operand['immediate']):
return i_operand['class'] == 'immediate' and i_operand['imd'] == 'int'
if 'float' in operand or ('immediate' in operand and 'float' in operand['immediate']):
return i_operand['class'] == 'immediate' and i_operand['imd'] == 'float'
if 'double' in operand or ('immediate' in operand and 'double' in operand['immediate']):
return i_operand['class'] == 'immediate' and i_operand['imd'] == 'double'
# identifier
if 'identifier' in operand or (
'immediate' in operand and 'identifier' in operand['immediate']
):