summaryrefslogtreecommitdiff
path: root/gen/docs/types.h
blob: 14fb4e0d8c573002c2f6ea5f4873040ede900e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifndef TYPES_H
#define TYPES_H

#include <stdint.h>
#include <stddef.h>

#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