#ifndef TYPES_H #define TYPES_H #include #include #define MAX_NAME 64 #define MAX_LABEL 32 #define MAX_DESC 512 #define MAX_NOTE 512 #define MAX_OPERANDS 128 #define MAX_FIELDS 8 #define MAX_INSTS 256 #define MAX_REGS 64 #define MAX_FMTS 16 #define MAX_CSRS 128 #define MAX_LINE 1024 #define MAX_TOKENS 16 #define MAX_PATH 256 typedef struct { char name[MAX_NAME]; int width; int num_fields; struct { char name[MAX_LABEL]; int high; int low; } fields[MAX_FIELDS]; } IsaFormat; typedef struct { char name[MAX_NAME]; char abbr[MAX_LABEL]; char desc[MAX_DESC]; int preserve; int caller_saved; int arg_reg; int index; } IsaRegister; typedef struct { char name[MAX_NAME]; char fmt_name[MAX_NAME]; uint32_t opcode; uint32_t funct3; uint32_t funct7; uint32_t funct3_valid; uint32_t funct7_valid; char operands[MAX_OPERANDS]; char desc[MAX_DESC]; char note[MAX_NOTE]; char category[MAX_LABEL]; int has_imm; } IsaInstruction; typedef struct { char name[MAX_NAME]; int number; char desc[MAX_DESC]; } IsaCsr; typedef struct { IsaFormat formats[MAX_FMTS]; int num_formats; IsaRegister registers[MAX_REGS]; int num_registers; IsaInstruction instructions[MAX_INSTS]; int num_instructions; IsaCsr csrs[MAX_CSRS]; int num_csrs; char arch_name[MAX_NAME]; char arch_version[MAX_LABEL]; char arch_date[MAX_LABEL]; char arch_status[MAX_LABEL]; } IsaDb; #endif