diff options
Diffstat (limited to 'src/target/register.h')
-rw-r--r-- | src/target/register.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/target/register.h b/src/target/register.h index 3810d145..9e0f1ce8 100644 --- a/src/target/register.h +++ b/src/target/register.h @@ -26,12 +26,105 @@ struct target; +enum reg_type { + REG_TYPE_INT8, + REG_TYPE_INT16, + REG_TYPE_INT32, + REG_TYPE_INT64, + REG_TYPE_INT128, + REG_TYPE_UINT8, + REG_TYPE_UINT16, + REG_TYPE_UINT32, + REG_TYPE_UINT64, + REG_TYPE_UINT128, + REG_TYPE_CODE_PTR, + REG_TYPE_DATA_PTR, + REG_TYPE_IEEE_SINGLE, + REG_TYPE_IEEE_DOUBLE, + REG_TYPE_ARCH_DEFINED, +}; + +struct reg_feature { + const char *name; +}; + +struct reg_data_type_vector { + struct reg_data_type *type; + uint32_t count; +}; + +struct reg_data_type_union_field { + const char *name; + struct reg_data_type *type; + struct reg_data_type_union_field *next; +}; + +struct reg_data_type_union { + struct reg_data_type_union_field *fields; +}; + +struct reg_data_type_bitfield { + uint32_t start; + uint32_t end; +}; + +struct reg_data_type_struct_field { + const char *name; + bool use_bitfields; + union { + struct reg_data_type_bitfield *bitfield; + struct reg_data_type *type; + }; + struct reg_data_type_struct_field *next; +}; + +struct reg_data_type_struct { + uint32_t size; + struct reg_data_type_struct_field *fields; +}; + +struct reg_data_type_flags_field { + const char *name; + struct reg_data_type_bitfield *bitfield; + struct reg_data_type_flags_field *next; +}; + +struct reg_data_type_flags { + uint32_t size; + struct reg_data_type_flags_field *fields; +}; + +enum reg_data_type_class { + REG_TYPE_CLASS_VECTOR, + REG_TYPE_CLASS_UNION, + REG_TYPE_CLASS_STRUCT, + REG_TYPE_CLASS_FLAGS, +}; + +struct reg_data_type { + enum reg_type type; + const char *id; + enum reg_data_type_class type_class; + union { + struct reg_data_type_vector *reg_type_vector; + struct reg_data_type_union *reg_type_union; + struct reg_data_type_struct *reg_type_struct; + struct reg_data_type_flags *reg_type_flags; + }; +}; + struct reg { const char *name; + uint32_t number; + struct reg_feature *feature; + bool caller_save; void *value; bool dirty; bool valid; + bool exist; uint32_t size; + struct reg_data_type *reg_data_type; + const char *group; void *arch_info; const struct reg_arch_type *type; }; |