From 47177fdfe2758789efe7941de6007a3fb7105f82 Mon Sep 17 00:00:00 2001 From: A404M Date: Sun, 8 Jun 2025 12:19:42 +0330 Subject: generalizing compiler instead of relaying on gcc --- src/compiler/ast-tree.c | 9 +++++++++ src/runner/runner.c | 12 +++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index acbf8ed..b8365af 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -1686,6 +1686,7 @@ AstTree *copyAstTreeBack(AstTree *tree, AstTreeVariables oldVariables[], } printLog("Bad token %d", tree->token); UNREACHABLE; + return NULL; } AstTreeVariable *copyAstTreeBackFindVariable(AstTreeVariable *variable, @@ -2992,6 +2993,7 @@ AstTree *astTreeParseIntValue(const ParserNode *parserNode) { } } UNREACHABLE; + return NULL; } AstTree *astTreeParseString(const ParserNode *parserNode) { @@ -4058,6 +4060,7 @@ bool isConst(AstTree *tree) { } printLog("Unknown token '%d'", tree->token); UNREACHABLE; + return NULL; } bool isLeftValue(AstTree *tree) { @@ -4116,7 +4119,9 @@ bool isLeftValue(AstTree *tree) { case AST_TREE_TOKEN_TYPE_U32: case AST_TREE_TOKEN_TYPE_I64: case AST_TREE_TOKEN_TYPE_U64: +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: +#endif case AST_TREE_TOKEN_TYPE_F32: case AST_TREE_TOKEN_TYPE_F64: case AST_TREE_TOKEN_TYPE_F128: @@ -7066,7 +7071,9 @@ bool setTypesBuiltinUnary(AstTree *tree, AstTreeSetTypesHelper helper, case AST_TREE_TOKEN_TYPE_U32: case AST_TREE_TOKEN_TYPE_I64: case AST_TREE_TOKEN_TYPE_U64: +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: +#endif case AST_TREE_TOKEN_TYPE_F32: case AST_TREE_TOKEN_TYPE_F64: case AST_TREE_TOKEN_TYPE_F128: @@ -8462,7 +8469,9 @@ size_t getSizeOfType(AstTree *type) { return 1; case AST_TREE_TOKEN_TYPE_I16: case AST_TREE_TOKEN_TYPE_U16: +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: +#endif return 2; case AST_TREE_TOKEN_TYPE_I32: case AST_TREE_TOKEN_TYPE_U32: diff --git a/src/runner/runner.c b/src/runner/runner.c index e6dc2b8..2308904 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -7,8 +7,6 @@ #include "utils/type.h" #include #include -#include -#include #include #include #include @@ -77,7 +75,7 @@ } \ } #else -#define doCastAll(left, left_type, type, to) \ +#define doCastAll(left, left_type, to) \ { \ const left_type value = *(left_type *)left->metadata; \ switch (to->token) { \ @@ -1932,9 +1930,11 @@ AstTree *toRawValue(AstTree *value, AstTreeScope *scope) { const size_t size = getSizeOfType(value->type); AstTreeRawValue *rawValue = a404m_malloc(size); switch (value->token) { +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: *(f16 *)rawValue = *(f128 *)value->metadata; break; +#endif case AST_TREE_TOKEN_TYPE_F32: *(f32 *)rawValue = *(f128 *)value->metadata; break; @@ -2022,7 +2022,9 @@ AstTree *toRawValue(AstTree *value, AstTreeScope *scope) { case AST_TREE_TOKEN_TYPE_U32: case AST_TREE_TOKEN_TYPE_I64: case AST_TREE_TOKEN_TYPE_U64: +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: +#endif case AST_TREE_TOKEN_TYPE_F32: case AST_TREE_TOKEN_TYPE_F64: case AST_TREE_TOKEN_TYPE_F128: @@ -2154,7 +2156,9 @@ AstTree *fromRawValue(AstTree *value) { case AST_TREE_TOKEN_TYPE_U32: case AST_TREE_TOKEN_TYPE_I64: case AST_TREE_TOKEN_TYPE_U64: +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: +#endif case AST_TREE_TOKEN_TYPE_F32: case AST_TREE_TOKEN_TYPE_F64: case AST_TREE_TOKEN_TYPE_F128: @@ -2490,8 +2494,10 @@ ffi_type *toFFIType(AstTree *type) { return &ffi_type_sint64; case AST_TREE_TOKEN_TYPE_U64: return &ffi_type_uint64; +#ifdef FLOAT_16_SUPPORT case AST_TREE_TOKEN_TYPE_F16: NOT_IMPLEMENTED; +#endif case AST_TREE_TOKEN_TYPE_F32: return &ffi_type_float; case AST_TREE_TOKEN_TYPE_F64: -- cgit v1.2.3