aboutsummaryrefslogtreecommitdiff
path: root/src/backend/bba.h
blob: 2e77d782df2af924c73c6807a6feb82fcc97a6b9 (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
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;