aboutsummaryrefslogtreecommitdiff
path: root/src/backend/bba.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/bba.h')
-rw-r--r--src/backend/bba.h93
1 files changed, 72 insertions, 21 deletions
diff --git a/src/backend/bba.h b/src/backend/bba.h
index 98c081e..2e77d78 100644
--- a/src/backend/bba.h
+++ b/src/backend/bba.h
@@ -5,34 +5,85 @@
typedef enum BBAOperation {
BBA_OPERATION_ASSIGN,
- BBA_OPERATION_CAST,
- // BBA_OPERATION_TYPE_OF,
- // BBA_OPERATION_IMPORT,
- // BBA_OPERATION_IS_COMPTIME,
- BBA_OPERATION_STACK_ALLOC,
- BBA_OPERATION_HEAP_ALLOC,
- BBA_OPERATION_NEG,
- BBA_OPERATION_ADD,
- BBA_OPERATION_SUB,
- BBA_OPERATION_MUL,
- BBA_OPERATION_DIV,
- BBA_OPERATION_MOD,
- BBA_OPERATION_EQUAL,
- BBA_OPERATION_NOT_EQUAL,
- BBA_OPERATION_GREATER,
- BBA_OPERATION_SMALLER,
- BBA_OPERATION_GREATER_OR_EQUAL,
- BBA_OPERATION_SMALLER_OR_EQUAL,
- BBA_OPERATION_PUTC,
+ 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,
-}BBAOperation;
-typedef struct BBAInstruction {
+ 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 {