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
79
80
81
82
83
84
85
86
87
88
89
90
|
#pragma once
#include "compiler/ast-tree.h"
typedef enum BBAOperation {
BBA_OPERATION_ASSIGN,
BBA_OPERATOR_CAST,
BBA_OPERATOR_TYPE_OF,
BBA_OPERATOR_SIZE_OF,
BBA_OPERATOR_IMPORT,
BBA_OPERATOR_IS_COMPTIME,
BBA_OPERATOR_STACK_ALLOC,
BBA_OPERATOR_HEAP_ALLOC,
BBA_OPERATOR_NEG,
BBA_OPERATOR_ADD,
BBA_OPERATOR_SUB,
BBA_OPERATOR_MUL,
BBA_OPERATOR_DIV,
BBA_OPERATOR_MOD,
BBA_OPERATOR_EQUAL,
BBA_OPERATOR_NOT_EQUAL,
BBA_OPERATOR_GREATER,
BBA_OPERATOR_SMALLER,
BBA_OPERATOR_GREATER_OR_EQUAL,
BBA_OPERATOR_SMALLER_OR_EQUAL,
BBA_OPERATOR_PUTC,
BBA_OPERATOR_C_LIBRARY,
BBA_OPERATOR_C_FUNCTION,
BBA_OPERATOR_BITWISE_NOT,
BBA_OPERATOR_BITWISE_AND,
BBA_OPERATOR_BITWISE_XOR,
BBA_OPERATOR_BITWISE_OR,
BBA_OPERATOR_SHIFT_LEFT,
BBA_OPERATOR_SHIFT_RIGHT,
BBA_OPERATION_CALL,
BBA_OPERATOR_CONST_I8,
BBA_OPERATOR_CONST_U8,
BBA_OPERATOR_CONST_I16,
BBA_OPERATOR_CONST_U16,
BBA_OPERATOR_CONST_I32,
BBA_OPERATOR_CONST_U32,
BBA_OPERATOR_CONST_I64,
BBA_OPERATOR_CONST_U64,
#ifdef FLOAT_16_SUPPORT
BBA_OPERATOR_CONST_F16,
#endif
BBA_OPERATOR_CONST_F32,
BBA_OPERATOR_CONST_F64,
BBA_OPERATOR_CONST_F128,
} BBAOperation;
typedef union BBAInstructionValue {
struct BBAInstruction *instruction;
u8 u8;
i8 i8;
u16 u16;
i16 i16;
u32 u32;
i32 i32;
u64 u64;
i64 i64;
#ifdef FLOAT_16_SUPPORT
f16 f16;
#endif
f32 f32;
f64 f64;
f128 f128;
} BBAInstructionValue;
typedef struct BBAInstruction {
BBAOperation operator;
BBAInstructionValue *value;
size_t value_size;
} BBAInstruction;
typedef struct BBABlock {
BBAInstructionValue *params;
size_t params_size;
BBAInstruction **instructions;
size_t instructions_size;
} BBABlock;
typedef struct BBA {
} BBA;
|