From 25c10c18cca5150c03f3de256ea140aebf1c3667 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 26 Mar 2026 11:49:39 +0000 Subject: [PATCH] Remove tilde backend --- build.bat | 10 - src/build_settings.cpp | 2 - src/checker.cpp | 3 +- src/entity.cpp | 10 +- src/main.cpp | 50 - src/tilde.cpp | 842 --------- src/tilde.hpp | 386 ---- src/tilde/tb.h | 1309 ------------- src/tilde/tb.lib | Bin 2347218 -> 0 bytes src/tilde/tb_arena.h | 79 - src/tilde/tb_coff.h | 334 ---- src/tilde/tb_elf.h | 170 -- src/tilde/tb_formats.h | 132 -- src/tilde/tb_x64.h | 105 -- src/tilde_builtin.cpp | 592 ------ src/tilde_const.cpp | 1049 ----------- src/tilde_debug.cpp | 482 ----- src/tilde_expr.cpp | 3961 --------------------------------------- src/tilde_proc.cpp | 1327 ------------- src/tilde_stmt.cpp | 2889 ---------------------------- src/tilde_type_info.cpp | 985 ---------- 21 files changed, 3 insertions(+), 14714 deletions(-) delete mode 100644 src/tilde.cpp delete mode 100644 src/tilde.hpp delete mode 100644 src/tilde/tb.h delete mode 100644 src/tilde/tb.lib delete mode 100644 src/tilde/tb_arena.h delete mode 100644 src/tilde/tb_coff.h delete mode 100644 src/tilde/tb_elf.h delete mode 100644 src/tilde/tb_formats.h delete mode 100644 src/tilde/tb_x64.h delete mode 100644 src/tilde_builtin.cpp delete mode 100644 src/tilde_const.cpp delete mode 100644 src/tilde_debug.cpp delete mode 100644 src/tilde_expr.cpp delete mode 100644 src/tilde_proc.cpp delete mode 100644 src/tilde_stmt.cpp delete mode 100644 src/tilde_type_info.cpp diff --git a/build.bat b/build.bat index b6e8b890d..9cddcc375 100644 --- a/build.bat +++ b/build.bat @@ -107,16 +107,6 @@ set libs= ^ set odin_res=misc\odin.res set odin_rc=misc\odin.rc -rem DO NOT TOUCH! -rem THIS TILDE STUFF IS FOR DEVELOPMENT ONLY! -set tilde_backend=0 -if %tilde_backend% EQU 1 ( - set libs=%libs% src\tilde\tb.lib - set compiler_defines=%compiler_defines% -DODIN_TILDE_BACKEND -) -rem DO NOT TOUCH! - - set linker_flags= -incremental:no -opt:ref -subsystem:console -MANIFEST:EMBED if %release_mode% EQU 0 ( rem Debug diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 9663d5db5..41849fd6b 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -607,8 +607,6 @@ struct BuildContext { isize max_error_count; - bool tilde_backend; - u32 cmd_doc_flags; Array extra_packages; diff --git a/src/checker.cpp b/src/checker.cpp index ce8042b41..0d82ec9f9 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1295,7 +1295,6 @@ gb_internal void init_universal(void) { add_global_bool_constant("ODIN_NO_RTTI", bc->no_rtti); add_global_bool_constant("ODIN_VALGRIND_SUPPORT", bc->ODIN_VALGRIND_SUPPORT); - add_global_bool_constant("ODIN_TILDE", bc->tilde_backend); add_global_constant("ODIN_COMPILE_TIMESTAMP", t_untyped_integer, exact_value_i64(odin_compile_timestamp())); @@ -3009,7 +3008,7 @@ gb_internal void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("aeabi_d2h") ); - FORCE_ADD_RUNTIME_ENTITIES(is_arch_wasm() && !build_context.tilde_backend, + FORCE_ADD_RUNTIME_ENTITIES(is_arch_wasm(), // // Extended data type internal procedures // str_lit("umodti3"), // str_lit("udivti3"), diff --git a/src/entity.cpp b/src/entity.cpp index 5062599de..7bb6e88ca 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -184,14 +184,8 @@ struct Entity { Entity * aliased_of; - union { - std::atomic code_gen_module; - struct cgModule *cg_module; - }; - union { - std::atomic code_gen_procedure; - struct cgProcedure *cg_procedure; - }; + std::atomic code_gen_module; + std::atomic code_gen_procedure; u64 order_in_src; String deprecated_message; diff --git a/src/main.cpp b/src/main.cpp index 4d68d3d73..a79ac77a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,16 +76,6 @@ gb_global Timings global_timings = {0}; #include "linker.cpp" #include "bundle_command.cpp" -#if defined(GB_SYSTEM_WINDOWS) && defined(ODIN_TILDE_BACKEND) -#define ALLOW_TILDE 1 -#else -#define ALLOW_TILDE 0 -#endif - -#if ALLOW_TILDE -#include "tilde.cpp" -#endif - #include "llvm_backend.cpp" #include "bug_report.cpp" @@ -414,8 +404,6 @@ enum BuildFlagKind { BuildFlag_InternalLLVMMem2Reg, BuildFlag_InternalEnableRVO, - BuildFlag_Tilde, - BuildFlag_Sanitize, BuildFlag_LTO, @@ -647,9 +635,6 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_InternalLLVMMem2Reg, str_lit("internal-llvm-mem2reg"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalEnableRVO, str_lit("internal-enable-rvo"), BuildFlagParam_None, Command_all); -#if ALLOW_TILDE - add_flag(&build_flags, BuildFlag_Tilde, str_lit("tilde"), BuildFlagParam_None, Command__does_build); -#endif add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true); add_flag(&build_flags, BuildFlag_LTO, str_lit("lto"), BuildFlagParam_String, Command__does_build); @@ -1646,11 +1631,6 @@ gb_internal bool parse_build_flags(Array args) { break; - - case BuildFlag_Tilde: - build_context.tilde_backend = true; - break; - case BuildFlag_Sanitize: GB_ASSERT(value.kind == ExactValue_String); @@ -4120,36 +4100,6 @@ int main(int arg_count, char const **arg_ptr) { failed_to_cache_parsing = true; } -#if ALLOW_TILDE - if (build_context.tilde_backend) { - LinkerData linker_data = {}; - MAIN_TIME_SECTION("Tilde Code Gen"); - if (!cg_generate_code(checker, &linker_data)) { - return 1; - } - - switch (build_context.build_mode) { - case BuildMode_Executable: - case BuildMode_StaticLibrary: - case BuildMode_DynamicLibrary: - i32 result = linker_stage(&linker_data); - if (result) { - if (build_context.show_timings) { - show_timings(checker, &global_timings); - } - if (build_context.show_import_graph) { - show_import_graph(checker); - } - - if (build_context.export_dependencies_format != DependenciesExportUnspecified) { - export_dependencies(checker); - } - return result; - } - break; - } - } else -#endif { lbGenerator *gen = permanent_alloc_item(); if (!lb_init_generator(gen, checker)) { diff --git a/src/tilde.cpp b/src/tilde.cpp deleted file mode 100644 index f6fed0f9a..000000000 --- a/src/tilde.cpp +++ /dev/null @@ -1,842 +0,0 @@ -#include "tilde.hpp" - - -gb_global Slice global_tb_arenas; - -gb_internal TB_Arena *cg_arena(void) { - return &global_tb_arenas[current_thread_index()]; -} - -gb_internal void cg_global_arena_init(void) { - global_tb_arenas = slice_make(permanent_allocator(), global_thread_pool.threads.count); - for_array(i, global_tb_arenas) { - tb_arena_create(&global_tb_arenas[i], 2ull<<20); - } -} - -// returns TB_TYPE_VOID if not trivially possible -gb_internal TB_DataType cg_data_type(Type *t) { - GB_ASSERT(t != nullptr); - t = core_type(t); - i64 sz = type_size_of(t); - switch (t->kind) { - case Type_Basic: - switch (t->Basic.kind) { - case Basic_bool: - case Basic_b8: - case Basic_b16: - case Basic_b32: - case Basic_b64: - - case Basic_i8: - case Basic_u8: - case Basic_i16: - case Basic_u16: - case Basic_i32: - case Basic_u32: - case Basic_i64: - case Basic_u64: - case Basic_i128: - case Basic_u128: - - case Basic_rune: - - case Basic_int: - case Basic_uint: - case Basic_uintptr: - case Basic_typeid: - return TB_TYPE_INTN(cast(u16)gb_min(8*sz, 64)); - - case Basic_f16: return TB_TYPE_F16; - case Basic_f32: return TB_TYPE_F32; - case Basic_f64: return TB_TYPE_F64; - - case Basic_rawptr: return TB_TYPE_PTR; - case Basic_cstring: return TB_TYPE_PTR; - - - // Endian Specific Types - case Basic_i16le: - case Basic_u16le: - case Basic_i32le: - case Basic_u32le: - case Basic_i64le: - case Basic_u64le: - case Basic_i128le: - case Basic_u128le: - case Basic_i16be: - case Basic_u16be: - case Basic_i32be: - case Basic_u32be: - case Basic_i64be: - case Basic_u64be: - case Basic_i128be: - case Basic_u128be: - return TB_TYPE_INTN(cast(u16)gb_min(8*sz, 64)); - - case Basic_f16le: return TB_TYPE_F16; - case Basic_f32le: return TB_TYPE_F32; - case Basic_f64le: return TB_TYPE_F64; - - case Basic_f16be: return TB_TYPE_F16; - case Basic_f32be: return TB_TYPE_F32; - case Basic_f64be: return TB_TYPE_F64; - } - break; - - case Type_Pointer: - case Type_MultiPointer: - case Type_Proc: - return TB_TYPE_PTR; - - case Type_BitSet: - return cg_data_type(bit_set_to_int(t)); - - case Type_RelativePointer: - return cg_data_type(t->RelativePointer.base_integer); - } - - // unknown - return {}; -} - - -gb_internal cgValue cg_value(TB_Global *g, Type *type) { - return cg_value((TB_Symbol *)g, type); -} -gb_internal cgValue cg_value(TB_External *e, Type *type) { - return cg_value((TB_Symbol *)e, type); -} -gb_internal cgValue cg_value(TB_Function *f, Type *type) { - return cg_value((TB_Symbol *)f, type); -} -gb_internal cgValue cg_value(TB_Symbol *s, Type *type) { - cgValue v = {}; - v.kind = cgValue_Symbol; - v.type = type; - v.symbol = s; - return v; -} -gb_internal cgValue cg_value(TB_Node *node, Type *type) { - cgValue v = {}; - v.kind = cgValue_Value; - v.type = type; - v.node = node; - return v; -} -gb_internal cgValue cg_lvalue_addr(TB_Node *node, Type *type) { - GB_ASSERT(node->dt.type == TB_PTR); - cgValue v = {}; - v.kind = cgValue_Addr; - v.type = type; - v.node = node; - return v; -} - -gb_internal cgValue cg_lvalue_addr_to_value(cgValue v) { - if (v.kind == cgValue_Value) { - GB_ASSERT(is_type_pointer(v.type)); - GB_ASSERT(v.node->dt.type == TB_PTR); - } else { - GB_ASSERT(v.kind == cgValue_Addr); - GB_ASSERT(v.node->dt.type == TB_PTR); - v.kind = cgValue_Value; - v.type = alloc_type_pointer(v.type); - } - return v; -} - -gb_internal cgValue cg_value_multi(cgValueMulti *multi, Type *type) { - GB_ASSERT(type->kind == Type_Tuple); - GB_ASSERT(multi != nullptr); - GB_ASSERT(type->Tuple.variables.count > 1); - GB_ASSERT(multi->values.count == type->Tuple.variables.count); - cgValue v = {}; - v.kind = cgValue_Multi; - v.type = type; - v.multi = multi; - return v; -} - -gb_internal cgValue cg_value_multi(Slice const &values, Type *type) { - cgValueMulti *multi = gb_alloc_item(permanent_allocator(), cgValueMulti); - multi->values = values; - return cg_value_multi(multi, type); -} - - -gb_internal cgValue cg_value_multi2(cgValue const &x, cgValue const &y, Type *type) { - GB_ASSERT(type->kind == Type_Tuple); - GB_ASSERT(type->Tuple.variables.count == 2); - cgValueMulti *multi = gb_alloc_item(permanent_allocator(), cgValueMulti); - multi->values = slice_make(permanent_allocator(), 2); - multi->values[0] = x; - multi->values[1] = y; - return cg_value_multi(multi, type); -} - - -gb_internal cgAddr cg_addr(cgValue const &value) { - GB_ASSERT(value.kind != cgValue_Multi); - cgAddr addr = {}; - addr.kind = cgAddr_Default; - addr.addr = value; - if (addr.addr.kind == cgValue_Addr) { - GB_ASSERT(addr.addr.node != nullptr); - addr.addr.kind = cgValue_Value; - addr.addr.type = alloc_type_pointer(addr.addr.type); - } - return addr; -} - -gb_internal cgAddr cg_addr_map(cgValue addr, cgValue map_key, Type *map_type, Type *map_result) { - GB_ASSERT(is_type_pointer(addr.type)); - Type *mt = type_deref(addr.type); - GB_ASSERT(is_type_map(mt)); - - cgAddr v = {cgAddr_Map, addr}; - v.map.key = map_key; - v.map.type = map_type; - v.map.result = map_result; - return v; -} - -gb_internal cgAddr cg_addr_soa_variable(cgValue addr, cgValue index, Ast *index_expr) { - cgAddr v = {cgAddr_SoaVariable, addr}; - v.soa.index = index; - v.soa.index_expr = index_expr; - return v; -} - - - -gb_internal void cg_set_debug_pos_from_node(cgProcedure *p, Ast *node) { - if (node) { - TokenPos pos = ast_token(node).pos; - TB_SourceFile **file = map_get(&p->module->file_id_map, cast(uintptr)pos.file_id); - if (file) { - tb_inst_location(p->func, *file, pos.line, pos.column); - } - } -} - -gb_internal void cg_add_symbol(cgModule *m, Entity *e, TB_Symbol *symbol) { - if (e) { - rw_mutex_lock(&m->values_mutex); - map_set(&m->symbols, e, symbol); - rw_mutex_unlock(&m->values_mutex); - } -} - -gb_internal void cg_add_entity(cgModule *m, Entity *e, cgValue const &val) { - if (e) { - rw_mutex_lock(&m->values_mutex); - GB_ASSERT(val.node != nullptr); - map_set(&m->values, e, val); - rw_mutex_unlock(&m->values_mutex); - } -} - -gb_internal void cg_add_member(cgModule *m, String const &name, cgValue const &val) { - if (name.len > 0) { - rw_mutex_lock(&m->values_mutex); - string_map_set(&m->members, name, val); - rw_mutex_unlock(&m->values_mutex); - } -} - -gb_internal void cg_add_procedure_value(cgModule *m, cgProcedure *p) { - rw_mutex_lock(&m->values_mutex); - if (p->entity != nullptr) { - map_set(&m->procedure_values, p->func, p->entity); - if (p->symbol != nullptr) { - map_set(&m->symbols, p->entity, p->symbol); - } - } - string_map_set(&m->procedures, p->name, p); - rw_mutex_unlock(&m->values_mutex); - -} - -gb_internal TB_Symbol *cg_find_symbol_from_entity(cgModule *m, Entity *e) { - GB_ASSERT(e != nullptr); - - rw_mutex_lock(&m->values_mutex); - TB_Symbol **found = map_get(&m->symbols, e); - if (found) { - rw_mutex_unlock(&m->values_mutex); - return *found; - } - - String link_name = cg_get_entity_name(m, e); - cgProcedure **proc_found = string_map_get(&m->procedures, link_name); - if (proc_found) { - TB_Symbol *symbol = (*proc_found)->symbol; - map_set(&m->symbols, e, symbol); - rw_mutex_unlock(&m->values_mutex); - return symbol; - } - rw_mutex_unlock(&m->values_mutex); - - if (e->kind == Entity_Procedure) { - debugf("[Tilde] try to generate procedure %.*s as it was not in the minimum_dependency_set", LIT(e->token.string)); - // IMPORTANT TODO(bill): This is an utter bodge, try and fix this shit - cgProcedure *p = cg_procedure_create(m, e); - if (p != nullptr) { - GB_ASSERT(p->symbol != nullptr); - cg_add_procedure_to_queue(p); - return p->symbol; - } - } - - - GB_PANIC("could not find entity's symbol %.*s", LIT(e->token.string)); - return nullptr; -} - - -struct cgGlobalVariable { - cgValue var; - cgValue init; - DeclInfo *decl; - bool is_initialized; -}; - -// Returns already_has_entry_point -gb_internal bool cg_global_variables_create(cgModule *m, Array *global_variables) { - isize global_variable_max_count = 0; - bool already_has_entry_point = false; - - for (Entity *e : m->info->entities) { - String name = e->token.string; - - if (e->kind == Entity_Variable) { - global_variable_max_count++; - } else if (e->kind == Entity_Procedure) { - if ((e->scope->flags&ScopeFlag_Init) && name == "main") { - GB_ASSERT(e == m->info->entry_point); - } - if (build_context.command_kind == Command_test && - (e->Procedure.is_export || e->Procedure.link_name.len > 0)) { - String link_name = e->Procedure.link_name; - if (e->pkg->kind == Package_Runtime) { - if (link_name == "main" || - link_name == "DllMain" || - link_name == "WinMain" || - link_name == "wWinMain" || - link_name == "mainCRTStartup" || - link_name == "_start") { - already_has_entry_point = true; - } - } - } - } - } - *global_variables = array_make(permanent_allocator(), 0, global_variable_max_count); - - auto *min_dep_set = &m->info->minimum_dependency_set; - - for (DeclInfo *d : m->info->variable_init_order) { - Entity *e = d->entity; - - if ((e->scope->flags & ScopeFlag_File) == 0) { - continue; - } - - if (!ptr_set_exists(min_dep_set, e)) { - continue; - } - - DeclInfo *decl = decl_info_of_entity(e); - if (decl == nullptr) { - continue; - } - GB_ASSERT(e->kind == Entity_Variable); - - bool is_foreign = e->Variable.is_foreign; - bool is_export = e->Variable.is_export; - - String name = cg_get_entity_name(m, e); - - TB_Linkage linkage = TB_LINKAGE_PRIVATE; - - if (is_foreign) { - linkage = TB_LINKAGE_PUBLIC; - // lb_add_foreign_library_path(m, e->Variable.foreign_library); - } else if (is_export) { - linkage = TB_LINKAGE_PUBLIC; - } - // lb_set_linkage_from_entity_flags(m, g.value, e->flags); - - TB_DebugType *debug_type = cg_debug_type(m, e->type); - TB_Global *global = tb_global_create(m->mod, name.len, cast(char const *)name.text, debug_type, linkage); - cgValue g = cg_value(global, alloc_type_pointer(e->type)); - - TB_ModuleSectionHandle section = tb_module_get_data(m->mod); - - if (e->Variable.thread_local_model != "") { - section = tb_module_get_tls(m->mod); - } - if (e->Variable.link_section.len > 0) { - // TODO(bill): custom module sections - // LLVMSetSection(g.value, alloc_cstring(permanent_allocator(), e->Variable.link_section)); - } - - - cgGlobalVariable var = {}; - var.var = g; - var.decl = decl; - - if (decl->init_expr != nullptr) { - TypeAndValue tav = type_and_value_of_expr(decl->init_expr); - - isize max_regions = cg_global_const_calculate_region_count(tav.value, e->type); - tb_global_set_storage(m->mod, section, global, type_size_of(e->type), type_align_of(e->type), max_regions); - - if (tav.mode == Addressing_Constant && - tav.value.kind != ExactValue_Invalid) { - cg_global_const_add_region(m, tav.value, e->type, global, 0); - var.is_initialized = true; - } - if (!var.is_initialized && is_type_untyped_nil(tav.type)) { - var.is_initialized = true; - } - } else { - var.is_initialized = true; - // TODO(bill): is this even needed; - i64 max_regions = cg_global_const_calculate_region_count_from_basic_type(e->type); - tb_global_set_storage(m->mod, section, global, type_size_of(e->type), type_align_of(e->type), max_regions); - } - - array_add(global_variables, var); - - cg_add_symbol(m, e, cast(TB_Symbol *)global); - cg_add_entity(m, e, g); - cg_add_member(m, name, g); - } - - cg_setup_type_info_data(m); - - return already_has_entry_point; -} - -gb_internal void cg_global_variables_initialize(cgProcedure *p, Array *global_variables) { - for (cgGlobalVariable &var : *global_variables) { - if (var.is_initialized) { - continue; - } - cgValue src = cg_build_expr(p, var.decl->init_expr); - cgValue dst = cg_flatten_value(p, var.var); - cg_emit_store(p, dst, src); - } -} - - -gb_internal cgModule *cg_module_create(Checker *c) { - cgModule *m = gb_alloc_item(permanent_allocator(), cgModule); - - m->checker = c; - m->info = &c->info; - - - TB_FeatureSet feature_set = {}; - bool is_jit = false; - m->mod = tb_module_create(TB_ARCH_X86_64, TB_SYSTEM_WINDOWS, &feature_set, is_jit); - tb_module_set_tls_index(m->mod, 10, "_tls_index"); - - map_init(&m->values); - map_init(&m->symbols); - map_init(&m->file_id_map); - map_init(&m->debug_type_map); - map_init(&m->proc_debug_type_map); - map_init(&m->proc_proto_map); - map_init(&m->anonymous_proc_lits_map); - map_init(&m->equal_procs); - map_init(&m->hasher_procs); - map_init(&m->map_get_procs); - map_init(&m->map_set_procs); - map_init(&m->map_info_map); - map_init(&m->map_cell_info_map); - - array_init(&m->single_threaded_procedure_queue, heap_allocator()); - - - for_array(id, global_files) { - if (AstFile *f = global_files[id]) { - char const *path = alloc_cstring(temporary_allocator(), f->fullpath); - TB_SourceFile *file = tb_get_source_file(m->mod, path); - map_set(&m->file_id_map, cast(uintptr)id, file); - } - } - - return m; -} - -gb_internal void cg_module_destroy(cgModule *m) { - map_destroy(&m->values); - map_destroy(&m->symbols); - map_destroy(&m->file_id_map); - map_destroy(&m->debug_type_map); - map_destroy(&m->proc_debug_type_map); - map_destroy(&m->proc_proto_map); - map_destroy(&m->anonymous_proc_lits_map); - map_destroy(&m->equal_procs); - map_destroy(&m->hasher_procs); - map_destroy(&m->map_get_procs); - map_destroy(&m->map_set_procs); - map_destroy(&m->map_info_map); - map_destroy(&m->map_cell_info_map); - - array_free(&m->single_threaded_procedure_queue); - - tb_module_destroy(m->mod); -} - -gb_internal String cg_set_nested_type_name_ir_mangled_name(Entity *e, cgProcedure *p) { - // NOTE(bill, 2020-03-08): A polymorphic procedure may take a nested type declaration - // and as a result, the declaration does not have time to determine what it should be - - GB_ASSERT(e != nullptr && e->kind == Entity_TypeName); - if (e->TypeName.ir_mangled_name.len != 0) { - return e->TypeName.ir_mangled_name; - } - GB_ASSERT((e->scope->flags & ScopeFlag_File) == 0); - - if (p == nullptr) { - Entity *proc = nullptr; - if (e->parent_proc_decl != nullptr) { - proc = e->parent_proc_decl->entity; - } else { - Scope *scope = e->scope; - while (scope != nullptr && (scope->flags & ScopeFlag_Proc) == 0) { - scope = scope->parent; - } - GB_ASSERT(scope != nullptr); - GB_ASSERT(scope->flags & ScopeFlag_Proc); - proc = scope->procedure_entity; - } - GB_ASSERT(proc->kind == Entity_Procedure); - if (proc->cg_procedure != nullptr) { - p = proc->cg_procedure; - } - } - - // NOTE(bill): Generate a new name - // parent_proc.name-guid - String ts_name = e->token.string; - - if (p != nullptr) { - isize name_len = p->name.len + 1 + ts_name.len + 1 + 10 + 1; - char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - u32 guid = 1+p->module->nested_type_name_guid.fetch_add(1); - name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%u", LIT(p->name), LIT(ts_name), guid); - - String name = make_string(cast(u8 *)name_text, name_len-1); - e->TypeName.ir_mangled_name = name; - return name; - } else { - // NOTE(bill): a nested type be required before its parameter procedure exists. Just give it a temp name for now - isize name_len = 9 + 1 + ts_name.len + 1 + 10 + 1; - char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - static std::atomic guid; - name_len = gb_snprintf(name_text, name_len, "_internal" ABI_PKG_NAME_SEPARATOR "%.*s-%u", LIT(ts_name), 1+guid.fetch_add(1)); - - String name = make_string(cast(u8 *)name_text, name_len-1); - e->TypeName.ir_mangled_name = name; - return name; - } -} - -gb_internal String cg_mangle_name(cgModule *m, Entity *e) { - String name = e->token.string; - - AstPackage *pkg = e->pkg; - GB_ASSERT_MSG(pkg != nullptr, "Missing package for '%.*s'", LIT(name)); - String pkgn = pkg->name; - GB_ASSERT(!rune_is_digit(pkgn[0])); - if (pkgn == "llvm") { - GB_PANIC("llvm. entities are not allowed with the tilde backend"); - } - - isize max_len = pkgn.len + 1 + name.len + 1; - bool require_suffix_id = is_type_polymorphic(e->type, true); - - if ((e->scope->flags & (ScopeFlag_File | ScopeFlag_Pkg)) == 0) { - require_suffix_id = true; - } else if (is_blank_ident(e->token)) { - require_suffix_id = true; - }if (e->flags & EntityFlag_NotExported) { - require_suffix_id = true; - } - - if (require_suffix_id) { - max_len += 21; - } - - char *new_name = gb_alloc_array(permanent_allocator(), char, max_len); - isize new_name_len = gb_snprintf( - new_name, max_len, - "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s", LIT(pkgn), LIT(name) - ); - if (require_suffix_id) { - char *str = new_name + new_name_len-1; - isize len = max_len-new_name_len; - isize extra = gb_snprintf(str, len, "-%llu", cast(unsigned long long)e->id); - new_name_len += extra-1; - } - - String mangled_name = make_string((u8 const *)new_name, new_name_len-1); - return mangled_name; -} - -gb_internal String cg_get_entity_name(cgModule *m, Entity *e) { - if (e != nullptr && e->kind == Entity_TypeName && e->TypeName.ir_mangled_name.len != 0) { - return e->TypeName.ir_mangled_name; - } - GB_ASSERT(e != nullptr); - - if (e->pkg == nullptr) { - return e->token.string; - } - - if (e->kind == Entity_TypeName && (e->scope->flags & ScopeFlag_File) == 0) { - return cg_set_nested_type_name_ir_mangled_name(e, nullptr); - } - - String name = {}; - - bool no_name_mangle = false; - - if (e->kind == Entity_Variable) { - bool is_foreign = e->Variable.is_foreign; - bool is_export = e->Variable.is_export; - no_name_mangle = e->Variable.link_name.len > 0 || is_foreign || is_export; - if (e->Variable.link_name.len > 0) { - return e->Variable.link_name; - } - } else if (e->kind == Entity_Procedure && e->Procedure.link_name.len > 0) { - return e->Procedure.link_name; - } else if (e->kind == Entity_Procedure && e->Procedure.is_export) { - no_name_mangle = true; - } - - if (!no_name_mangle) { - name = cg_mangle_name(m, e); - } - if (name.len == 0) { - name = e->token.string; - } - - if (e->kind == Entity_TypeName) { - e->TypeName.ir_mangled_name = name; - } else if (e->kind == Entity_Procedure) { - e->Procedure.link_name = name; - } - - return name; -} - -#include "tilde_const.cpp" -#include "tilde_debug.cpp" -#include "tilde_expr.cpp" -#include "tilde_builtin.cpp" -#include "tilde_type_info.cpp" -#include "tilde_proc.cpp" -#include "tilde_stmt.cpp" - - -gb_internal String cg_filepath_obj_for_module(cgModule *m, bool use_assembly) { - String path = concatenate3_strings(permanent_allocator(), - build_context.build_paths[BuildPath_Output].basename, - STR_LIT("/"), - build_context.build_paths[BuildPath_Output].name - ); - - // if (m->file) { - // char buf[32] = {}; - // isize n = gb_snprintf(buf, gb_size_of(buf), "-%u", m->file->id); - // String suffix = make_string((u8 *)buf, n-1); - // path = concatenate_strings(permanent_allocator(), path, suffix); - // } else if (m->pkg) { - // path = concatenate3_strings(permanent_allocator(), path, STR_LIT("-"), m->pkg->name); - // } - - String ext = {}; - - if (use_assembly) { - ext = STR_LIT(".S"); - } else { - if (is_arch_wasm()) { - ext = STR_LIT(".wasm.o"); - } else { - switch (build_context.metrics.os) { - case TargetOs_windows: - ext = STR_LIT(".obj"); - break; - default: - case TargetOs_darwin: - case TargetOs_linux: - case TargetOs_essence: - ext = STR_LIT(".o"); - break; - - case TargetOs_freestanding: - switch (build_context.metrics.abi) { - default: - case TargetABI_Default: - case TargetABI_SysV: - ext = STR_LIT(".o"); - break; - case TargetABI_Win64: - ext = STR_LIT(".obj"); - break; - } - break; - } - } - } - - return concatenate_strings(permanent_allocator(), path, ext); -} - - -gb_internal WORKER_TASK_PROC(cg_procedure_generate_worker_proc) { - cgProcedure *p = cast(cgProcedure *)data; - cg_procedure_generate(p); - return 0; -} - -gb_internal void cg_add_procedure_to_queue(cgProcedure *p) { - if (p == nullptr) { - return; - } - cgModule *m = p->module; - if (m->do_threading) { - thread_pool_add_task(cg_procedure_generate_worker_proc, p); - } else { - array_add(&m->single_threaded_procedure_queue, p); - } -} - -gb_internal bool cg_generate_code(Checker *c, LinkerData *linker_data) { - TIME_SECTION("Tilde Module Initializtion"); - - CheckerInfo *info = &c->info; - - linker_data_init(linker_data, info, c->parser->init_fullpath); - - #if defined(GB_SYSTEM_OSX) - linker_enable_system_library_linking(linker_data); - #endif - - cg_global_arena_init(); - - cgModule *m = cg_module_create(c); - defer (cg_module_destroy(m)); - - m->do_threading = false; - - TIME_SECTION("Tilde Global Variables"); - - Array global_variables = {}; - bool already_has_entry_point = cg_global_variables_create(m, &global_variables); - gb_unused(already_has_entry_point); - - if (true) { - Type *proc_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin); - cgProcedure *p = cg_procedure_create_dummy(m, str_lit(CG_STARTUP_RUNTIME_PROC_NAME), proc_type); - p->is_startup = true; - cg_startup_runtime_proc = p; - } - - if (true) { - Type *proc_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin); - cgProcedure *p = cg_procedure_create_dummy(m, str_lit(CG_CLEANUP_RUNTIME_PROC_NAME), proc_type); - p->is_startup = true; - cg_cleanup_runtime_proc = p; - } - - auto *min_dep_set = &info->minimum_dependency_set; - - Array procedures_to_generate = {}; - array_init(&procedures_to_generate, heap_allocator()); - defer (array_free(&procedures_to_generate)); - - for (Entity *e : info->entities) { - String name = e->token.string; - Scope *scope = e->scope; - - if ((scope->flags & ScopeFlag_File) == 0) { - continue; - } - - Scope *package_scope = scope->parent; - GB_ASSERT(package_scope->flags & ScopeFlag_Pkg); - - if (e->kind != Entity_Procedure) { - continue; - } - - if (!ptr_set_exists(min_dep_set, e)) { - // NOTE(bill): Nothing depends upon it so doesn't need to be built - continue; - } - if (cgProcedure *p = cg_procedure_create(m, e)) { - array_add(&procedures_to_generate, p); - } - } - for (cgProcedure *p : procedures_to_generate) { - cg_add_procedure_to_queue(p); - } - - if (!m->do_threading) { - for (isize i = 0; i < m->single_threaded_procedure_queue.count; i++) { - cgProcedure *p = m->single_threaded_procedure_queue[i]; - cg_procedure_generate(p); - } - } - - thread_pool_wait(); - - { - cgProcedure *p = cg_startup_runtime_proc; - cg_procedure_begin(p); - cg_global_variables_initialize(p, &global_variables); - tb_inst_ret(p->func, 0, nullptr); - cg_procedure_end(p); - } - { - cgProcedure *p = cg_cleanup_runtime_proc; - cg_procedure_begin(p); - tb_inst_ret(p->func, 0, nullptr); - cg_procedure_end(p); - } - - - TB_DebugFormat debug_format = TB_DEBUGFMT_NONE; - if (build_context.ODIN_DEBUG) { - switch (build_context.metrics.os) { - case TargetOs_windows: - debug_format = TB_DEBUGFMT_CODEVIEW; - break; - case TargetOs_darwin: - case TargetOs_linux: - case TargetOs_essence: - case TargetOs_freebsd: - case TargetOs_openbsd: - case TargetOs_haiku: - debug_format = TB_DEBUGFMT_DWARF; - break; - } - } - TB_ExportBuffer export_buffer = tb_module_object_export(m->mod, debug_format); - defer (tb_export_buffer_free(export_buffer)); - - String filepath_obj = cg_filepath_obj_for_module(m, false); - array_add(&linker_data->output_object_paths, filepath_obj); - GB_ASSERT(tb_export_buffer_to_file(export_buffer, cast(char const *)filepath_obj.text)); - - return true; -} - -#undef ABI_PKG_NAME_SEPARATOR diff --git a/src/tilde.hpp b/src/tilde.hpp deleted file mode 100644 index d141b2330..000000000 --- a/src/tilde.hpp +++ /dev/null @@ -1,386 +0,0 @@ -#if defined(GB_SYSTEM_WINDOWS) - #pragma warning(push) - #pragma warning(disable: 4200) - #pragma warning(disable: 4201) - #define restrict gb_restrict -#endif - -#include "tilde/tb.h" -#include "tilde/tb_arena.h" - -#define TB_TYPE_F16 TB_DataType{ { TB_INT, 16 } } -#define TB_TYPE_I128 TB_DataType{ { TB_INT, 128 } } -#define TB_TYPE_INT TB_TYPE_INTN(cast(u16)(8*build_context.int_size)) -#define TB_TYPE_INTPTR TB_TYPE_INTN(cast(u16)(8*build_context.ptr_size)) - -#if defined(GB_SYSTEM_WINDOWS) - #pragma warning(pop) -#endif - -#define CG_STARTUP_RUNTIME_PROC_NAME "__$startup_runtime" -#define CG_CLEANUP_RUNTIME_PROC_NAME "__$cleanup_runtime" -#define CG_STARTUP_TYPE_INFO_PROC_NAME "__$startup_type_info" -#define CG_TYPE_INFO_DATA_NAME "__$type_info_data" -#define CG_TYPE_INFO_TYPES_NAME "__$type_info_types_data" -#define CG_TYPE_INFO_NAMES_NAME "__$type_info_names_data" -#define CG_TYPE_INFO_OFFSETS_NAME "__$type_info_offsets_data" -#define CG_TYPE_INFO_USINGS_NAME "__$type_info_usings_data" -#define CG_TYPE_INFO_TAGS_NAME "__$type_info_tags_data" -#define CG_TYPE_INFO_ENUM_VALUES_NAME "__$type_info_enum_values_data" - -struct cgModule; - - -enum cgValueKind : u32 { - cgValue_Value, // rvalue - cgValue_Addr, // lvalue - cgValue_Symbol, // global - cgValue_Multi, // multiple values -}; - -struct cgValueMulti; - -struct cgValue { - cgValueKind kind; - Type * type; - union { - // NOTE: any value in this union must be a pointer - TB_Symbol * symbol; - TB_Node * node; - cgValueMulti *multi; - }; -}; - -struct cgValueMulti { - Slice values; -}; - - -enum cgAddrKind { - cgAddr_Default, - cgAddr_Map, - cgAddr_Context, - cgAddr_SoaVariable, - - cgAddr_RelativePointer, - cgAddr_RelativeSlice, - - cgAddr_Swizzle, - cgAddr_SwizzleLarge, -}; - -struct cgAddr { - cgAddrKind kind; - cgValue addr; - union { - struct { - cgValue key; - Type *type; - Type *result; - } map; - struct { - Selection sel; - } ctx; - struct { - cgValue index; - Ast *index_expr; - } soa; - struct { - cgValue index; - Ast *node; - } index_set; - struct { - bool deref; - } relative; - struct { - Type *type; - u8 count; // 2, 3, or 4 components - u8 indices[4]; - } swizzle; - struct { - Type *type; - Slice indices; - } swizzle_large; - }; -}; - - -struct cgTargetList { - cgTargetList *prev; - bool is_block; - // control regions - TB_Node * break_; - TB_Node * continue_; - TB_Node * fallthrough_; -}; - -struct cgBranchRegions { - Ast * label; - TB_Node *break_; - TB_Node *continue_; -}; - -enum cgDeferExitKind { - cgDeferExit_Default, - cgDeferExit_Return, - cgDeferExit_Branch, -}; - -enum cgDeferKind { - cgDefer_Node, - cgDefer_Proc, -}; - -struct cgDefer { - cgDeferKind kind; - isize scope_index; - isize context_stack_count; - TB_Node * control_region; - union { - Ast *stmt; - struct { - cgValue deferred; - Slice result_as_args; - } proc; - }; -}; - - -struct cgContextData { - cgAddr ctx; - isize scope_index; - isize uses; -}; - -struct cgControlRegion { - TB_Node *control_region; - isize scope_index; -}; - -struct cgProcedure { - u32 flags; - u16 state_flags; - - cgProcedure *parent; - Array children; - - TB_Function *func; - TB_FunctionPrototype *proto; - TB_Symbol *symbol; - - Entity * entity; - cgModule *module; - String name; - Type * type; - Ast * type_expr; - Ast * body; - u64 tags; - ProcInlining inlining; - bool is_foreign; - bool is_export; - bool is_entry_point; - bool is_startup; - - TB_DebugType *debug_type; - - cgValue value; - - Ast *curr_stmt; - - cgTargetList * target_list; - Array defer_stack; - Array scope_stack; - Array context_stack; - - Array control_regions; - Array branch_regions; - - Scope *curr_scope; - i32 scope_index; - bool in_multi_assignment; - isize split_returns_index; - bool return_by_ptr; - - PtrMap variable_map; - PtrMap soa_values_map; -}; - - -struct cgModule { - TB_Module * mod; - Checker * checker; - CheckerInfo *info; - LinkerData * linker_data; - - bool do_threading; - Array single_threaded_procedure_queue; - - RwMutex values_mutex; - PtrMap values; - PtrMap symbols; - StringMap members; - StringMap procedures; - PtrMap procedure_values; - - RecursiveMutex debug_type_mutex; - PtrMap debug_type_map; - PtrMap proc_debug_type_map; // not pointer to - - RecursiveMutex proc_proto_mutex; - PtrMap proc_proto_map; - - BlockingMutex anonymous_proc_lits_mutex; - PtrMap anonymous_proc_lits_map; - - RecursiveMutex generated_procs_mutex; - PtrMap equal_procs; - PtrMap hasher_procs; - PtrMap map_get_procs; - PtrMap map_set_procs; - - RecursiveMutex map_info_mutex; - PtrMap map_info_map; - PtrMap map_cell_info_map; - - // NOTE(bill): no need to protect this with a mutex - PtrMap file_id_map; // Key: AstFile.id (i32 cast to uintptr) - - std::atomic nested_type_name_guid; - std::atomic const_nil_guid; -}; - -#ifndef ABI_PKG_NAME_SEPARATOR -#define ABI_PKG_NAME_SEPARATOR "@" -#endif - -struct GlobalTypeInfoData { - TB_Global *global; - Type * array_type; - Type * elem_type; - isize index; -}; - -gb_global Entity *cg_global_type_info_data_entity = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_types = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_names = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_offsets = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_usings = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_tags = {}; -gb_global GlobalTypeInfoData cg_global_type_info_member_enum_values = {}; - -gb_global cgProcedure *cg_startup_runtime_proc = nullptr; -gb_global cgProcedure *cg_cleanup_runtime_proc = nullptr; - - - -gb_internal TB_Arena *cg_arena(void); - -gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool ignore_body=false); -gb_internal void cg_add_procedure_to_queue(cgProcedure *p); -gb_internal void cg_setup_type_info_data(cgModule *m); -gb_internal cgProcedure *cg_procedure_generate_anonymous(cgModule *m, Ast *expr, cgProcedure *parent); - -gb_internal isize cg_global_const_calculate_region_count(ExactValue const &value, Type *type); -gb_internal i64 cg_global_const_calculate_region_count_from_basic_type(Type *type); -gb_internal bool cg_global_const_add_region(cgModule *m, ExactValue const &value, Type *type, TB_Global *global, i64 offset); - -gb_internal String cg_get_entity_name(cgModule *m, Entity *e); - -gb_internal cgValue cg_value(TB_Global * g, Type *type); -gb_internal cgValue cg_value(TB_External *e, Type *type); -gb_internal cgValue cg_value(TB_Function *f, Type *type); -gb_internal cgValue cg_value(TB_Symbol * s, Type *type); -gb_internal cgValue cg_value(TB_Node * node, Type *type); - -gb_internal cgAddr cg_addr(cgValue const &value); -gb_internal cgAddr cg_addr_map(cgValue addr, cgValue map_key, Type *map_type, Type *map_result); - -gb_internal u64 cg_typeid_as_u64(cgModule *m, Type *type); -gb_internal cgValue cg_type_info(cgProcedure *p, Type *type); -gb_internal isize cg_type_info_index(CheckerInfo *info, Type *type, bool err_on_not_found=true); - -gb_internal cgValue cg_const_value(cgProcedure *p, Type *type, ExactValue const &value); -gb_internal cgValue cg_const_nil(cgProcedure *p, Type *type); - -gb_internal cgValue cg_flatten_value(cgProcedure *p, cgValue value); - -gb_internal void cg_build_stmt(cgProcedure *p, Ast *stmt); -gb_internal void cg_build_stmt_list(cgProcedure *p, Slice const &stmts); -gb_internal void cg_build_when_stmt(cgProcedure *p, AstWhenStmt *ws); - - -gb_internal cgValue cg_build_expr(cgProcedure *p, Ast *expr); -gb_internal cgAddr cg_build_addr(cgProcedure *p, Ast *expr); -gb_internal cgValue cg_build_addr_ptr(cgProcedure *p, Ast *expr); -gb_internal cgValue cg_build_cond(cgProcedure *p, Ast *cond, TB_Node *true_block, TB_Node *false_block); - -gb_internal Type * cg_addr_type(cgAddr const &addr); -gb_internal cgValue cg_addr_load(cgProcedure *p, cgAddr addr); -gb_internal void cg_addr_store(cgProcedure *p, cgAddr addr, cgValue value); -gb_internal cgValue cg_addr_get_ptr(cgProcedure *p, cgAddr const &addr); - -gb_internal cgValue cg_emit_load(cgProcedure *p, cgValue const &ptr, bool is_volatile=false); -gb_internal void cg_emit_store(cgProcedure *p, cgValue dst, cgValue src, bool is_volatile=false); - -gb_internal cgAddr cg_add_local (cgProcedure *p, Type *type, Entity *e, bool zero_init); -gb_internal cgAddr cg_add_global(cgProcedure *p, Type *type, Entity *e); -gb_internal cgValue cg_address_from_load_or_generate_local(cgProcedure *p, cgValue value); -gb_internal cgValue cg_copy_value_to_ptr(cgProcedure *p, cgValue value, Type *original_type, isize min_alignment); - -gb_internal cgValue cg_build_call_expr(cgProcedure *p, Ast *expr); - -gb_internal void cg_build_return_stmt(cgProcedure *p, Slice const &return_results); -gb_internal void cg_build_return_stmt_internal(cgProcedure *p, Slice const &results); -gb_internal void cg_build_return_stmt_internal_single(cgProcedure *p, cgValue result); -gb_internal void cg_build_range_stmt(cgProcedure *p, Ast *node); - -gb_internal cgValue cg_find_value_from_entity(cgModule *m, Entity *e); -gb_internal cgValue cg_find_procedure_value_from_entity(cgModule *m, Entity *e); - -gb_internal TB_DebugType *cg_debug_type(cgModule *m, Type *type); - -gb_internal String cg_get_entity_name(cgModule *m, Entity *e); - -gb_internal cgValue cg_typeid(cgProcedure *m, Type *t); - -gb_internal cgValue cg_emit_ptr_offset(cgProcedure *p, cgValue ptr, cgValue index); -gb_internal cgValue cg_emit_array_ep(cgProcedure *p, cgValue s, cgValue index); -gb_internal cgValue cg_emit_array_epi(cgProcedure *p, cgValue s, i64 index); -gb_internal cgValue cg_emit_struct_ep(cgProcedure *p, cgValue s, i64 index); -gb_internal cgValue cg_emit_deep_field_gep(cgProcedure *p, cgValue e, Selection const &sel); -gb_internal cgValue cg_emit_struct_ev(cgProcedure *p, cgValue s, i64 index); - -gb_internal cgValue cg_emit_conv(cgProcedure *p, cgValue value, Type *t); -gb_internal cgValue cg_emit_comp_against_nil(cgProcedure *p, TokenKind op_kind, cgValue x); -gb_internal cgValue cg_emit_comp(cgProcedure *p, TokenKind op_kind, cgValue left, cgValue right); -gb_internal cgValue cg_emit_arith(cgProcedure *p, TokenKind op, cgValue lhs, cgValue rhs, Type *type); -gb_internal cgValue cg_emit_unary_arith(cgProcedure *p, TokenKind op, cgValue x, Type *type); -gb_internal void cg_emit_increment(cgProcedure *p, cgValue addr); - -gb_internal cgProcedure *cg_equal_proc_for_type (cgModule *m, Type *type); -gb_internal cgProcedure *cg_hasher_proc_for_type(cgModule *m, Type *type); -gb_internal cgValue cg_hasher_proc_value_for_type(cgProcedure *p, Type *type); -gb_internal cgValue cg_equal_proc_value_for_type(cgProcedure *p, Type *type); - -gb_internal cgValue cg_emit_call(cgProcedure * p, cgValue value, Slice const &args); -gb_internal cgValue cg_emit_runtime_call(cgProcedure *p, char const *name, Slice const &args); - -gb_internal bool cg_emit_goto(cgProcedure *p, TB_Node *control_region); - -gb_internal TB_Node *cg_control_region(cgProcedure *p, char const *name); - -gb_internal isize cg_append_tuple_values(cgProcedure *p, Array *dst_values, cgValue src_value); - -gb_internal cgValue cg_handle_param_value(cgProcedure *p, Type *parameter_type, ParameterValue const ¶m_value, TokenPos const &pos); - -gb_internal cgValue cg_builtin_len(cgProcedure *p, cgValue value); -gb_internal cgValue cg_builtin_raw_data(cgProcedure *p, cgValue const &x); -gb_internal cgValue cg_builtin_map_info(cgProcedure *p, Type *map_type); -gb_internal cgValue cg_builtin_map_cell_info(cgProcedure *p, Type *type); -gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, String const &proc_name, TokenPos pos); -gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, Ast *node); - - -gb_internal cgValue cg_internal_dynamic_map_get_ptr(cgProcedure *p, cgValue const &map_ptr, cgValue const &key); -gb_internal void cg_internal_dynamic_map_set(cgProcedure *p, cgValue const &map_ptr, Type *map_type, - cgValue const &map_key, cgValue const &map_value, Ast *node); \ No newline at end of file diff --git a/src/tilde/tb.h b/src/tilde/tb.h deleted file mode 100644 index 4fe21c902..000000000 --- a/src/tilde/tb.h +++ /dev/null @@ -1,1309 +0,0 @@ -// Glossary (because i don't know where else to put it) -// IR - intermediate representation -// SoN - sea of nodes (https://www.oracle.com/technetwork/java/javase/tech/c2-ir95-150110.pdf) -// SSA - single static assignment -// GVN - global value numbering -// CSE - common subexpression elimination -// CFG - control flow graph -// DSE - dead store elimination -// GCM - global code motion -// SROA - scalar replacement of aggregates -// SCCP - sparse conditional constant propagation -// RPO - reverse postorder -// BB - basic block -// ZTC - zero trip count -// SCC - strongly connected components -#ifndef TB_CORE_H -#define TB_CORE_H - -#include -#include -#include -#include -#include -#include -#include -#include - -// https://semver.org/ -#define TB_VERSION_MAJOR 0 -#define TB_VERSION_MINOR 3 -#define TB_VERSION_PATCH 0 - -#ifndef TB_API -# ifdef __cplusplus -# define TB_EXTERN extern "C" -# else -# define TB_EXTERN -# endif -# ifdef TB_DLL -# ifdef TB_IMPORT_DLL -# define TB_API TB_EXTERN __declspec(dllimport) -# else -# define TB_API TB_EXTERN __declspec(dllexport) -# endif -# else -# define TB_API TB_EXTERN -# endif -#endif - -// These are flags -typedef enum TB_ArithmeticBehavior { - TB_ARITHMATIC_NONE = 0, - TB_ARITHMATIC_NSW = 1, - TB_ARITHMATIC_NUW = 2, -} TB_ArithmeticBehavior; - -typedef enum TB_DebugFormat { - TB_DEBUGFMT_NONE, - - TB_DEBUGFMT_DWARF, - TB_DEBUGFMT_CODEVIEW, - - TB_DEBUGFMT_COLINPILLED -} TB_DebugFormat; - -typedef enum TB_Arch { - TB_ARCH_UNKNOWN, - - TB_ARCH_X86_64, - TB_ARCH_AARCH64, // unsupported but planned - TB_ARCH_WASM32, -} TB_Arch; - -typedef enum TB_System { - TB_SYSTEM_WINDOWS, - TB_SYSTEM_LINUX, - TB_SYSTEM_MACOS, - TB_SYSTEM_ANDROID, // Not supported yet - TB_SYSTEM_WEB, - - TB_SYSTEM_MAX, -} TB_System; - -typedef enum TB_WindowsSubsystem { - TB_WIN_SUBSYSTEM_UNKNOWN, - - TB_WIN_SUBSYSTEM_WINDOWS, - TB_WIN_SUBSYSTEM_CONSOLE, - TB_WIN_SUBSYSTEM_EFI_APP, -} TB_WindowsSubsystem; - -typedef enum TB_ABI { - // Used on 64bit Windows platforms - TB_ABI_WIN64, - - // Used on Mac, BSD and Linux platforms - TB_ABI_SYSTEMV, -} TB_ABI; - -typedef enum TB_OutputFlavor { - TB_FLAVOR_OBJECT, // .o .obj - TB_FLAVOR_SHARED, // .so .dll - TB_FLAVOR_STATIC, // .a .lib - TB_FLAVOR_EXECUTABLE, // .exe -} TB_OutputFlavor; - -typedef enum TB_CallingConv { - TB_CDECL, - TB_STDCALL -} TB_CallingConv; - -typedef enum TB_FeatureSet_X64 { - TB_FEATURE_X64_SSE3 = (1u << 0u), - TB_FEATURE_X64_SSE41 = (1u << 1u), - TB_FEATURE_X64_SSE42 = (1u << 2u), - - TB_FEATURE_X64_POPCNT = (1u << 3u), - TB_FEATURE_X64_LZCNT = (1u << 4u), - - TB_FEATURE_X64_CLMUL = (1u << 5u), - TB_FEATURE_X64_F16C = (1u << 6u), - - TB_FEATURE_X64_BMI1 = (1u << 7u), - TB_FEATURE_X64_BMI2 = (1u << 8u), - - TB_FEATURE_X64_AVX = (1u << 9u), - TB_FEATURE_X64_AVX2 = (1u << 10u), -} TB_FeatureSet_X64; - -typedef struct TB_FeatureSet { - TB_FeatureSet_X64 x64; -} TB_FeatureSet; - -typedef enum TB_Linkage { - TB_LINKAGE_PUBLIC, - TB_LINKAGE_PRIVATE -} TB_Linkage; - -typedef enum { - TB_COMDAT_NONE, - - TB_COMDAT_MATCH_ANY, -} TB_ComdatType; - -typedef enum TB_MemoryOrder { - TB_MEM_ORDER_RELAXED, - TB_MEM_ORDER_CONSUME, - TB_MEM_ORDER_ACQUIRE, - TB_MEM_ORDER_RELEASE, - TB_MEM_ORDER_ACQ_REL, - TB_MEM_ORDER_SEQ_CST, -} TB_MemoryOrder; - -typedef enum TB_DataTypeEnum { - // Integers, note void is an i0 and bool is an i1 - // i(0-64) - TB_INT, - // Floating point numbers - // f{32,64} - TB_FLOAT, - // Pointers - TB_PTR, - // represents control flow for REGION, BRANCH - TB_CONTROL, - // represents memory (and I/O) - TB_MEMORY, - // continuation (usually just return addresses :p) - TB_CONT, - // Tuples, these cannot be used in memory ops, just accessed via projections - TB_TUPLE, -} TB_DataTypeEnum; - -typedef enum TB_FloatFormat { - // IEEE 754 floats - TB_FLT_32, TB_FLT_64 -} TB_FloatFormat; - -typedef union TB_DataType { - struct { - uint16_t type : 4; - // for integers it's the bitwidth - uint16_t data : 12; - }; - uint16_t raw; -} TB_DataType; -static_assert(sizeof(TB_DataType) == 2, "im expecting this to be a uint16_t"); - -// classify data types -#define TB_IS_VOID_TYPE(x) ((x).type == TB_INT && (x).data == 0) -#define TB_IS_BOOL_TYPE(x) ((x).type == TB_INT && (x).data == 1) -#define TB_IS_INTEGER_TYPE(x) ((x).type == TB_INT) -#define TB_IS_FLOAT_TYPE(x) ((x).type == TB_FLOAT) -#define TB_IS_POINTER_TYPE(x) ((x).type == TB_PTR) - -// accessors -#define TB_GET_INT_BITWIDTH(x) ((x).data) -#define TB_GET_FLOAT_FORMAT(x) ((x).data) -#define TB_GET_PTR_ADDRSPACE(x) ((x).data) - -//////////////////////////////// -// ANNOTATIONS -//////////////////////////////// -// -// (A, B) -> (C, D) -// -// node takes A and B, produces C, D. if there's multiple -// results we need to use projections and the indices are -// based on the order seen here, proj0 is C, proj1 is D. -// -// (A, B) & C -> Int -// -// nodes takes A and B along with C in it's extra data. this is -// where non-node inputs fit. -// -typedef enum TB_NodeTypeEnum { - TB_NULL = 0, - - //////////////////////////////// - // CONSTANTS - //////////////////////////////// - TB_INTEGER_CONST, - TB_FLOAT32_CONST, - TB_FLOAT64_CONST, - - //////////////////////////////// - // MISCELLANEOUS - //////////////////////////////// - // this is an unspecified value, usually generated by the optimizer - // when malformed input is folded into an operation. - TB_POISON, // () -> Any - // projections just extract a single field of a tuple - TB_PROJ, // Tuple & Int -> Any - // this is a simple way to embed machine code into the code - TB_MACHINE_OP, // (Control, Memory) & Buffer -> (Control, Memory) - // reads the TSC on x64 - TB_CYCLE_COUNTER, // (Control) -> Int64 - // prefetches data for reading. The number next to the - // - // 0 is temporal - // 1-3 are just cache levels - TB_PREFETCH, // (Memory, Ptr) & Int -> Memory - - //////////////////////////////// - // CONTROL - //////////////////////////////// - // there's only one START and STOP per function - TB_START, // () -> (Control, Memory, Data...) - TB_END, // (Control, Memory, Data?) -> () - // regions are used to represent paths which have multiple entries. - // each input is a predecessor. - TB_REGION, // (Control...) -> (Control) - // phi nodes work the same as in SSA CFG, the value is based on which predecessor was taken. - // each input lines up with the regions such that region.in[i] will use phi.in[i+1] as the - // subsequent data. - TB_PHI, // (Control, Data...) -> Data - // branch is used to implement most control flow, it acts like a switch - // statement in C usually. they take a key and match against some cases, - // if they match, it'll jump to that successor, if none match it'll take - // the default successor. - // - // if (cond) { A; } else { B; } is just switch (cond) { case 0: B; default: A; } - // - // it's possible to not pass a key and the default successor is always called, this is - // a GOTO. tb_inst_goto, tb_inst_if can handle common cases for you. - TB_BRANCH, // (Control, Data?) -> (Control...) - // debugbreak will trap in a continuable manner. - TB_DEBUGBREAK, // (Control, Memory) -> (Control) - // trap will not be continuable but will stop execution. - TB_TRAP, // (Control) -> (Control) - // unreachable means it won't trap or be continuable. - TB_UNREACHABLE, // (Control) -> () - // this is generated when a path becomes disconnected - // from the main IR, it'll be reduced by the monotonic - // rewrites. - TB_DEAD, // () -> (Control) - - //////////////////////////////// - // CONTROL + MEMORY - //////////////////////////////// - // nothing special, it's just a function call, 3rd argument here is the - // target pointer (or syscall number) and the rest are just data args. - TB_CALL, // (Control, Memory, Data, Data...) -> (Control, Memory, Data) - TB_SYSCALL, // (Control, Memory, Data, Data...) -> (Control, Memory, Data) - // performs call while recycling the stack frame somewhat - TB_TAILCALL, // (Control, Memory, RPC, Data, Data...) -> () - // safepoint polls are the same except they only trigger if the poll site - // says to (platform specific but almost always just the page being made - // unmapped/guard), 3rd argument is the poll site. - TB_SAFEPOINT_POLL, // (Control, Memory, Ptr?, Data...) -> (Control) - // this safepoint which doesn't emit any poll site, it's just - // an address, this is used by AOT compiles to encode line info. - TB_SAFEPOINT_NOP, // (Control, Memory, Ptr?, Data...) -> (Control) - - //////////////////////////////// - // MEMORY - //////////////////////////////// - // MERGEMEM will join multiple non-aliasing memory effects, because - // they don't alias there's no ordering guarentee. - TB_MERGEMEM, // (Memory...) -> Memory - // LOAD and STORE are standard memory accesses, they can be folded away. - TB_LOAD, // (Control?, Memory, Ptr) -> Data - TB_STORE, // (Control, Memory, Ptr, Data) -> Memory - // bulk memory ops. - TB_MEMCPY, // (Control, Memory, Ptr, Ptr, Size) -> Memory - TB_MEMSET, // (Control, Memory, Ptr, Int8, Size) -> Memory - // these memory accesses represent "volatile" which means - // they may produce side effects and thus cannot be eliminated. - TB_READ, // (Control, Memory, Ptr) -> (Memory, Data) - TB_WRITE, // (Control, Memory, Ptr, Data) -> (Memory, Data) - // atomics have multiple observers (if not they wouldn't need to - // be atomic) and thus produce side effects everywhere just like - // volatiles except they have synchronization guarentees. the atomic - // data ops will return the value before the operation is performed. - // Atomic CAS return the old value and a boolean for success (true if - // the value was changed) - TB_ATOMIC_LOAD, // (Control, Memory, Ptr) -> (Memory, Data) - TB_ATOMIC_XCHG, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_ADD, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_SUB, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_AND, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_XOR, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_OR, // (Control, Memory, Ptr, Data) -> (Memory, Data) - TB_ATOMIC_CAS, // (Control, Memory, Data, Data) -> (Memory, Data, Bool) - - // like a multi-way branch but without the control flow aspect, but for data. - TB_LOOKUP, - - //////////////////////////////// - // POINTERS - //////////////////////////////// - // LOCAL will statically allocate stack space - TB_LOCAL, // () & (Int, Int) -> Ptr - // SYMBOL will return a pointer to a TB_Symbol - TB_SYMBOL, // () & TB_Symbol* -> Ptr - // offsets pointer by constant value - TB_MEMBER_ACCESS, // Ptr & Int -> Ptr - // arguments represent base, index, and stride respectively - // and will perform `base + index*stride` - TB_ARRAY_ACCESS, // (Ptr, Int) & Int -> Ptr - // converts an integer to a pointer - TB_INT2PTR, // Int -> Ptr - // converts a pointer to an integer - TB_PTR2INT, // Ptr -> Int - - // Conversions - TB_TRUNCATE, - TB_FLOAT_EXT, - TB_SIGN_EXT, - TB_ZERO_EXT, - TB_UINT2FLOAT, - TB_FLOAT2UINT, - TB_INT2FLOAT, - TB_FLOAT2INT, - TB_BITCAST, - - // Select - TB_SELECT, - - // Bitmagic - TB_BSWAP, - TB_CLZ, - TB_CTZ, - TB_POPCNT, - - // Unary operations - TB_NOT, - TB_NEG, - - // Integer arithmatic - TB_AND, - TB_OR, - TB_XOR, - TB_ADD, - TB_SUB, - TB_MUL, - - TB_SHL, - TB_SHR, - TB_SAR, - TB_ROL, - TB_ROR, - TB_UDIV, - TB_SDIV, - TB_UMOD, - TB_SMOD, - - // Float arithmatic - TB_FADD, - TB_FSUB, - TB_FMUL, - TB_FDIV, - TB_FMAX, - TB_FMIN, - - // Comparisons - TB_CMP_EQ, - TB_CMP_NE, - TB_CMP_ULT, - TB_CMP_ULE, - TB_CMP_SLT, - TB_CMP_SLE, - TB_CMP_FLT, - TB_CMP_FLE, - - // Special ops - // adds two paired integers to two other paired integers and returns - // a low and high value - TB_ADDPAIR, - // does full multiplication (64x64=128 and so on) returning - // the low and high values in separate projections - TB_MULPAIR, - - // variadic - TB_VA_START, - - // x86 intrinsics - TB_X86INTRIN_LDMXCSR, - TB_X86INTRIN_STMXCSR, - TB_X86INTRIN_SQRT, - TB_X86INTRIN_RSQRT, -} TB_NodeTypeEnum; -typedef uint8_t TB_NodeType; - -// just represents some region of bytes, usually in file parsing crap -typedef struct { - size_t length; - const uint8_t* data; -} TB_Slice; - -// represents byte counts -typedef uint32_t TB_CharUnits; - -// will get interned so each TB_Module has a unique identifier for the source file -typedef struct { - // used by the debug info export - int id; - - size_t len; - uint8_t path[]; -} TB_SourceFile; - -typedef struct TB_Location { - TB_SourceFile* file; - int line, column; - uint32_t pos; -} TB_Location; - -// SO refers to shared objects which mean either shared libraries (.so or .dll) -// or executables (.exe or ELF executables) -typedef enum { - // exports to the rest of the shared object - TB_EXTERNAL_SO_LOCAL, - - // exports outside of the shared object - TB_EXTERNAL_SO_EXPORT, -} TB_ExternalType; - -typedef struct TB_Global TB_Global; -typedef struct TB_External TB_External; -typedef struct TB_Function TB_Function; - -typedef struct TB_Module TB_Module; -typedef struct TB_DebugType TB_DebugType; -typedef struct TB_ModuleSection TB_ModuleSection; -typedef struct TB_FunctionPrototype TB_FunctionPrototype; - -enum { TB_MODULE_SECTION_NONE = -1 }; -typedef int32_t TB_ModuleSectionHandle; -typedef struct TB_Attrib TB_Attrib; - -// target-specific, just a unique ID for the registers -typedef int TB_PhysicalReg; - -// Thread local module state -typedef struct TB_ThreadInfo TB_ThreadInfo; - -typedef enum { - TB_SYMBOL_NONE, - TB_SYMBOL_EXTERNAL, - TB_SYMBOL_GLOBAL, - TB_SYMBOL_FUNCTION, - TB_SYMBOL_MAX, -} TB_SymbolTag; - -// Refers generically to objects within a module -// -// TB_Function, TB_Global, and TB_External are all subtypes of TB_Symbol -// and thus are safely allowed to cast into a symbol for operations. -typedef struct TB_Symbol { - #ifdef __cplusplus - TB_SymbolTag tag; - #else - _Atomic TB_SymbolTag tag; - #endif - - // which thread info it's tied to (we may need to remove it, this - // is used for that) - TB_ThreadInfo* info; - char* name; - - // It's kinda a weird circular reference but yea - TB_Module* module; - - // helpful for sorting and getting consistent builds - uint64_t ordinal; - - union { - // if we're JITing then this maps to the address of the symbol - void* address; - size_t symbol_id; - }; - - // after this point it's tag-specific storage -} TB_Symbol; - -typedef struct TB_Node TB_Node; -typedef struct User User; -struct User { - User* next; - TB_Node* n; - int slot; -}; - -struct TB_Node { - TB_NodeType type; - uint16_t input_count; - TB_DataType dt; - - // makes it easier to track in graph walks - uint32_t gvn; - - // only value while inside of a TB_Passes, - // these are unordered and usually just - // help perform certain transformations or - // analysis (not necessarily semantics) - User* users; - - // ordered def-use edges, jolly ol' semantics - TB_Node** inputs; - - char extra[]; -}; - -// These are the extra data in specific nodes -#define TB_NODE_GET_EXTRA(n) ((void*) n->extra) -#define TB_NODE_GET_EXTRA_T(n, T) ((T*) (n)->extra) -#define TB_NODE_SET_EXTRA(n, T, ...) (*((T*) (n)->extra) = (T){ __VA_ARGS__ }) - -// this represents switch (many targets), if (one target) and goto (only default) logic. -typedef struct { // TB_BRANCH - size_t succ_count; - int64_t keys[]; -} TB_NodeBranch; - -typedef struct { // TB_PROJ - int index; -} TB_NodeProj; - -typedef struct { // TB_INTEGER_CONST - uint64_t value; -} TB_NodeInt; - -typedef struct { // any compare operator - TB_DataType cmp_dt; -} TB_NodeCompare; - -typedef struct { // any integer binary operator - TB_ArithmeticBehavior ab; -} TB_NodeBinopInt; - -typedef struct { - TB_CharUnits align; -} TB_NodeMemAccess; - -typedef struct { - int level; -} TB_NodePrefetch; - -typedef struct { - TB_CharUnits size, align; - int alias_index; // 0 if local is used beyond direct memops, 1...n as a unique alias name -} TB_NodeLocal; - -typedef struct { - // this is the raw buffer - size_t length; - const uint8_t* data; - - // represents the outputs, inputs and temporaries in that order - size_t outs, ins, tmps; - TB_PhysicalReg regs[]; -} TB_NodeMachineOp; - -typedef struct { - float value; -} TB_NodeFloat32; - -typedef struct { - double value; -} TB_NodeFloat64; - -typedef struct { - int64_t stride; -} TB_NodeArray; - -typedef struct { - int64_t offset; -} TB_NodeMember; - -typedef struct { - TB_Symbol* sym; -} TB_NodeSymbol; - -typedef struct { - TB_MemoryOrder order; - TB_MemoryOrder order2; - TB_Node* proj0; - TB_Node* proj1; -} TB_NodeAtomic; - -typedef struct { - // line info on safepoints - TB_SourceFile* file; - int line, column; -} TB_NodeSafepoint; - -typedef struct { - TB_FunctionPrototype* proto; - int proj_count; - TB_Node* projs[]; -} TB_NodeCall; - -typedef struct { - TB_FunctionPrototype* proto; -} TB_NodeTailcall; - -typedef struct { - const char* tag; - - // magic factor for hot-code, higher means run more often - float freq; - - // used for IR building only, stale after that. - TB_Node *mem_in, *mem_out; -} TB_NodeRegion; - -typedef struct { - int64_t key; - uint64_t val; -} TB_LookupEntry; - -typedef struct { - size_t entry_count; - TB_LookupEntry entries[]; -} TB_NodeLookup; - -typedef struct TB_MultiOutput { - size_t count; - union { - // count = 1 - TB_Node* single; - // count > 1 - TB_Node** multiple; - }; -} TB_MultiOutput; -#define TB_MULTI_OUTPUT(o) ((o).count > 1 ? (o).multiple : &(o).single) - -typedef struct { - int64_t key; - TB_Node* value; -} TB_SwitchEntry; - -typedef enum { - TB_EXECUTABLE_UNKNOWN, - TB_EXECUTABLE_PE, - TB_EXECUTABLE_ELF, -} TB_ExecutableType; - -typedef struct { - TB_Node* node; // type == TB_SAFEPOINT - void* userdata; - - uint32_t ip; // relative to the function body. - uint32_t count; // same as node->input_count - int32_t values[]; -} TB_Safepoint; - -typedef enum { - TB_MODULE_SECTION_WRITE = 1, - TB_MODULE_SECTION_EXEC = 2, - TB_MODULE_SECTION_TLS = 4, -} TB_ModuleSectionFlags; - -// ******************************* -// Public macros -// ******************************* -#ifdef __cplusplus - -#define TB_TYPE_TUPLE TB_DataType{ { TB_TUPLE } } -#define TB_TYPE_CONTROL TB_DataType{ { TB_CONTROL } } -#define TB_TYPE_VOID TB_DataType{ { TB_INT, 0 } } -#define TB_TYPE_I8 TB_DataType{ { TB_INT, 8 } } -#define TB_TYPE_I16 TB_DataType{ { TB_INT, 16 } } -#define TB_TYPE_I32 TB_DataType{ { TB_INT, 32 } } -#define TB_TYPE_I64 TB_DataType{ { TB_INT, 64 } } -#define TB_TYPE_F32 TB_DataType{ { TB_FLOAT, TB_FLT_32 } } -#define TB_TYPE_F64 TB_DataType{ { TB_FLOAT, TB_FLT_64 } } -#define TB_TYPE_BOOL TB_DataType{ { TB_INT, 1 } } -#define TB_TYPE_PTR TB_DataType{ { TB_PTR, 0 } } -#define TB_TYPE_MEMORY TB_DataType{ { TB_MEMORY,0 } } -#define TB_TYPE_CONT TB_DataType{ { TB_CONT, 0 } } -#define TB_TYPE_INTN(N) TB_DataType{ { TB_INT, (N) } } -#define TB_TYPE_PTRN(N) TB_DataType{ { TB_PTR, (N) } } - -#else - -#define TB_TYPE_TUPLE (TB_DataType){ { TB_TUPLE } } -#define TB_TYPE_CONTROL (TB_DataType){ { TB_CONTROL } } -#define TB_TYPE_VOID (TB_DataType){ { TB_INT, 0 } } -#define TB_TYPE_I8 (TB_DataType){ { TB_INT, 8 } } -#define TB_TYPE_I16 (TB_DataType){ { TB_INT, 16 } } -#define TB_TYPE_I32 (TB_DataType){ { TB_INT, 32 } } -#define TB_TYPE_I64 (TB_DataType){ { TB_INT, 64 } } -#define TB_TYPE_F32 (TB_DataType){ { TB_FLOAT, TB_FLT_32 } } -#define TB_TYPE_F64 (TB_DataType){ { TB_FLOAT, TB_FLT_64 } } -#define TB_TYPE_BOOL (TB_DataType){ { TB_INT, 1 } } -#define TB_TYPE_PTR (TB_DataType){ { TB_PTR, 0 } } -#define TB_TYPE_CONT (TB_DataType){ { TB_CONT, 0 } } -#define TB_TYPE_MEMORY (TB_DataType){ { TB_MEMORY,0 } } -#define TB_TYPE_INTN(N) (TB_DataType){ { TB_INT, (N) } } -#define TB_TYPE_PTRN(N) (TB_DataType){ { TB_PTR, (N) } } - -#endif - -typedef void (*TB_PrintCallback)(void* user_data, const char* fmt, ...); - -// defined in common/arena.h -typedef struct TB_Arena TB_Arena; - -// 0 for default -TB_API void tb_arena_create(TB_Arena* restrict arena, size_t chunk_size); -TB_API void tb_arena_destroy(TB_Arena* restrict arena); -TB_API bool tb_arena_is_empty(TB_Arena* restrict arena); -TB_API void tb_arena_clear(TB_Arena* restrict arena); - -//////////////////////////////// -// Module management -//////////////////////////////// -// Creates a module with the correct target and settings -TB_API TB_Module* tb_module_create(TB_Arch arch, TB_System sys, const TB_FeatureSet* features, bool is_jit); - -// Creates a module but defaults on the architecture and system based on the host machine -TB_API TB_Module* tb_module_create_for_host(const TB_FeatureSet* features, bool is_jit); - -// Frees all resources for the TB_Module and it's functions, globals and -// compiled code. -TB_API void tb_module_destroy(TB_Module* m); - -// When targetting windows & thread local storage, you'll need to bind a tls index -// which is usually just a global that the runtime support has initialized, if you -// dont and the tls_index is used, it'll crash -TB_API void tb_module_set_tls_index(TB_Module* m, ptrdiff_t len, const char* name); - -TB_API TB_ModuleSectionHandle tb_module_create_section(TB_Module* m, ptrdiff_t len, const char* name, TB_ModuleSectionFlags flags, TB_ComdatType comdat); - -typedef struct { - TB_ThreadInfo* info; - size_t i; -} TB_SymbolIter; - -// Lovely iterator for all the symbols... it's probably not "fast" -TB_SymbolIter tb_symbol_iter(TB_Module* mod); -TB_Symbol* tb_symbol_iter_next(TB_SymbolIter* iter); - -//////////////////////////////// -// Compiled code introspection -//////////////////////////////// -enum { TB_ASSEMBLY_CHUNK_CAP = 4*1024 - sizeof(size_t[2]) }; - -typedef struct TB_Assembly TB_Assembly; -struct TB_Assembly { - TB_Assembly* next; - - // nice chunk of text here - size_t length; - char data[]; -}; - -// this is where the machine code and other relevant pieces go. -typedef struct TB_FunctionOutput TB_FunctionOutput; - -TB_API void tb_output_print_asm(TB_FunctionOutput* out, FILE* fp); - -TB_API uint8_t* tb_output_get_code(TB_FunctionOutput* out, size_t* out_length); - -// returns NULL if there's no line info -TB_API TB_Location* tb_output_get_locations(TB_FunctionOutput* out, size_t* out_count); - -// returns NULL if no assembly was generated -TB_API TB_Assembly* tb_output_get_asm(TB_FunctionOutput* out); - -// this is relative to the start of the function (the start of the prologue) -TB_API TB_Safepoint* tb_safepoint_get(TB_Function* f, uint32_t relative_ip); - -//////////////////////////////// -// JIT compilation -//////////////////////////////// -typedef struct TB_JIT TB_JIT; -typedef struct TB_CPUContext TB_CPUContext; - -// passing 0 to jit_heap_capacity will default to 4MiB -TB_API TB_JIT* tb_jit_begin(TB_Module* m, size_t jit_heap_capacity); -TB_API void* tb_jit_place_function(TB_JIT* jit, TB_Function* f); -TB_API void* tb_jit_place_global(TB_JIT* jit, TB_Global* g); -TB_API void tb_jit_dump_heap(TB_JIT* jit); -TB_API void tb_jit_end(TB_JIT* jit); - -typedef struct { - TB_Symbol* base; - uint32_t offset; -} TB_ResolvedAddr; - -typedef struct { - TB_Function* f; - TB_Location* loc; - uint32_t start, end; -} TB_ResolvedLine; - -TB_API TB_ResolvedAddr tb_jit_addr2sym(TB_JIT* jit, void* ptr); -TB_API TB_ResolvedLine tb_jit_addr2line(TB_JIT* jit, void* ptr); -TB_API void* tb_jit_get_code_ptr(TB_Function* f); - -typedef enum { - // just keeps running - TB_DBG_NONE, - // stops after one instruction - TB_DBG_INST, - // stops once the line changes - TB_DBG_LINE, -} TB_DbgStep; - -// Debugger stuff -// creates a new context we can run JIT code in, you don't -// technically need this but it's a nice helper for writing -// JITs especially when it comes to breakpoints (and eventually -// safepoints) -TB_API TB_CPUContext* tb_jit_thread_create(void* entry, void* arg); -// runs until TB_DbgStep condition is met -TB_API bool tb_jit_thread_resume(TB_JIT* jit, TB_CPUContext* cpu, TB_DbgStep step); -TB_API void* tb_jit_thread_pc(TB_CPUContext* cpu); -TB_API void tb_jit_breakpoint(TB_JIT* jit, void* addr); -TB_API void tb_jit_thread_dump_stack(TB_JIT* jit, TB_CPUContext* cpu); - -//////////////////////////////// -// Disassembler -//////////////////////////////// -TB_API ptrdiff_t tb_print_disassembly_inst(TB_Arch arch, size_t length, const void* ptr); - -//////////////////////////////// -// Exporter -//////////////////////////////// -// Export buffers are generated in chunks because it's easier, usually the -// chunks are "massive" (representing some connected piece of the buffer) -// but they don't have to be. -typedef struct TB_ExportChunk TB_ExportChunk; -struct TB_ExportChunk { - TB_ExportChunk* next; - size_t pos, size; - uint8_t data[]; -}; - -typedef struct { - size_t total; - TB_ExportChunk *head, *tail; -} TB_ExportBuffer; - -TB_API TB_ExportBuffer tb_module_object_export(TB_Module* m, TB_DebugFormat debug_fmt); -TB_API bool tb_export_buffer_to_file(TB_ExportBuffer buffer, const char* path); -TB_API void tb_export_buffer_free(TB_ExportBuffer buffer); - -//////////////////////////////// -// Linker exporter -//////////////////////////////// -// This is used to export shared objects or executables -typedef struct TB_Linker TB_Linker; -typedef struct TB_LinkerSection TB_LinkerSection; -typedef struct TB_LinkerSectionPiece TB_LinkerSectionPiece; - -typedef struct { - enum { - TB_LINKER_MSG_NULL, - - // pragma comment(lib, "blah") - TB_LINKER_MSG_IMPORT, - } tag; - union { - // pragma lib request - TB_Slice import_path; - }; -} TB_LinkerMsg; - -TB_API TB_ExecutableType tb_system_executable_format(TB_System s); - -TB_API TB_Linker* tb_linker_create(TB_ExecutableType type, TB_Arch arch); -TB_API TB_ExportBuffer tb_linker_export(TB_Linker* l); -TB_API void tb_linker_destroy(TB_Linker* l); - -TB_API bool tb_linker_get_msg(TB_Linker* l, TB_LinkerMsg* msg); - -// windows only -TB_API void tb_linker_set_subsystem(TB_Linker* l, TB_WindowsSubsystem subsystem); - -TB_API void tb_linker_set_entrypoint(TB_Linker* l, const char* name); - -// Links compiled module into output -TB_API void tb_linker_append_module(TB_Linker* l, TB_Module* m); - -// Adds object file to output -TB_API void tb_linker_append_object(TB_Linker* l, TB_Slice obj_name, TB_Slice content); - -// Adds static library to output -// this can include imports (wrappers for DLL symbols) along with -// normal sections. -TB_API void tb_linker_append_library(TB_Linker* l, TB_Slice ar_name, TB_Slice content); - -//////////////////////////////// -// Symbols -//////////////////////////////// -TB_API TB_Global* tb_extern_transmute(TB_External* e, TB_DebugType* dbg_type, TB_Linkage linkage); -TB_API TB_External* tb_extern_create(TB_Module* m, ptrdiff_t len, const char* name, TB_ExternalType type); - -TB_API TB_SourceFile* tb_get_source_file(TB_Module* m, const char* path); - -// Called once you're done with TB operations on a thread (or i guess when it's -// about to be killed :p), not calling it can only result in leaks on that thread -// and calling it too early will result in TB potentially reallocating it but there's -// should be no crashes from this, just potential slowdown or higher than expected memory -// usage. -TB_API void tb_free_thread_resources(void); - -//////////////////////////////// -// Function Prototypes -//////////////////////////////// -typedef struct TB_PrototypeParam { - TB_DataType dt; - TB_DebugType* debug_type; - - // does not apply for returns - const char* name; -} TB_PrototypeParam; - -struct TB_FunctionPrototype { - // header - TB_CallingConv call_conv; - uint16_t return_count, param_count; - bool has_varargs; - - // params are directly followed by returns - TB_PrototypeParam params[]; -}; -#define TB_PROTOTYPE_RETURNS(p) ((p)->params + (p)->param_count) - -// creates a function prototype used to define a function's parameters and returns. -// -// function prototypes do not get freed individually and last for the entire run -// of the backend, they can also be reused for multiple functions which have -// matching signatures. -TB_API TB_FunctionPrototype* tb_prototype_create(TB_Module* m, TB_CallingConv cc, size_t param_count, const TB_PrototypeParam* params, size_t return_count, const TB_PrototypeParam* returns, bool has_varargs); - -// same as tb_function_set_prototype except it will handle lowering from types like the TB_DebugType -// into the correct ABI and exposing sane looking nodes to the parameters. -// -// returns the parameters -TB_API TB_Node** tb_function_set_prototype_from_dbg(TB_Function* f, TB_ModuleSectionHandle section, TB_DebugType* dbg, TB_Arena* arena, size_t* out_param_count); -TB_API TB_FunctionPrototype* tb_prototype_from_dbg(TB_Module* m, TB_DebugType* dbg); - -// used for ABI parameter passing -typedef enum { - // needs a direct value - TB_PASSING_DIRECT, - - // needs an address to the value - TB_PASSING_INDIRECT, - - // doesn't use this parameter - TB_PASSING_IGNORE, -} TB_PassingRule; - -TB_API TB_PassingRule tb_get_passing_rule_from_dbg(TB_Module* mod, TB_DebugType* param_type, bool is_return); - -//////////////////////////////// -// Globals -//////////////////////////////// -TB_API TB_Global* tb_global_create(TB_Module* m, ptrdiff_t len, const char* name, TB_DebugType* dbg_type, TB_Linkage linkage); - -// allocate space for the global -TB_API void tb_global_set_storage(TB_Module* m, TB_ModuleSectionHandle section, TB_Global* global, size_t size, size_t align, size_t max_objects); - -// returns a buffer which the user can fill to then have represented in the initializer -TB_API void* tb_global_add_region(TB_Module* m, TB_Global* global, size_t offset, size_t size); - -// places a relocation for a global at offset, the size of the relocation -// depends on the pointer size -TB_API void tb_global_add_symbol_reloc(TB_Module* m, TB_Global* global, size_t offset, const TB_Symbol* symbol); - -TB_API TB_ModuleSectionHandle tb_module_get_text(TB_Module* m); -TB_API TB_ModuleSectionHandle tb_module_get_rdata(TB_Module* m); -TB_API TB_ModuleSectionHandle tb_module_get_data(TB_Module* m); -TB_API TB_ModuleSectionHandle tb_module_get_tls(TB_Module* m); - -//////////////////////////////// -// Function Attributes -//////////////////////////////// -// These are parts of a function that describe metadata for instructions -TB_API void tb_function_attrib_variable(TB_Function* f, TB_Node* n, TB_Node* parent, ptrdiff_t len, const char* name, TB_DebugType* type); -TB_API void tb_function_attrib_scope(TB_Function* f, TB_Node* n, TB_Node* parent); - -//////////////////////////////// -// Debug info Generation -//////////////////////////////// -TB_API TB_DebugType* tb_debug_get_void(TB_Module* m); -TB_API TB_DebugType* tb_debug_get_bool(TB_Module* m); -TB_API TB_DebugType* tb_debug_get_integer(TB_Module* m, bool is_signed, int bits); -TB_API TB_DebugType* tb_debug_get_float(TB_Module* m, TB_FloatFormat fmt); -TB_API TB_DebugType* tb_debug_create_ptr(TB_Module* m, TB_DebugType* base); -TB_API TB_DebugType* tb_debug_create_array(TB_Module* m, TB_DebugType* base, size_t count); -TB_API TB_DebugType* tb_debug_create_alias(TB_Module* m, TB_DebugType* base, ptrdiff_t len, const char* tag); -TB_API TB_DebugType* tb_debug_create_struct(TB_Module* m, ptrdiff_t len, const char* tag); -TB_API TB_DebugType* tb_debug_create_union(TB_Module* m, ptrdiff_t len, const char* tag); -TB_API TB_DebugType* tb_debug_create_field(TB_Module* m, TB_DebugType* type, ptrdiff_t len, const char* name, TB_CharUnits offset); - -// returns the array you need to fill with fields -TB_API TB_DebugType** tb_debug_record_begin(TB_Module* m, TB_DebugType* type, size_t count); -TB_API void tb_debug_record_end(TB_DebugType* type, TB_CharUnits size, TB_CharUnits align); - -TB_API TB_DebugType* tb_debug_create_func(TB_Module* m, TB_CallingConv cc, size_t param_count, size_t return_count, bool has_varargs); - -TB_API TB_DebugType* tb_debug_field_type(TB_DebugType* type); - -TB_API size_t tb_debug_func_return_count(TB_DebugType* type); -TB_API size_t tb_debug_func_param_count(TB_DebugType* type); - -// you'll need to fill these if you make a function -TB_API TB_DebugType** tb_debug_func_params(TB_DebugType* type); -TB_API TB_DebugType** tb_debug_func_returns(TB_DebugType* type); - -//////////////////////////////// -// Symbols -//////////////////////////////// -// returns NULL if the tag doesn't match -TB_API TB_Function* tb_symbol_as_function(TB_Symbol* s); -TB_API TB_External* tb_symbol_as_external(TB_Symbol* s); -TB_API TB_Global* tb_symbol_as_global(TB_Symbol* s); - -//////////////////////////////// -// Function IR Generation -//////////////////////////////// -TB_API void tb_get_data_type_size(TB_Module* mod, TB_DataType dt, size_t* size, size_t* align); - -// the user_data is expected to be a valid FILE* -TB_API void tb_default_print_callback(void* user_data, const char* fmt, ...); - -TB_API void tb_inst_location(TB_Function* f, TB_SourceFile* file, int line, int column); - -// this is where the STOP will be -TB_API void tb_inst_set_exit_location(TB_Function* f, TB_SourceFile* file, int line, int column); - -// if section is NULL, default to .text -TB_API TB_Function* tb_function_create(TB_Module* m, ptrdiff_t len, const char* name, TB_Linkage linkage); - -TB_API TB_Arena* tb_function_get_arena(TB_Function* f); - -// if len is -1, it's null terminated -TB_API void tb_symbol_set_name(TB_Symbol* s, ptrdiff_t len, const char* name); - -TB_API void tb_symbol_bind_ptr(TB_Symbol* s, void* ptr); -TB_API const char* tb_symbol_get_name(TB_Symbol* s); - -// if arena is NULL, defaults to module arena which is freed on tb_free_thread_resources -TB_API void tb_function_set_prototype(TB_Function* f, TB_ModuleSectionHandle section, TB_FunctionPrototype* p, TB_Arena* arena); -TB_API TB_FunctionPrototype* tb_function_get_prototype(TB_Function* f); - -TB_API void tb_inst_set_control(TB_Function* f, TB_Node* control); -TB_API TB_Node* tb_inst_get_control(TB_Function* f); - -TB_API TB_Node* tb_inst_region(TB_Function* f); - -// if len is -1, it's null terminated -TB_API void tb_inst_set_region_name(TB_Function* f, TB_Node* n, ptrdiff_t len, const char* name); - -TB_API void tb_inst_unreachable(TB_Function* f); -TB_API void tb_inst_debugbreak(TB_Function* f); -TB_API void tb_inst_trap(TB_Function* f); -TB_API TB_Node* tb_inst_poison(TB_Function* f, TB_DataType dt); - -TB_API TB_Node* tb_inst_param(TB_Function* f, int param_id); - -TB_API TB_Node* tb_inst_fpxt(TB_Function* f, TB_Node* src, TB_DataType dt); -TB_API TB_Node* tb_inst_sxt(TB_Function* f, TB_Node* src, TB_DataType dt); -TB_API TB_Node* tb_inst_zxt(TB_Function* f, TB_Node* src, TB_DataType dt); -TB_API TB_Node* tb_inst_trunc(TB_Function* f, TB_Node* src, TB_DataType dt); -TB_API TB_Node* tb_inst_int2ptr(TB_Function* f, TB_Node* src); -TB_API TB_Node* tb_inst_ptr2int(TB_Function* f, TB_Node* src, TB_DataType dt); -TB_API TB_Node* tb_inst_int2float(TB_Function* f, TB_Node* src, TB_DataType dt, bool is_signed); -TB_API TB_Node* tb_inst_float2int(TB_Function* f, TB_Node* src, TB_DataType dt, bool is_signed); -TB_API TB_Node* tb_inst_bitcast(TB_Function* f, TB_Node* src, TB_DataType dt); - -TB_API TB_Node* tb_inst_local(TB_Function* f, TB_CharUnits size, TB_CharUnits align); - -TB_API TB_Node* tb_inst_load(TB_Function* f, TB_DataType dt, TB_Node* addr, TB_CharUnits align, bool is_volatile); -TB_API void tb_inst_store(TB_Function* f, TB_DataType dt, TB_Node* addr, TB_Node* val, TB_CharUnits align, bool is_volatile); - -TB_API void tb_inst_safepoint_poll(TB_Function* f, TB_Node* addr, int input_count, TB_Node** inputs); - -TB_API TB_Node* tb_inst_bool(TB_Function* f, bool imm); -TB_API TB_Node* tb_inst_sint(TB_Function* f, TB_DataType dt, int64_t imm); -TB_API TB_Node* tb_inst_uint(TB_Function* f, TB_DataType dt, uint64_t imm); -TB_API TB_Node* tb_inst_float32(TB_Function* f, float imm); -TB_API TB_Node* tb_inst_float64(TB_Function* f, double imm); -TB_API TB_Node* tb_inst_cstring(TB_Function* f, const char* str); -TB_API TB_Node* tb_inst_string(TB_Function* f, size_t len, const char* str); - -// write 'val' over 'count' bytes on 'dst' -TB_API void tb_inst_memset(TB_Function* f, TB_Node* dst, TB_Node* val, TB_Node* count, TB_CharUnits align); - -// zero 'count' bytes on 'dst' -TB_API void tb_inst_memzero(TB_Function* f, TB_Node* dst, TB_Node* count, TB_CharUnits align); - -// performs a copy of 'count' elements from one memory location to another -// both locations cannot overlap. -TB_API void tb_inst_memcpy(TB_Function* f, TB_Node* dst, TB_Node* src, TB_Node* count, TB_CharUnits align); - -// result = base + (index * stride) -TB_API TB_Node* tb_inst_array_access(TB_Function* f, TB_Node* base, TB_Node* index, int64_t stride); - -// result = base + offset -// where base is a pointer -TB_API TB_Node* tb_inst_member_access(TB_Function* f, TB_Node* base, int64_t offset); - -TB_API TB_Node* tb_inst_get_symbol_address(TB_Function* f, TB_Symbol* target); - -// Performs a conditional select between two values, if the operation is -// performed wide then the cond is expected to be the same type as a and b where -// the condition is resolved as true if the MSB (per component) is 1. -// -// result = cond ? a : b -// a, b must match in type -TB_API TB_Node* tb_inst_select(TB_Function* f, TB_Node* cond, TB_Node* a, TB_Node* b); - -// Integer arithmatic -TB_API TB_Node* tb_inst_add(TB_Function* f, TB_Node* a, TB_Node* b, TB_ArithmeticBehavior arith_behavior); -TB_API TB_Node* tb_inst_sub(TB_Function* f, TB_Node* a, TB_Node* b, TB_ArithmeticBehavior arith_behavior); -TB_API TB_Node* tb_inst_mul(TB_Function* f, TB_Node* a, TB_Node* b, TB_ArithmeticBehavior arith_behavior); -TB_API TB_Node* tb_inst_div(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); -TB_API TB_Node* tb_inst_mod(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); - -// Bitmagic operations -TB_API TB_Node* tb_inst_bswap(TB_Function* f, TB_Node* n); -TB_API TB_Node* tb_inst_clz(TB_Function* f, TB_Node* n); -TB_API TB_Node* tb_inst_ctz(TB_Function* f, TB_Node* n); -TB_API TB_Node* tb_inst_popcount(TB_Function* f, TB_Node* n); - -// Bitwise operations -TB_API TB_Node* tb_inst_not(TB_Function* f, TB_Node* n); -TB_API TB_Node* tb_inst_neg(TB_Function* f, TB_Node* n); -TB_API TB_Node* tb_inst_and(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_or(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_xor(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_sar(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_shl(TB_Function* f, TB_Node* a, TB_Node* b, TB_ArithmeticBehavior arith_behavior); -TB_API TB_Node* tb_inst_shr(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_rol(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_ror(TB_Function* f, TB_Node* a, TB_Node* b); - -// Atomics -// By default you can use TB_MEM_ORDER_SEQ_CST for the memory order to get -// correct but possibly slower results on certain platforms (those with relaxed -// memory models). - -// Must be aligned to the natural alignment of dt -TB_API TB_Node* tb_inst_atomic_load(TB_Function* f, TB_Node* addr, TB_DataType dt, TB_MemoryOrder order); - -// All atomic operations here return the old value and the operations are -// performed in the same data type as 'src' with alignment of 'addr' being -// the natural alignment of 'src' -TB_API TB_Node* tb_inst_atomic_xchg(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); -TB_API TB_Node* tb_inst_atomic_add(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); -TB_API TB_Node* tb_inst_atomic_sub(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); -TB_API TB_Node* tb_inst_atomic_and(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); -TB_API TB_Node* tb_inst_atomic_xor(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); -TB_API TB_Node* tb_inst_atomic_or(TB_Function* f, TB_Node* addr, TB_Node* src, TB_MemoryOrder order); - -// returns old_value from *addr -TB_API TB_Node* tb_inst_atomic_cmpxchg(TB_Function* f, TB_Node* addr, TB_Node* expected, TB_Node* desired, TB_MemoryOrder succ, TB_MemoryOrder fail); - -// Float math -TB_API TB_Node* tb_inst_fadd(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_fsub(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_fmul(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_fdiv(TB_Function* f, TB_Node* a, TB_Node* b); - -// Comparisons -TB_API TB_Node* tb_inst_cmp_eq(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_cmp_ne(TB_Function* f, TB_Node* a, TB_Node* b); - -TB_API TB_Node* tb_inst_cmp_ilt(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); -TB_API TB_Node* tb_inst_cmp_ile(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); -TB_API TB_Node* tb_inst_cmp_igt(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); -TB_API TB_Node* tb_inst_cmp_ige(TB_Function* f, TB_Node* a, TB_Node* b, bool signedness); - -TB_API TB_Node* tb_inst_cmp_flt(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_cmp_fle(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_cmp_fgt(TB_Function* f, TB_Node* a, TB_Node* b); -TB_API TB_Node* tb_inst_cmp_fge(TB_Function* f, TB_Node* a, TB_Node* b); - -// General intrinsics -TB_API TB_Node* tb_inst_va_start(TB_Function* f, TB_Node* a); -TB_API TB_Node* tb_inst_cycle_counter(TB_Function* f); -TB_API TB_Node* tb_inst_prefetch(TB_Function* f, TB_Node* addr, int level); - -// x86 Intrinsics -TB_API TB_Node* tb_inst_x86_ldmxcsr(TB_Function* f, TB_Node* a); -TB_API TB_Node* tb_inst_x86_stmxcsr(TB_Function* f); -TB_API TB_Node* tb_inst_x86_sqrt(TB_Function* f, TB_Node* a); -TB_API TB_Node* tb_inst_x86_rsqrt(TB_Function* f, TB_Node* a); - -// Control flow -TB_API TB_Node* tb_inst_syscall(TB_Function* f, TB_DataType dt, TB_Node* syscall_num, size_t param_count, TB_Node** params); -TB_API TB_MultiOutput tb_inst_call(TB_Function* f, TB_FunctionPrototype* proto, TB_Node* target, size_t param_count, TB_Node** params); -TB_API void tb_inst_tailcall(TB_Function* f, TB_FunctionPrototype* proto, TB_Node* target, size_t param_count, TB_Node** params); - -TB_API TB_Node* tb_inst_safepoint(TB_Function* f, TB_Node* poke_site, size_t param_count, TB_Node** params); - -TB_API TB_Node* tb_inst_incomplete_phi(TB_Function* f, TB_DataType dt, TB_Node* region, size_t preds); -TB_API bool tb_inst_add_phi_operand(TB_Function* f, TB_Node* phi, TB_Node* region, TB_Node* val); - -TB_API TB_Node* tb_inst_phi2(TB_Function* f, TB_Node* region, TB_Node* a, TB_Node* b); -TB_API void tb_inst_goto(TB_Function* f, TB_Node* target); -TB_API void tb_inst_if(TB_Function* f, TB_Node* cond, TB_Node* true_case, TB_Node* false_case); -TB_API void tb_inst_branch(TB_Function* f, TB_DataType dt, TB_Node* key, TB_Node* default_case, size_t entry_count, const TB_SwitchEntry* keys); - -TB_API void tb_inst_ret(TB_Function* f, size_t count, TB_Node** values); - -//////////////////////////////// -// Passes -//////////////////////////////// -typedef enum { - // allowed to remove PHIs nodes, this is - // helpful because the default IR building - // will produce tons of useless memory PHIs. - TB_PEEPHOLE_PHI = 1, - - // it's allowed to fold memory operations (store or load elimination) - TB_PEEPHOLE_MEMORY = 2, - - // just do every reduction rule i can provide you - TB_PEEPHOLE_ALL = 7, -} TB_PeepholeFlags; - -// Function analysis, optimizations, and codegen are all part of this -typedef struct TB_Passes TB_Passes; - -// the arena is used to allocate the nodes while passes are being done. -TB_API TB_Passes* tb_pass_enter(TB_Function* f, TB_Arena* arena); -TB_API void tb_pass_exit(TB_Passes* opt); - -// transformation passes: -// peephole: 99% of the optimizer, i'm sea of nodes pilled so i -// break down most optimizations into local rewrites, it's -// incremental and recommended to run after any non-peephole -// pass. -// -// mem2reg: lowers TB_LOCALs into SoN values, this makes more -// data flow analysis possible on the code and allows to codegen -// to place variables into registers. -// -// SROA: splits LOCALs into multiple to allow for more dataflow -// analysis later on. -TB_API void tb_pass_peephole(TB_Passes* opt, TB_PeepholeFlags flags); -TB_API void tb_pass_sroa(TB_Passes* opt); -TB_API bool tb_pass_mem2reg(TB_Passes* opt); -TB_API bool tb_pass_loop(TB_Passes* opt); - -// this just runs the optimizer in the default configuration -TB_API void tb_pass_optimize(TB_Passes* opt); - -// analysis -// print: prints IR in a flattened text form. -TB_API bool tb_pass_print(TB_Passes* opt); -// print-dot: prints IR as DOT -TB_API void tb_pass_print_dot(TB_Passes* opt, TB_PrintCallback callback, void* user_data); - -// codegen -TB_API TB_FunctionOutput* tb_pass_codegen(TB_Passes* opt, bool emit_asm); - -TB_API void tb_pass_kill_node(TB_Passes* opt, TB_Node* n); -TB_API void tb_pass_mark(TB_Passes* opt, TB_Node* n); -TB_API void tb_pass_mark_users(TB_Passes* opt, TB_Node* n); - -//////////////////////////////// -// IR access -//////////////////////////////// -TB_API const char* tb_node_get_name(TB_Node* n); - -TB_API TB_Node* tb_get_parent_region(TB_Node* n); -TB_API bool tb_node_is_constant_non_zero(TB_Node* n); -TB_API bool tb_node_is_constant_zero(TB_Node* n); - -#endif /* TB_CORE_H */ diff --git a/src/tilde/tb.lib b/src/tilde/tb.lib deleted file mode 100644 index 510569b0eb2d5e9bd11f3cb47f140b32f8dadb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2347218 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

4%>*ww3c_U-OttC+0)el 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�k620}DW*A(-45QTKyK&F6Y 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%0DnS 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%0AE?x1hQlG+qqq^Ml5RLHi6qG-&(>v_fAiEpH zMo+V#bvK|i3p(QnlrBK>=;bl!4h>j5aU=W=N*Cbr7?LUox23VA3s5@B1pE07xZDM$ z8wLhY(*;uZg5nn@k6fOE)(U(8>jSC7oNEO66(SE>yN75~gVq$n`~vb9D9uSRFff4X zHjua@bnFGRt_ZZ22}FbPI%v;2Xnqs4UIetZ8nh1`blx?H2JLAFtvdpZF@o00fzmZ- ztsJP_1?^P_^>;vf)j@WH_T+-rZUi$jFo5Q$LFyS985lriD@YA!uR7?gbkN#|d5jDU zptTR6^(&w?4xn@lTH62`^9Akc1)Zav4&9Fnnj3w@$iM)a8wHJbg623u@d=u%@5E`j3l zB{*&q;QcmiXHLS@z`_>U9+3M$We@T^5vc6~ihoes1yt^XXwdios0{;}69KhhK=Wjv zHVnw$pz#AQv^6cTIW~~Lg;4wr>oydpmXsF6Czh7v!xBDnd4?~YJ2CJGg32e5*$kkg zOYj?MWmS>`>GEVI=44iZw?M%20;o*~F^7Qx znpjd=1U~->RF5J2$-n@rhambn!1*0C?kfT|2c$7GFD)NbCOZj&n$QzKgHH^VaDRf* z3Pdjh1IQg9e}eo4%k!YKg+ODN+R!mK9nf9&pml-J@mtUs9=>(=qF{G`Z2;9z`H%pI z)J^!}5|$>B{Rs+RP}Fgu8Mx$A65(MB3LBVxAiF_rA5dI@%1n?r zXuSf+?V$Avpm{UUIt7q9AR3gPK<#-@9S2Hlps_j-4Kf3?jsfIH$T%_T{V1S5CCF?L zmPGMmenClQejaFS6Lhd;ZUH0?kmDbu2a4h8h!Z>x4ABdc1C=kJw6PKF*BEfS2-IF- zWXR0~E&c|{gW?Q}d?KjL2a*TnCzw2_p8(Piy3q_I2MTwX9JVw7@*l{2hQG;ae+H=uS6D1C#*IYH<5fM`%(6Ev0x@;hj4 z257n$v`+}MCk+(dpmr2!%=bA10|RI+7bsjHbtCGyGbrzX><3|0u$w_F22h@bm7?Ho zJ}6v3egMm&65uog^ApGqFlmt4pmGH{&Xz&PQkV4p10DG6=MA z1GxoX+CgqNgVM7msI!G-3>%bBAac1V<7l9{A{(e4P+1SkqYMlXCxF}s%10o7LDYDG z=l&si46=6ulz(Az$Zi4k*#e>Fg337bvQgw$Pfkw21^w8 zLgE!VGz)HI1nIG)@HDp99KM5IGO<*e$X?UM2Z-Vj!Odc{`h)CC<^9>+AVPF8o6UZ#k`WDbV9<2CI*IIj0_B*^Cm!U1+8}m*(nLS9}_fR&jh)P z7<7Ý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ξLj{ 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

4ceo!46p9pH} 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 jVC7 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%0Dls4~ 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
7UWsboIa?3 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

brt($fcz)mSm;r=+GOmgbb?WF}cL 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

)0|0|RJHKnavC6ocGxS|$eB-&`#Q@y8S~$o}S; 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%0Ah-MnuLXoIUoaB);*~20#gIB<0ZH+l?*x`0Bi@S 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 z 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�h)+W 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

C!jS~pt&N@`ciR5 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 z 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 YXNbx*LX|}0qDmT~a1Bs+h6W5=0RPLX8~^|S diff --git a/src/tilde/tb_arena.h b/src/tilde/tb_arena.h deleted file mode 100644 index 67ec0e181..000000000 --- a/src/tilde/tb_arena.h +++ /dev/null @@ -1,79 +0,0 @@ -#pragma once -#include -#include - -#ifndef TB_API -# ifdef __cplusplus -# define TB_EXTERN extern "C" -# else -# define TB_EXTERN -# endif -# ifdef TB_DLL -# ifdef TB_IMPORT_DLL -# define TB_API TB_EXTERN __declspec(dllimport) -# else -# define TB_API TB_EXTERN __declspec(dllexport) -# endif -# else -# define TB_API TB_EXTERN -# endif -#endif - -enum { - TB_ARENA_SMALL_CHUNK_SIZE = 4 * 1024, - TB_ARENA_MEDIUM_CHUNK_SIZE = 512 * 1024, - TB_ARENA_LARGE_CHUNK_SIZE = 16 * 1024 * 1024, - - TB_ARENA_ALIGNMENT = 16, -}; - -typedef struct TB_ArenaChunk TB_ArenaChunk; -struct TB_ArenaChunk { - TB_ArenaChunk* next; - size_t pad; - char data[]; -}; - -typedef struct TB_Arena { - size_t chunk_size; - TB_ArenaChunk* base; - TB_ArenaChunk* top; - - // top of the allocation space - char* watermark; - char* high_point; // &top->data[chunk_size] -} TB_Arena; - -typedef struct TB_ArenaSavepoint { - TB_ArenaChunk* top; - char* watermark; -} TB_ArenaSavepoint; - -#define TB_ARENA_FOR(it, arena) for (TB_ArenaChunk* it = (arena)->base; it != NULL; it = it->next) - -#define TB_ARENA_ALLOC(arena, T) tb_arena_alloc(arena, sizeof(T)) -#define TB_ARENA_ARR_ALLOC(arena, count, T) tb_arena_alloc(arena, (count) * sizeof(T)) - -TB_API void tb_arena_create(TB_Arena* restrict arena, size_t chunk_size); -TB_API void tb_arena_destroy(TB_Arena* restrict arena); - -TB_API void* tb_arena_unaligned_alloc(TB_Arena* restrict arena, size_t size); -TB_API void* tb_arena_alloc(TB_Arena* restrict arena, size_t size); - -// return false on failure -TB_API bool tb_arena_free(TB_Arena* restrict arena, void* ptr, size_t size); -TB_API void tb_arena_pop(TB_Arena* restrict arena, void* ptr, size_t size); - -// in case you wanna mix unaligned and aligned arenas -TB_API void tb_arena_realign(TB_Arena* restrict arena); - -TB_API bool tb_arena_is_empty(TB_Arena* arena); - -TB_API size_t tb_arena_current_size(TB_Arena* arena); - -// savepoints -TB_API TB_ArenaSavepoint tb_arena_save(TB_Arena* arena); -TB_API void tb_arena_restore(TB_Arena* arena, TB_ArenaSavepoint sp); - -// resets to only having one chunk -TB_API void tb_arena_clear(TB_Arena* arena); diff --git a/src/tilde/tb_coff.h b/src/tilde/tb_coff.h deleted file mode 100644 index ddedd6ffe..000000000 --- a/src/tilde/tb_coff.h +++ /dev/null @@ -1,334 +0,0 @@ -// PE/COFF is the executable/object format used by Microsoft. -#ifndef TB_COFF_H -#define TB_COFF_H - -#include "tb_formats.h" - -#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 - -#define IMAGE_SYM_CLASS_EXTERNAL 0x0002 -#define IMAGE_SYM_CLASS_STATIC 0x0003 -#define IMAGE_SYM_CLASS_LABEL 0x0006 -#define IMAGE_SYM_CLASS_FILE 0x0067 -#define IMAGE_SYM_CLASS_SECTION 0x0068 -#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069 - -#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 - -#define IMAGE_REL_AMD64_ADDR64 0x0001 -#define IMAGE_REL_AMD64_ADDR32 0x0002 -#define IMAGE_REL_AMD64_ADDR32NB 0x0003 -#define IMAGE_REL_AMD64_REL32 0x0004 -#define IMAGE_REL_AMD64_REL32_1 0x0005 -#define IMAGE_REL_AMD64_REL32_2 0x0006 -#define IMAGE_REL_AMD64_REL32_3 0x0007 -#define IMAGE_REL_AMD64_REL32_4 0x0008 -#define IMAGE_REL_AMD64_REL32_5 0x0009 -#define IMAGE_REL_AMD64_SECTION 0x000A -#define IMAGE_REL_AMD64_SECREL 0x000B - -#define IMAGE_SCN_LNK_REMOVE 0x00000800 -#define IMAGE_SCN_LNK_COMDAT 0x00001000 -#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 -#define IMAGE_SCN_MEM_EXECUTE 0x20000000 -#define IMAGE_SCN_MEM_READ 0x40000000 -#define IMAGE_SCN_MEM_WRITE 0x80000000 - -#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */ -#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */ -#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */ - -#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory -#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory -#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory -#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory -#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory -#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table -#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory -#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data -#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP -#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory -#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory -#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers -#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table -#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors -#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor - -#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 -#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 -#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 - -typedef enum { - TB_COFF_SECTION_NO_PAD = 0x00000008, - TB_COFF_SECTION_CODE = 0x00000020, - TB_COFF_SECTION_INIT = 0x00000040, - TB_COFF_SECTION_UNINIT = 0x00000080, - TB_COFF_SECTION_OTHER = 0x00000100, - TB_COFF_SECTION_INFO = 0x00000200, - TB_COFF_SECTION_REMOVE = 0x00000800, - TB_COFF_SECTION_COMDAT = 0x00001000, - - // this is actually a 4bit field - TB_COFF_SECTION_ALIGN = 0x00F00000, - - // if we have more than 65535 relocations we do this - TB_COFF_SECTION_RELOC_OVR = 0x00F00000, - - // memory flags - TB_COFF_SECTION_DISCARDABLE = 0x02000000, - TB_COFF_SECTION_NOT_CACHED = 0x04000000, - TB_COFF_SECTION_NOT_PAGED = 0x08000000, - TB_COFF_SECTION_SHARED = 0x10000000, - TB_COFF_SECTION_EXECUTE = 0x20000000, - TB_COFF_SECTION_READ = 0x40000000, - TB_COFF_SECTION_WRITE = 0x80000000, -} TB_COFF_SectionFlags; - -typedef struct TB_COFF_Parser { - // inputs - TB_Slice name, file; - - // results - size_t section_count; - size_t symbol_table, symbol_count; - - // private - TB_Slice string_table; -} TB_COFF_Parser; - -// fills the parser with results from the COFF header -bool tb_coff_parse_init(TB_COFF_Parser* restrict parser); -bool tb_coff_parse_section(TB_COFF_Parser* restrict parser, size_t i, TB_ObjectSection* out_sec); - -// how many symbols does this one symbol take up (basically 1 + aux symbols). -// returns 0 if error. -size_t tb_coff_parse_symbol(TB_COFF_Parser* restrict parser, size_t i, TB_ObjectSymbol* restrict out_sym); - -#endif // TB_COFF_H - -#ifdef TB_COFF_IMPL -#include - -#pragma pack(push, 2) -typedef struct COFF_SectionHeader { - char name[8]; - union { - uint32_t physical_address; - uint32_t virtual_size; - } misc; - uint32_t virtual_address; - uint32_t raw_data_size; - uint32_t raw_data_pos; - uint32_t pointer_to_reloc; - uint32_t pointer_to_lineno; - uint16_t num_reloc; - uint16_t num_lineno; - uint32_t characteristics; -} COFF_SectionHeader; - -typedef struct COFF_FileHeader { - uint16_t machine; - uint16_t section_count; - uint32_t timestamp; - uint32_t symbol_table; - uint32_t symbol_count; - uint16_t optional_header_size; - uint16_t flags; -} COFF_FileHeader; - -typedef struct COFF_Symbol { - union { - uint8_t short_name[8]; - uint32_t long_name[2]; - }; - uint32_t value; - int16_t section_number; - uint16_t type; - uint8_t storage_class; - uint8_t aux_symbols_count; -} COFF_Symbol; - -typedef struct COFF_ImageReloc { - union { - uint32_t VirtualAddress; - uint32_t RelocCount; - }; - uint32_t SymbolTableIndex; - uint16_t Type; -} COFF_ImageReloc; -#pragma pack(pop) - -// sanity checks -static_assert(sizeof(COFF_SectionHeader) == 40, "COFF Section header size != 40 bytes"); -static_assert(sizeof(COFF_ImageReloc) == 10, "COFF Image Relocation size != 10 bytes"); -static_assert(sizeof(COFF_FileHeader) == 20, "COFF File header size != 20 bytes"); -static_assert(sizeof(COFF_Symbol) == 18, "COFF Symbol size != 18 bytes"); - -bool tb_coff_parse_init(TB_COFF_Parser* restrict parser) { - TB_Slice file = parser->file; - - if (file.length < sizeof(COFF_FileHeader)) return false; - COFF_FileHeader* header = (COFF_FileHeader*) &parser->file.data[0]; - - // locate string table (it spans until the end of the file) - size_t string_table_pos = header->symbol_table + (header->symbol_count * sizeof(COFF_Symbol)); - if (file.length < string_table_pos) return false; - - parser->symbol_count = header->symbol_count; - parser->symbol_table = header->symbol_table; - parser->section_count = header->section_count; - parser->string_table = (TB_Slice){ - .length = file.length - string_table_pos, - .data = &file.data[string_table_pos] - }; - - return true; -} - -static long long tb__parse_decimal_int(size_t n, const char* str) { - const char* end = &str[n]; - - int result = 0; - while (str != end) { - if (*str < '0' || *str > '9') break; - - result *= 10; - result += *str - '0'; - str++; - } - - return result; -} - -bool tb_coff_parse_section(TB_COFF_Parser* restrict parser, size_t i, TB_ObjectSection* restrict out_sec) { - TB_Slice file = parser->file; - size_t section_offset = sizeof(COFF_FileHeader) + (i * sizeof(COFF_SectionHeader)); - - if (file.length < section_offset + sizeof(COFF_SectionHeader)) { - return false; - } - - COFF_SectionHeader* sec = (COFF_SectionHeader*) &file.data[section_offset]; - *out_sec = (TB_ObjectSection) { .flags = sec->characteristics }; - - // Parse string table name stuff - if (sec->name[0] == '/') { - // string table access - int offset = tb__parse_decimal_int(7, &sec->name[1]); - if (file.length > offset) { - return false; - } - - const uint8_t* data = &parser->string_table.data[offset]; - out_sec->name = (TB_Slice){ strlen((const char*) data), data }; - } else { - // normal inplace string - size_t len = strlen(sec->name); - out_sec->name = (TB_Slice){ len, (uint8_t*) sec->name }; - } - - // Parse relocations - if (sec->num_reloc > 0) { - out_sec->relocation_count = sec->num_reloc; - COFF_ImageReloc* src_relocs = (COFF_ImageReloc*) &file.data[sec->pointer_to_reloc]; - - TB_ObjectReloc* dst_relocs = tb_platform_heap_alloc(sec->num_reloc * sizeof(TB_ObjectReloc)); - FOREACH_N(j, 0, sec->num_reloc) { - dst_relocs[j] = (TB_ObjectReloc){ 0 }; - switch (src_relocs[j].Type) { - case IMAGE_REL_AMD64_ADDR32NB: dst_relocs[j].type = TB_OBJECT_RELOC_ADDR32NB; break; - case IMAGE_REL_AMD64_ADDR32: dst_relocs[j].type = TB_OBJECT_RELOC_ADDR32; break; - case IMAGE_REL_AMD64_ADDR64: dst_relocs[j].type = TB_OBJECT_RELOC_ADDR64; break; - case IMAGE_REL_AMD64_SECREL: dst_relocs[j].type = TB_OBJECT_RELOC_SECREL; break; - case IMAGE_REL_AMD64_SECTION: dst_relocs[j].type = TB_OBJECT_RELOC_SECTION; break; - - case IMAGE_REL_AMD64_REL32: - case IMAGE_REL_AMD64_REL32_1: - case IMAGE_REL_AMD64_REL32_2: - case IMAGE_REL_AMD64_REL32_3: - case IMAGE_REL_AMD64_REL32_4: - case IMAGE_REL_AMD64_REL32_5: - dst_relocs[j].type = TB_OBJECT_RELOC_REL32; - break; - - default: tb_todo(); - } - - if (src_relocs[j].Type >= IMAGE_REL_AMD64_REL32 && src_relocs[j].Type <= IMAGE_REL_AMD64_REL32_5) { - dst_relocs[j].addend = 4 + (src_relocs[j].Type - IMAGE_REL_AMD64_REL32); - } - - dst_relocs[j].symbol_index = src_relocs[j].SymbolTableIndex; - dst_relocs[j].virtual_address = src_relocs[j].VirtualAddress; - } - - out_sec->relocations = dst_relocs; - } - - // Parse virtual region - out_sec->virtual_address = sec->virtual_address; - out_sec->virtual_size = sec->misc.virtual_size; - - // Read raw data (if applies) - if (sec->raw_data_size) { - assert(sec->raw_data_pos + sec->raw_data_size < file.length); - out_sec->raw_data = (TB_Slice){ sec->raw_data_size, &file.data[sec->raw_data_pos] }; - } - - return true; -} - -TB_ObjectSymbolType classify_symbol_type(uint16_t st_class) { - switch (st_class) { - case 2: return TB_OBJECT_SYMBOL_EXTERN; - case 3: return TB_OBJECT_SYMBOL_STATIC; - case 6: return TB_OBJECT_SYMBOL_STATIC; - case 0x68: return TB_OBJECT_SYMBOL_SECTION; - case 0x69: return TB_OBJECT_SYMBOL_WEAK_EXTERN; - default: return TB_OBJECT_SYMBOL_UNKNOWN; - } -} - -size_t tb_coff_parse_symbol(TB_COFF_Parser* restrict parser, size_t i, TB_ObjectSymbol* restrict out_sym) { - TB_Slice file = parser->file; - size_t symbol_offset = parser->symbol_table + (i * sizeof(COFF_Symbol)); - - if (file.length < symbol_offset + sizeof(COFF_Symbol)) { - return 0; - } - - COFF_Symbol* sym = (COFF_Symbol*) &file.data[symbol_offset]; - *out_sym = (TB_ObjectSymbol) { - .ordinal = i, - .type = classify_symbol_type(sym->storage_class), - .section_num = sym->section_number, - .value = sym->value - }; - - // Parse string table name stuff - if (sym->long_name[0] == 0) { - // string table access (read a cstring) - // TODO(NeGate): bounds check this - const uint8_t* data = &parser->string_table.data[sym->long_name[1]]; - out_sym->name = (TB_Slice){ strlen((const char*) data), data }; - } else { - // normal inplace string - size_t len = 1; - const char* name = (const char*) sym->short_name; - while (len < 8 && name[len] != 0) { - len++; - } - out_sym->name = (TB_Slice){ len, sym->short_name }; - } - - // TODO(NeGate): Process aux symbols - if (sym->aux_symbols_count) { - out_sym->extra = &sym[1]; - - // FOREACH_N(j, 0, sym->aux_symbols_count) {} - } - - return sym->aux_symbols_count + 1; -} - -#endif // TB_COFF_IMPL diff --git a/src/tilde/tb_elf.h b/src/tilde/tb_elf.h deleted file mode 100644 index 5260d7372..000000000 --- a/src/tilde/tb_elf.h +++ /dev/null @@ -1,170 +0,0 @@ -#ifndef TB_ELF_H -#define TB_ELF_H - -#include - -#define TB_EI_MAG0 0 -#define TB_EI_MAG1 1 -#define TB_EI_MAG2 2 -#define TB_EI_MAG3 3 -#define TB_EI_CLASS 4 /* Class of machine. */ -#define TB_EI_DATA 5 /* Data format. */ -#define TB_EI_VERSION 6 /* ELF format version. */ -#define TB_EI_OSABI 7 /* Operating system / ABI identification */ -#define TB_EI_ABIVERSION 8 /* ABI version */ -#define TB_OLD_EI_BRAND 8 /* Start of architecture identification. */ -#define TB_EI_PAD 9 /* Start of padding (per SVR4 ABI). */ -#define TB_EI_NIDENT 16 /* Size of e_ident array. */ - -/* Values for e_type. */ -#define TB_ET_NONE 0 /* Unknown type. */ -#define TB_ET_REL 1 /* Relocatable. */ -#define TB_ET_EXEC 2 /* Executable. */ -#define TB_ET_DYN 3 /* Shared object. */ -#define TB_ET_CORE 4 /* Core file. */ -#define TB_ET_LOOS 0xfe00 /* First operating system specific. */ -#define TB_ET_HIOS 0xfeff /* Last operating system-specific. */ -#define TB_ET_LOPROC 0xff00 /* First processor-specific. */ -#define TB_ET_HIPROC 0xffff /* Last processor-specific. */ - -/* Values for e_machine. */ -#define TB_EM_NONE 0 /* Unknown machine. */ -#define TB_EM_X86_64 62 /* Advanced Micro Devices x86-64 */ -#define TB_EM_AARCH64 183 /* AArch64 (64-bit ARM) */ - -/* sh_type */ -#define TB_SHT_NULL 0 /* inactive */ -#define TB_SHT_PROGBITS 1 /* program defined information */ -#define TB_SHT_SYMTAB 2 /* symbol table section */ -#define TB_SHT_STRTAB 3 /* string table section */ -#define TB_SHT_RELA 4 /* relocation section with addends */ -#define TB_SHT_NOBITS 8 /* no space section */ - -/* Flags for sh_flags. */ -#define TB_SHF_WRITE 0x1 /* Section contains writable data. */ -#define TB_SHF_ALLOC 0x2 /* Section occupies memory. */ -#define TB_SHF_EXECINSTR 0x4 /* Section contains instructions. */ -#define TB_SHF_MERGE 0x10 /* Section may be merged. */ -#define TB_SHF_STRINGS 0x20 /* Section contains strings. */ -#define TB_SHF_INFO_LINK 0x40 /* sh_info holds section index. */ -#define TB_SHF_LINK_ORDER 0x80 /* Special ordering requirements. */ -#define TB_SHF_OS_NONCONFORMING 0x100 /* OS-specific processing required. */ -#define TB_SHF_GROUP 0x200 /* Member of section group. */ -#define TB_SHF_TLS 0x400 /* Section contains TLS data. */ -#define TB_SHF_MASKOS 0x0ff00000 /* OS-specific semantics. */ -#define TB_SHF_MASKPROC 0xf0000000 /* Processor-specific semantics. */ - -/* Values for p_flags. */ -#define TB_PF_X 0x1 /* Executable. */ -#define TB_PF_W 0x2 /* Writable. */ -#define TB_PF_R 0x4 /* Readable. */ -#define TB_PF_MASKOS 0x0ff00000 /* Operating system-specific. */ -#define TB_PF_MASKPROC 0xf0000000 /* Processor-specific. */ - -/* Values for p_type. */ -#define TB_PT_NULL 0 /* Unused entry. */ -#define TB_PT_LOAD 1 /* Loadable segment. */ -#define TB_PT_DYNAMIC 2 /* Dynamic linking information segment. */ -#define TB_PT_INTERP 3 /* Pathname of interpreter. */ -#define TB_PT_NOTE 4 /* Auxiliary information. */ -#define TB_PT_SHLIB 5 /* Reserved (not used). */ -#define TB_PT_PHDR 6 /* Location of program header itself. */ -#define TB_PT_TLS 7 /* Thread local storage segment */ - -/* Values for relocation */ -typedef enum { - TB_ELF_X86_64_NONE = 0, - TB_ELF_X86_64_64 = 1, - TB_ELF_X86_64_PC32 = 2, - TB_ELF_X86_64_GOT32 = 3, - TB_ELF_X86_64_PLT32 = 4, - TB_ELF_X86_64_GOTPCREL = 9, -} TB_ELF_RelocType; - -// ST_TYPE -#define TB_ELF64_STT_NOTYPE 0 -#define TB_ELF64_STT_OBJECT 1 -#define TB_ELF64_STT_FUNC 2 -#define TB_ELF64_STT_SECTION 3 - -// ST_INFO -#define TB_ELF64_STB_LOCAL 0 -#define TB_ELF64_STB_GLOBAL 1 -#define TB_ELF64_STB_WEAK 2 - -/* Macros for accessing the fields of st_info. */ -#define TB_ELF64_ST_BIND(info) ((info) >> 4) -#define TB_ELF64_ST_TYPE(info) ((info) & 0xf) - -#define TB_ELF64_ST_INFO(b, t) (((b) << 4) | ((t) & 0xF)) - -#define TB_ELF64_R_SYM(i) ((i) >> 32u) -#define TB_ELF64_R_TYPE(i) ((i)&0xffffffffULL) -#define TB_ELF64_R_INFO(s, t) (((uint64_t)(s) << 32ULL) + ((uint64_t)(t) & 0xffffffffULL)) - -// http://web.mit.edu/freebsd/head/sys/sys/elf64.h -// https://cirosantilli.com/elf-hello-world#minimal-elf-file -// https://en.wikipedia.org/wiki/Executable_and_Linkable_Format -typedef struct { - uint8_t ident[16]; - uint16_t type; - uint16_t machine; - uint32_t version; - uint64_t entry; - uint64_t phoff; - uint64_t shoff; - uint32_t flags; - uint16_t ehsize; - uint16_t phentsize; - uint16_t phnum; - uint16_t shentsize; - uint16_t shnum; - uint16_t shstrndx; -} TB_Elf64_Ehdr; - -typedef struct { - uint32_t name; - uint32_t type; - uint64_t flags; - uint64_t addr; - uint64_t offset; - uint64_t size; - uint32_t link; - uint32_t info; - uint64_t addralign; - uint64_t entsize; -} TB_Elf64_Shdr; - -// Segment header for ELF64. -typedef struct { - uint32_t type; // Type of segment - uint32_t flags; // Segment flags - uint64_t offset; // File offset where segment is located, in bytes - uint64_t vaddr; // Virtual address of beginning of segment - uint64_t paddr; // Physical addr of beginning of segment (OS-specific) - uint64_t filesz; // Num. of bytes in file image of segment (may be zero) - uint64_t memsz; // Num. of bytes in mem image of segment (may be zero) - uint64_t align; // Segment alignment constraint -} TB_Elf64_Phdr; - -typedef struct { - uint32_t name; - uint8_t info; - uint8_t other; - uint16_t shndx; - uint64_t value; - uint64_t size; -} TB_Elf64_Sym; - -typedef struct { - uint64_t offset; - uint64_t info; - int64_t addend; -} TB_Elf64_Rela; - -typedef struct { - uint64_t offset; - uint64_t info; -} TB_Elf64_Rel; - -#endif /* TB_ELF_H */ diff --git a/src/tilde/tb_formats.h b/src/tilde/tb_formats.h deleted file mode 100644 index 1975d5848..000000000 --- a/src/tilde/tb_formats.h +++ /dev/null @@ -1,132 +0,0 @@ -// This handles the generalized executable/object format parsing stuff -#ifndef TB_OBJECT_H -#define TB_OBJECT_H - -#include -#include - -typedef enum { - TB_OBJECT_RELOC_NONE, // how? - - // Target independent - TB_OBJECT_RELOC_ADDR32, - TB_OBJECT_RELOC_ADDR64, // unsupported on 32bit platforms - TB_OBJECT_RELOC_SECREL, - TB_OBJECT_RELOC_SECTION, - - // COFF only - TB_OBJECT_RELOC_ADDR32NB, // Relative virtual address - - // x64 only - TB_OBJECT_RELOC_REL32, // relative 32bit displacement - - // Aarch64 only - TB_OBJECT_RELOC_BRANCH26, // 26bit displacement for B and BL instructions - TB_OBJECT_RELOC_REL21, // for ADR instructions - - // TODO(NeGate): fill in the rest of this later -} TB_ObjectRelocType; - -typedef struct { - TB_ObjectRelocType type; - uint32_t symbol_index; - size_t virtual_address; - size_t addend; -} TB_ObjectReloc; - -typedef enum { - TB_OBJECT_SYMBOL_UNKNOWN, - TB_OBJECT_SYMBOL_EXTERN, // exported - TB_OBJECT_SYMBOL_WEAK_EXTERN, // weak - TB_OBJECT_SYMBOL_IMPORT, // forward decl - TB_OBJECT_SYMBOL_STATIC, // local - TB_OBJECT_SYMBOL_SECTION, // local -} TB_ObjectSymbolType; - -typedef struct { - TB_ObjectSymbolType type; - int section_num; - - uint32_t ordinal; - uint32_t value; - - TB_Slice name; - - // for COFF, this is the auxillary - void* extra; - - // this is zeroed out by the loader and left for the user to do crap with - void* user_data; -} TB_ObjectSymbol; - -typedef struct { - TB_Slice name; - uint32_t flags; - - size_t virtual_address; - size_t virtual_size; - - // You can have a virtual size without having a raw - // data size, that's how the BSS section works - TB_Slice raw_data; - - size_t relocation_count; - TB_ObjectReloc* relocations; - - // this is zeroed out by the loader and left for the user to do crap with - void* user_data; -} TB_ObjectSection; - -typedef enum { - TB_OBJECT_FILE_UNKNOWN, - - TB_OBJECT_FILE_COFF, - TB_OBJECT_FILE_ELF64 -} TB_ObjectFileType; - -typedef struct { - TB_ObjectFileType type; - TB_Arch arch; - - TB_Slice name; - TB_Slice ar_name; - - size_t symbol_count; - TB_ObjectSymbol* symbols; - - size_t section_count; - TB_ObjectSection sections[]; -} TB_ObjectFile; - -//////////////////////////////// -// Archive parser -//////////////////////////////// -typedef struct { - TB_Slice name; - - // if import_name is empty, we're dealing with an object file - TB_Slice import_name; - uint16_t ordinal; - - TB_Slice content; -} TB_ArchiveEntry; - -typedef struct { - TB_Slice file; - size_t pos; - - size_t member_count; - uint32_t* members; - - size_t symbol_count; - uint16_t* symbols; - - TB_Slice strtbl; -} TB_ArchiveFileParser; - -// We do this to parse the header -bool tb_archive_parse(TB_Slice file, TB_ArchiveFileParser* restrict out_parser); -// After that we can enumerate any symbol entries to resolve imports -size_t tb_archive_parse_entries(TB_ArchiveFileParser* restrict parser, size_t i, size_t count, TB_ArchiveEntry* out_entry); - -#endif // TB_OBJECT_H diff --git a/src/tilde/tb_x64.h b/src/tilde/tb_x64.h deleted file mode 100644 index 58b3d656c..000000000 --- a/src/tilde/tb_x64.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef TB_X64_H -#define TB_X64_H - -#include -#include - -typedef enum { - // uses xmm registers for the reg array - TB_X86_INSTR_XMMREG = (1u << 0u), - - // r/m is a memory operand - TB_X86_INSTR_USE_MEMOP = (1u << 1u), - - // r/m is a rip-relative address (TB_X86_INSTR_USE_MEMOP is always set when this is set) - TB_X86_INSTR_USE_RIPMEM = (1u << 2u), - - // LOCK prefix is present - TB_X86_INSTR_LOCK = (1u << 3u), - - // uses a signed immediate - TB_X86_INSTR_IMMEDIATE = (1u << 4u), - - // absolute means it's using the 64bit immediate (cannot be applied while a memory operand is active) - TB_X86_INSTR_ABSOLUTE = (1u << 5u), - - // set if the r/m can be found on the right hand side - TB_X86_INSTR_DIRECTION = (1u << 6u), - - // uses the second data type because the instruction is weird like MOVSX or MOVZX - TB_X86_INSTR_TWO_DATA_TYPES = (1u << 7u), - - // REP prefix is present - TB_X86_INSTR_REP = (1u << 8u), - - // REPNE prefix is present - TB_X86_INSTR_REPNE = (1u << 9u), -} TB_X86_InstFlags; - -typedef enum { - TB_X86_RAX, TB_X86_RCX, TB_X86_RDX, TB_X86_RBX, TB_X86_RSP, TB_X86_RBP, TB_X86_RSI, TB_X86_RDI, - TB_X86_R8, TB_X86_R9, TB_X86_R10, TB_X86_R11, TB_X86_R12, TB_X86_R13, TB_X86_R14, TB_X86_R15, -} TB_X86_GPR; - -typedef enum { - TB_X86_SEGMENT_DEFAULT = 0, - - TB_X86_SEGMENT_ES, TB_X86_SEGMENT_CS, - TB_X86_SEGMENT_SS, TB_X86_SEGMENT_DS, - TB_X86_SEGMENT_GS, TB_X86_SEGMENT_FS, -} TB_X86_Segment; - -typedef enum { - TB_X86_TYPE_NONE = 0, - - TB_X86_TYPE_BYTE, // 1 - TB_X86_TYPE_WORD, // 2 - TB_X86_TYPE_DWORD, // 4 - TB_X86_TYPE_QWORD, // 8 - - TB_X86_TYPE_PBYTE, // int8 x 16 = 16 - TB_X86_TYPE_PWORD, // int16 x 8 = 16 - TB_X86_TYPE_PDWORD, // int32 x 4 = 16 - TB_X86_TYPE_PQWORD, // int64 x 2 = 16 - - TB_X86_TYPE_SSE_SS, // float32 x 1 = 4 - TB_X86_TYPE_SSE_SD, // float64 x 1 = 8 - TB_X86_TYPE_SSE_PS, // float32 x 4 = 16 - TB_X86_TYPE_SSE_PD, // float64 x 2 = 16 - - TB_X86_TYPE_XMMWORD, // the generic idea of them -} TB_X86_DataType; - -typedef struct { - int32_t opcode; - - // registers (there's 4 max taking up 8bit slots each) - int8_t regs[4]; - uint16_t flags; - - // bitpacking amirite - TB_X86_DataType data_type : 8; - TB_X86_DataType data_type2 : 8; - TB_X86_Segment segment : 4; - uint8_t length : 4; - - // memory operand - // X86_INSTR_USE_MEMOP - uint8_t base, index, scale; - int32_t disp; - - // immediate operand - // imm for INSTR_IMMEDIATE - // abs for INSTR_ABSOLUTE - union { - int32_t imm; - uint64_t abs; - }; -} TB_X86_Inst; - -bool tb_x86_disasm(TB_X86_Inst* restrict inst, size_t length, const uint8_t* data); -const char* tb_x86_reg_name(int8_t reg, TB_X86_DataType dt); -const char* tb_x86_type_name(TB_X86_DataType dt); -const char* tb_x86_mnemonic(TB_X86_Inst* inst); - -#endif /* TB_X64_H */ diff --git a/src/tilde_builtin.cpp b/src/tilde_builtin.cpp deleted file mode 100644 index 3b4e4f900..000000000 --- a/src/tilde_builtin.cpp +++ /dev/null @@ -1,592 +0,0 @@ -gb_internal cgValue cg_builtin_len(cgProcedure *p, cgValue value) { - Type *t = base_type(value.type); - - switch (t->kind) { - case Type_Basic: - switch (t->Basic.kind) { - case Basic_string: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_load(p, len_ptr); - } - case Basic_cstring: - GB_PANIC("TODO(bill): len(cstring)"); - break; - } - break; - case Type_Array: - return cg_const_int(p, t_int, t->Array.count); - case Type_EnumeratedArray: - return cg_const_int(p, t_int, t->EnumeratedArray.count); - case Type_Slice: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_load(p, len_ptr); - } - case Type_DynamicArray: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_load(p, len_ptr); - } - case Type_Map: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_conv(p, cg_emit_load(p, len_ptr), t_int); - } - case Type_Struct: - GB_ASSERT(is_type_soa_struct(t)); - { - if (t->Struct.soa_kind == StructSoa_Fixed) { - return cg_const_int(p, t_int, t->Struct.soa_count); - } - - GB_ASSERT(t->Struct.soa_kind == StructSoa_Slice || - t->Struct.soa_kind == StructSoa_Dynamic); - - isize n = 0; - Type *elem = base_type(t->Struct.soa_elem); - if (elem->kind == Type_Struct) { - n = cast(isize)elem->Struct.fields.count; - } else if (elem->kind == Type_Array) { - n = cast(isize)elem->Array.count; - } else { - GB_PANIC("Unreachable"); - } - - return cg_emit_struct_ev(p, value, n); - } - break; - } - - GB_PANIC("TODO(bill): cg_builtin_len %s", type_to_string(t)); - return {}; -} - -gb_internal cgValue cg_builtin_cap(cgProcedure *p, cgValue value) { - Type *t = base_type(value.type); - - switch (t->kind) { - case Type_Basic: - switch (t->Basic.kind) { - case Basic_string: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_load(p, len_ptr); - } - case Basic_cstring: - GB_PANIC("TODO(bill): cap(cstring)"); - break; - } - break; - case Type_Array: - return cg_const_int(p, t_int, t->Array.count); - case Type_EnumeratedArray: - return cg_const_int(p, t_int, t->EnumeratedArray.count); - case Type_Slice: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 1); - return cg_emit_load(p, len_ptr); - } - case Type_DynamicArray: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue len_ptr = cg_emit_struct_ep(p, ptr, 2); - return cg_emit_load(p, len_ptr); - } - case Type_Map: - { - TB_DataType dt_uintptr = cg_data_type(t_uintptr); - TB_Node *zero = tb_inst_uint(p->func, dt_uintptr, 0); - TB_Node *one = tb_inst_uint(p->func, dt_uintptr, 0); - TB_Node *mask = tb_inst_uint(p->func, dt_uintptr, MAP_CACHE_LINE_SIZE-1); - - TB_Node *data = cg_emit_struct_ev(p, value, 0).node; - TB_Node *log2_cap = tb_inst_and(p->func, data, mask); - TB_Node *cap = tb_inst_shl(p->func, one, log2_cap, cast(TB_ArithmeticBehavior)0); - TB_Node *cmp = tb_inst_cmp_eq(p->func, data, zero); - - cgValue res = cg_value(tb_inst_select(p->func, cmp, zero, cap), t_uintptr); - return cg_emit_conv(p, res, t_int); - } - case Type_Struct: - GB_ASSERT(is_type_soa_struct(t)); - break; - } - - GB_PANIC("TODO(bill): cg_builtin_cap %s", type_to_string(t)); - return {}; -} - - -gb_internal cgValue cg_builtin_raw_data(cgProcedure *p, cgValue const &value) { - Type *t = base_type(value.type); - cgValue res = {}; - switch (t->kind) { - case Type_Slice: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue data_ptr = cg_emit_struct_ep(p, ptr, 0); - res = cg_emit_load(p, data_ptr); - GB_ASSERT(is_type_multi_pointer(res.type)); - } - break; - case Type_DynamicArray: - { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue data_ptr = cg_emit_struct_ep(p, ptr, 0); - res = cg_emit_load(p, data_ptr); - } - break; - case Type_Basic: - if (t->Basic.kind == Basic_string) { - GB_ASSERT(value.kind == cgValue_Addr); - cgValue ptr = cg_value(value.node, alloc_type_pointer(value.type)); - cgValue data_ptr = cg_emit_struct_ep(p, ptr, 0); - res = cg_emit_load(p, data_ptr); - } else if (t->Basic.kind == Basic_cstring) { - res = cg_emit_conv(p, value, t_u8_multi_ptr); - } - break; - case Type_Pointer: - GB_ASSERT(is_type_array_like(t->Pointer.elem)); - GB_ASSERT(value.kind == cgValue_Value); - res = cg_value(value.node, alloc_type_multi_pointer(base_array_type(t->Pointer.elem))); - break; - case Type_MultiPointer: - - GB_PANIC("TODO(bill) %s", type_to_string(value.type)); - // res = cg_emit_conv(p, value, tv.type); - break; - } - GB_ASSERT(res.node != nullptr); - return res; -} - -gb_internal cgValue cg_builtin_min(cgProcedure *p, Type *t, cgValue x, cgValue y) { - x = cg_emit_conv(p, x, t); - y = cg_emit_conv(p, y, t); - return cg_emit_select(p, cg_emit_comp(p, Token_Lt, x, y), x, y); -} -gb_internal cgValue cg_builtin_max(cgProcedure *p, Type *t, cgValue x, cgValue y) { - x = cg_emit_conv(p, x, t); - y = cg_emit_conv(p, y, t); - return cg_emit_select(p, cg_emit_comp(p, Token_Gt, x, y), x, y); -} - -gb_internal cgValue cg_builtin_abs(cgProcedure *p, cgValue const &x) { - if (is_type_unsigned(x.type)) { - return x; - } - - if (is_type_quaternion(x.type)) { - GB_PANIC("TODO(bill): abs quaternion"); - } else if (is_type_complex(x.type)) { - GB_PANIC("TODO(bill): abs complex"); - } - - TB_DataType dt = cg_data_type(x.type); - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - TB_Node *zero = nullptr; - if (dt.type == TB_FLOAT) { - if (dt.data == 32) { - zero = tb_inst_float32(p->func, 0); - } else if (dt.data == 64) { - zero = tb_inst_float64(p->func, 0); - } - } else { - zero = tb_inst_uint(p->func, dt, 0); - } - GB_ASSERT(zero != nullptr); - - cgValue cond = cg_emit_comp(p, Token_Lt, x, cg_value(zero, x.type)); - cgValue neg = cg_emit_unary_arith(p, Token_Sub, x, x.type); - return cg_emit_select(p, cond, neg, x); -} - -gb_internal cgValue cg_builtin_clamp(cgProcedure *p, Type *t, cgValue const &x, cgValue const &min, cgValue const &max) { - cgValue z = x; - z = cg_builtin_max(p, t, z, min); - z = cg_builtin_min(p, t, z, max); - return z; -} - - - -gb_internal cgValue cg_builtin_mem_zero(cgProcedure *p, cgValue const &ptr, cgValue const &len) { - GB_ASSERT(ptr.kind == cgValue_Value); - GB_ASSERT(len.kind == cgValue_Value); - tb_inst_memzero(p->func, ptr.node, len.node, 1); - return ptr; -} - -gb_internal cgValue cg_builtin_mem_copy(cgProcedure *p, cgValue const &dst, cgValue const &src, cgValue const &len) { - GB_ASSERT(dst.kind == cgValue_Value); - GB_ASSERT(src.kind == cgValue_Value); - GB_ASSERT(len.kind == cgValue_Value); - // TODO(bill): This needs to be memmove - tb_inst_memcpy(p->func, dst.node, src.node, len.node, 1); - return dst; -} - -gb_internal cgValue cg_builtin_mem_copy_non_overlapping(cgProcedure *p, cgValue const &dst, cgValue const &src, cgValue const &len) { - GB_ASSERT(dst.kind == cgValue_Value); - GB_ASSERT(src.kind == cgValue_Value); - GB_ASSERT(len.kind == cgValue_Value); - tb_inst_memcpy(p->func, dst.node, src.node, len.node, 1); - return dst; -} - -gb_internal TB_Symbol *cg_builtin_map_cell_info_symbol(cgModule *m, Type *type) { - MUTEX_GUARD(&m->map_info_mutex); - TB_Symbol **found = map_get(&m->map_cell_info_map, type); - if (found) { - return *found; - } - i64 size = 0, len = 0; - map_cell_size_and_len(type, &size, &len); - - TB_Global *global = tb_global_create(m->mod, 0, "", cg_debug_type(m, t_map_cell_info), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), global, type_size_of(t_map_cell_info), type_align_of(t_map_cell_info), 4); - - i64 ptr_size = build_context.ptr_size; - void *size_of_type = tb_global_add_region(m->mod, global, 0*ptr_size, ptr_size); - void *align_of_type = tb_global_add_region(m->mod, global, 1*ptr_size, ptr_size); - void *size_of_cell = tb_global_add_region(m->mod, global, 2*ptr_size, ptr_size); - void *elements_per_cell = tb_global_add_region(m->mod, global, 3*ptr_size, ptr_size); - - cg_write_uint_at_ptr(size_of_type, type_size_of(type), t_uintptr); - cg_write_uint_at_ptr(align_of_type, type_align_of(type), t_uintptr); - cg_write_uint_at_ptr(size_of_cell, size, t_uintptr); - cg_write_uint_at_ptr(elements_per_cell, len, t_uintptr); - - map_set(&m->map_cell_info_map, type, cast(TB_Symbol *)global); - - return cast(TB_Symbol *)global; -} - - -gb_internal cgValue cg_builtin_map_cell_info(cgProcedure *p, Type *type) { - type = core_type(type); - TB_Symbol *symbol = cg_builtin_map_cell_info_symbol(p->module, type); - TB_Node *node = tb_inst_get_symbol_address(p->func, symbol); - return cg_value(node, t_map_cell_info_ptr); -} - -gb_internal cgValue cg_builtin_map_info(cgProcedure *p, Type *map_type) { - map_type = base_type(map_type); - GB_ASSERT(map_type->kind == Type_Map); - - cgModule *m = p->module; - MUTEX_GUARD(&m->map_info_mutex); - TB_Global *global = nullptr; - TB_Symbol **found = map_get(&m->map_info_map, map_type); - if (found) { - global = cast(TB_Global *)*found; - } else { - global = tb_global_create(m->mod, 0, "", cg_debug_type(m, t_map_info), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), global, type_size_of(t_map_info), type_align_of(t_map_info), 4); - - TB_Symbol *key_cell_info = cg_builtin_map_cell_info_symbol(m, map_type->Map.key); - TB_Symbol *value_cell_info = cg_builtin_map_cell_info_symbol(m, map_type->Map.value); - cgProcedure *key_hasher = cg_hasher_proc_for_type(p->module, map_type->Map.key); - cgProcedure *key_equal = cg_equal_proc_for_type (p->module, map_type->Map.key); - - tb_global_add_symbol_reloc(p->module->mod, global, 0*build_context.ptr_size, key_cell_info); - tb_global_add_symbol_reloc(p->module->mod, global, 1*build_context.ptr_size, value_cell_info); - tb_global_add_symbol_reloc(p->module->mod, global, 2*build_context.ptr_size, key_hasher->symbol); - tb_global_add_symbol_reloc(p->module->mod, global, 3*build_context.ptr_size, key_equal->symbol); - - map_set(&m->map_info_map, map_type, cast(TB_Symbol *)global); - } - - GB_ASSERT(global != nullptr); - TB_Node *node = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)global); - return cg_value(node, t_map_info_ptr); -} - - - - -gb_internal cgValue cg_build_builtin(cgProcedure *p, BuiltinProcId id, Ast *expr) { - ast_node(ce, CallExpr, expr); - - if (BuiltinProc__simd_begin < id && id < BuiltinProc__simd_end) { - GB_PANIC("TODO(bill): cg_build_builtin_simd_proc"); - // return cg_build_builtin_simd_proc(p, expr, tv, id); - } - - String builtin_name = builtin_procs[id].name; - - switch (id) { - case BuiltinProc_DIRECTIVE: { - ast_node(bd, BasicDirective, ce->proc); - String name = bd->name.string; - GB_ASSERT(name == "location"); - String procedure = p->entity->token.string; - TokenPos pos = ast_token(ce->proc).pos; - if (ce->args.count > 0) { - Ast *ident = unselector_expr(ce->args[0]); - GB_ASSERT(ident->kind == Ast_Ident); - Entity *e = entity_of_node(ident); - GB_ASSERT(e != nullptr); - - if (e->parent_proc_decl != nullptr && e->parent_proc_decl->entity != nullptr) { - procedure = e->parent_proc_decl->entity->token.string; - } else { - procedure = str_lit(""); - } - pos = e->token.pos; - - } - return cg_emit_source_code_location_as_global(p, procedure, pos); - } break; - - case BuiltinProc_len: { - cgValue v = cg_build_expr(p, ce->args[0]); - Type *t = base_type(v.type); - if (is_type_pointer(t)) { - // IMPORTANT TODO(bill): Should there be a nil pointer check? - v = cg_emit_load(p, v); - t = type_deref(t); - } - return cg_builtin_len(p, v); - } - - case BuiltinProc_cap: { - cgValue v = cg_build_expr(p, ce->args[0]); - Type *t = base_type(v.type); - if (is_type_pointer(t)) { - // IMPORTANT TODO(bill): Should there be a nil pointer check? - v = cg_emit_load(p, v); - t = type_deref(t); - } - return cg_builtin_cap(p, v); - } - - case BuiltinProc_raw_data: - { - cgValue v = cg_build_expr(p, ce->args[0]); - return cg_builtin_raw_data(p, v); - } - - case BuiltinProc_min: - if (ce->args.count == 2) { - Type *t = type_of_expr(expr); - cgValue x = cg_build_expr(p, ce->args[0]); - cgValue y = cg_build_expr(p, ce->args[1]); - return cg_builtin_min(p, t, x, y); - } else { - Type *t = type_of_expr(expr); - cgValue x = cg_build_expr(p, ce->args[0]); - for (isize i = 1; i < ce->args.count; i++) { - cgValue y = cg_build_expr(p, ce->args[i]); - x = cg_builtin_min(p, t, x, y); - } - return x; - } - break; - case BuiltinProc_max: - if (ce->args.count == 2) { - Type *t = type_of_expr(expr); - cgValue x = cg_build_expr(p, ce->args[0]); - cgValue y = cg_build_expr(p, ce->args[1]); - return cg_builtin_max(p, t, x, y); - } else { - Type *t = type_of_expr(expr); - cgValue x = cg_build_expr(p, ce->args[0]); - for (isize i = 1; i < ce->args.count; i++) { - cgValue y = cg_build_expr(p, ce->args[i]); - x = cg_builtin_max(p, t, x, y); - } - return x; - } - break; - - case BuiltinProc_abs: - { - cgValue x = cg_build_expr(p, ce->args[0]); - return cg_builtin_abs(p, x); - } - - case BuiltinProc_clamp: - { - cgValue x = cg_build_expr(p, ce->args[0]); - cgValue min = cg_build_expr(p, ce->args[1]); - cgValue max = cg_build_expr(p, ce->args[2]); - return cg_builtin_clamp(p, type_of_expr(expr), x, min, max); - } - - case BuiltinProc_debug_trap: - tb_inst_debugbreak(p->func); - return {}; - case BuiltinProc_trap: - tb_inst_trap(p->func); - return {}; - - case BuiltinProc_mem_zero: - { - cgValue ptr = cg_build_expr(p, ce->args[0]); - cgValue len = cg_build_expr(p, ce->args[1]); - return cg_builtin_mem_zero(p, ptr, len); - } - - case BuiltinProc_mem_copy: - { - cgValue dst = cg_build_expr(p, ce->args[0]); - cgValue src = cg_build_expr(p, ce->args[1]); - cgValue len = cg_build_expr(p, ce->args[2]); - return cg_builtin_mem_copy(p, dst, src, len); - } - - case BuiltinProc_mem_copy_non_overlapping: - { - cgValue dst = cg_build_expr(p, ce->args[0]); - cgValue src = cg_build_expr(p, ce->args[1]); - cgValue len = cg_build_expr(p, ce->args[2]); - return cg_builtin_mem_copy_non_overlapping(p, dst, src, len); - } - - - case BuiltinProc_overflow_add: - { - Type *res_type = type_of_expr(expr); - GB_ASSERT(res_type->kind == Type_Tuple); - GB_ASSERT(res_type->Tuple.variables.count == 2); - // TODO(bill): do a proper overflow add - Type *type = res_type->Tuple.variables[0]->type; - Type *ok_type = res_type->Tuple.variables[1]->type; - cgValue x = cg_build_expr(p, ce->args[0]); - cgValue y = cg_build_expr(p, ce->args[1]); - x = cg_emit_conv(p, x, type); - y = cg_emit_conv(p, y, type); - cgValue res = cg_emit_arith(p, Token_Add, x, y, type); - cgValue ok = cg_const_int(p, ok_type, false); - - return cg_value_multi2(res, ok, res_type); - } - - - case BuiltinProc_ptr_offset: - { - cgValue ptr = cg_build_expr(p, ce->args[0]); - cgValue len = cg_build_expr(p, ce->args[1]); - len = cg_emit_conv(p, len, t_int); - return cg_emit_ptr_offset(p, ptr, len); - } - case BuiltinProc_ptr_sub: - { - Type *elem0 = type_deref(type_of_expr(ce->args[0])); - Type *elem1 = type_deref(type_of_expr(ce->args[1])); - GB_ASSERT(are_types_identical(elem0, elem1)); - Type *elem = elem0; - - cgValue ptr0 = cg_emit_conv(p, cg_build_expr(p, ce->args[0]), t_uintptr); - cgValue ptr1 = cg_emit_conv(p, cg_build_expr(p, ce->args[1]), t_uintptr); - - cgValue diff = cg_emit_arith(p, Token_Sub, ptr0, ptr1, t_uintptr); - diff = cg_emit_conv(p, diff, t_int); - return cg_emit_arith(p, Token_Quo, diff, cg_const_int(p, t_int, type_size_of(elem)), t_int); - } - - case BuiltinProc_type_info_of: - { - Ast *arg = ce->args[0]; - TypeAndValue tav = type_and_value_of_expr(arg); - if (tav.mode == Addressing_Type) { - Type *t = default_type(type_of_expr(arg)); - return cg_type_info(p, t); - } - GB_ASSERT(is_type_typeid(tav.type)); - - auto args = slice_make(permanent_allocator(), 1); - args[0] = cg_build_expr(p, arg); - return cg_emit_runtime_call(p, "__type_info_of", args); - } - - - case BuiltinProc_type_equal_proc: - return cg_equal_proc_value_for_type(p, ce->args[0]->tav.type); - - case BuiltinProc_type_hasher_proc: - return cg_hasher_proc_value_for_type(p, ce->args[0]->tav.type); - - case BuiltinProc_type_map_cell_info: - return cg_builtin_map_cell_info(p, ce->args[0]->tav.type); - case BuiltinProc_type_map_info: - return cg_builtin_map_info(p, ce->args[0]->tav.type); - - case BuiltinProc_expect: - { - Type *t = default_type(expr->tav.type); - cgValue x = cg_emit_conv(p, cg_build_expr(p, ce->args[0]), t); - cgValue y = cg_emit_conv(p, cg_build_expr(p, ce->args[1]), t); - gb_unused(y); - return x; - } - - case BuiltinProc_count_leading_zeros: - { - cgValue n = cg_build_expr(p, ce->args[0]); - n = cg_emit_conv(p, n, default_type(expr->tav.type)); - GB_ASSERT(n.kind == cgValue_Value); - TB_Node *val = tb_inst_clz(p->func, n.node); - val = tb_inst_zxt(p->func, val, cg_data_type(n.type)); - return cg_value(val, n.type); - } - - - case BuiltinProc_count_trailing_zeros: - { - cgValue n = cg_build_expr(p, ce->args[0]); - n = cg_emit_conv(p, n, default_type(expr->tav.type)); - GB_ASSERT(n.kind == cgValue_Value); - TB_Node *val = tb_inst_ctz(p->func, n.node); - val = tb_inst_zxt(p->func, val, cg_data_type(n.type)); - return cg_value(val, n.type); - } - - case BuiltinProc_count_ones: - { - cgValue n = cg_build_expr(p, ce->args[0]); - n = cg_emit_conv(p, n, default_type(expr->tav.type)); - GB_ASSERT(n.kind == cgValue_Value); - TB_Node *val = tb_inst_popcount(p->func, n.node); - val = tb_inst_zxt(p->func, val, cg_data_type(n.type)); - return cg_value(val, n.type); - } - - case BuiltinProc_count_zeros: - { - cgValue n = cg_build_expr(p, ce->args[0]); - n = cg_emit_conv(p, n, default_type(expr->tav.type)); - GB_ASSERT(n.kind == cgValue_Value); - TB_DataType dt = cg_data_type(n.type); - TB_Node *ones = tb_inst_popcount(p->func, n.node); - ones = tb_inst_zxt(p->func, ones, dt); - - cgValue size = cg_const_int(p, n.type, 8*type_size_of(n.type)); - return cg_emit_arith(p, Token_Sub, size, cg_value(ones, n.type), n.type); - } - - } - - - GB_PANIC("TODO(bill): builtin procs %d %.*s", id, LIT(builtin_name)); - return {}; -} - diff --git a/src/tilde_const.cpp b/src/tilde_const.cpp deleted file mode 100644 index 456b2cdc7..000000000 --- a/src/tilde_const.cpp +++ /dev/null @@ -1,1049 +0,0 @@ -gb_internal bool cg_is_expr_constant_zero(Ast *expr) { - GB_ASSERT(expr != nullptr); - auto v = exact_value_to_integer(expr->tav.value); - if (v.kind == ExactValue_Integer) { - return big_int_cmp_zero(&v.value_integer) == 0; - } - return false; -} - -gb_internal cgValue cg_const_nil(cgModule *m, cgProcedure *p, Type *type) { - GB_ASSERT(m != nullptr); - Type *original_type = type; - type = core_type(type); - i64 size = type_size_of(type); - i64 align = type_align_of(type); - TB_DataType dt = cg_data_type(type); - if (TB_IS_VOID_TYPE(dt)) { - char name[32] = {}; - gb_snprintf(name, 31, "cnil$%u", 1+m->const_nil_guid.fetch_add(1)); - TB_Global *global = tb_global_create(m->mod, -1, name, cg_debug_type(m, type), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), global, size, align, 0); - - TB_Symbol *symbol = cast(TB_Symbol *)global; - if (p) { - TB_Node *node = tb_inst_get_symbol_address(p->func, symbol); - return cg_lvalue_addr(node, type); - } else { - return cg_value(symbol, type); - } - } - - if (is_type_internally_pointer_like(type)) { - return cg_value(tb_inst_uint(p->func, dt, 0), type); - } else if (is_type_integer(type) || is_type_boolean(type) || is_type_bit_set(type) || is_type_typeid(type)) { - return cg_value(tb_inst_uint(p->func, dt, 0), type); - } else if (is_type_float(type)) { - switch (size) { - case 2: - return cg_value(tb_inst_uint(p->func, dt, 0), type); - case 4: - return cg_value(tb_inst_float32(p->func, 0), type); - case 8: - return cg_value(tb_inst_float64(p->func, 0), type); - } - } - GB_PANIC("TODO(bill): cg_const_nil %s", type_to_string(original_type)); - return {}; -} - -gb_internal cgValue cg_const_nil(cgProcedure *p, Type *type) { - return cg_const_nil(p->module, p, type); -} - -gb_internal TB_Global *cg_global_const_string(cgModule *m, String const &str, Type *type, TB_Global *global, i64 offset); -gb_internal void cg_write_int_at_ptr(void *dst, i64 i, Type *original_type); - -gb_internal void cg_global_source_code_location_const(cgModule *m, String const &proc_name, TokenPos pos, TB_Global *global, i64 offset) { - // Source_Code_Location :: struct { - // file_path: string, - // line, column: i32, - // procedure: string, - // } - - i64 file_path_offset = type_offset_of(t_source_code_location, 0); - i64 line_offset = type_offset_of(t_source_code_location, 1); - i64 column_offset = type_offset_of(t_source_code_location, 2); - i64 procedure_offset = type_offset_of(t_source_code_location, 3); - - String file_path = get_file_path_string(pos.file_id); - if (file_path.len != 0) { - cg_global_const_string(m, file_path, t_string, global, offset+file_path_offset); - } - - void *line_ptr = tb_global_add_region(m->mod, global, offset+line_offset, 4); - void *column_ptr = tb_global_add_region(m->mod, global, offset+column_offset, 4); - cg_write_int_at_ptr(line_ptr, pos.line, t_i32); - cg_write_int_at_ptr(column_ptr, pos.column, t_i32); - - if (proc_name.len != 0) { - cg_global_const_string(m, proc_name, t_string, global, offset+procedure_offset); - } -} - - -gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, String const &proc_name, TokenPos pos) { - cgModule *m = p->module; - char name[32] = {}; - gb_snprintf(name, 31, "scl$%u", 1+m->const_nil_guid.fetch_add(1)); - - TB_Global *global = tb_global_create(m->mod, -1, name, cg_debug_type(m, t_source_code_location), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), global, type_size_of(t_source_code_location), type_align_of(t_source_code_location), 6); - - cg_global_source_code_location_const(m, proc_name, pos, global, 0); - - TB_Node *ptr = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)global); - return cg_lvalue_addr(ptr, t_source_code_location); -} - -gb_internal cgValue cg_emit_source_code_location_as_global(cgProcedure *p, Ast *node) { - String proc_name = p->name; - TokenPos pos = ast_token(node).pos; - return cg_emit_source_code_location_as_global(p, proc_name, pos); -} - -gb_internal void cg_write_big_int_at_ptr(void *dst, BigInt const *a, Type *original_type) { - GB_ASSERT(build_context.endian_kind == TargetEndian_Little); - size_t sz = cast(size_t)type_size_of(original_type); - if (big_int_is_zero(a)) { - gb_memset(dst, 0, sz); - return; - } - u64 rop64[4] = {}; // 2 u64 is the maximum we will ever need, so doubling it will be fine :P - u8 *rop = cast(u8 *)rop64; - - size_t max_count = 0; - size_t written = 0; - size_t size = 1; - size_t nails = 0; - mp_endian endian = MP_LITTLE_ENDIAN; - - max_count = mp_pack_count(a, nails, size); - if (sz < max_count) { - debug_print_big_int(a); - gb_printf_err("%s -> %tu\n", type_to_string(original_type), sz);; - } - GB_ASSERT_MSG(sz >= max_count, "max_count: %tu, sz: %tu, written: %tu, type %s", max_count, sz, written, type_to_string(original_type)); - GB_ASSERT(gb_size_of(rop64) >= sz); - - mp_err err = mp_pack(rop, sz, &written, - MP_LSB_FIRST, - size, endian, nails, - a); - GB_ASSERT(err == MP_OKAY); - - if (!is_type_endian_little(original_type)) { - for (size_t i = 0; i < sz/2; i++) { - u8 tmp = rop[i]; - rop[i] = rop[sz-1-i]; - rop[sz-1-i] = tmp; - } - } - - gb_memcopy(dst, rop, sz); - return; -} - - -gb_internal void cg_write_int_at_ptr(void *dst, i64 i, Type *original_type) { - ExactValue v = exact_value_i64(i); - cg_write_big_int_at_ptr(dst, &v.value_integer, original_type); -} -gb_internal void cg_write_uint_at_ptr(void *dst, u64 i, Type *original_type) { - ExactValue v = exact_value_u64(i); - cg_write_big_int_at_ptr(dst, &v.value_integer, original_type); -} - -gb_internal TB_Global *cg_global_const_string(cgModule *m, String const &str, Type *type, TB_Global *global, i64 offset) { - GB_ASSERT(is_type_string(type)); - - char name[32] = {}; - gb_snprintf(name, 31, "csb$%u", 1+m->const_nil_guid.fetch_add(1)); - TB_Global *str_global = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - i64 size = str.len+1; - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), str_global, size, 1, 1); - u8 *data = cast(u8 *)tb_global_add_region(m->mod, str_global, 0, size); - gb_memcopy(data, str.text, str.len); - data[str.len] = 0; - - if (is_type_cstring(type)) { - if (global) { - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)str_global); - } - return str_global; - } - - if (global == nullptr) { - gb_snprintf(name, 31, "cstr$%u", 1+m->const_nil_guid.fetch_add(1)); - global = tb_global_create(m->mod, -1, name, cg_debug_type(m, type), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), global, type_size_of(type), type_align_of(type), 2); - } - - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)str_global); - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, str.len, t_int); - - return global; -} - -gb_internal bool cg_elem_type_can_be_constant(Type *t) { - t = base_type(t); - if (t == t_invalid) { - return false; - } - if (is_type_dynamic_array(t) || is_type_map(t)) { - return false; - } - return true; -} - - -gb_internal bool cg_is_elem_const(Ast *elem, Type *elem_type) { - if (!cg_elem_type_can_be_constant(elem_type)) { - return false; - } - if (elem->kind == Ast_FieldValue) { - elem = elem->FieldValue.value; - } - TypeAndValue tav = type_and_value_of_expr(elem); - GB_ASSERT_MSG(tav.mode != Addressing_Invalid, "%s %s", expr_to_string(elem), type_to_string(tav.type)); - return tav.value.kind != ExactValue_Invalid; -} - -gb_internal bool cg_is_nested_possibly_constant(Type *ft, Selection const &sel, Ast *elem) { - GB_ASSERT(!sel.indirect); - for (i32 index : sel.index) { - Type *bt = base_type(ft); - switch (bt->kind) { - case Type_Struct: - // if (bt->Struct.is_raw_union) { - // return false; - // } - ft = bt->Struct.fields[index]->type; - break; - case Type_Array: - ft = bt->Array.elem; - break; - default: - return false; - } - } - return cg_is_elem_const(elem, ft); -} - -gb_internal i64 cg_global_const_calculate_region_count_from_basic_type(Type *type) { - type = core_type(type); - - switch (type->kind) { - case Type_Basic: - switch (type->Basic.kind) { - case Basic_string: // ^u8 + int - case Basic_any: // rawptr + typeid - return 2; - } - return 1; - case Type_Pointer: - case Type_MultiPointer: - return 2; // allows for offsets - case Type_Proc: - return 1; - case Type_Slice: - return 3; // alows for offsets - case Type_DynamicArray: - return 5; - case Type_Map: - return 4; - - case Type_Enum: - case Type_BitSet: - return 1; - - case Type_RelativePointer: - case Type_RelativeMultiPointer: - return 2; // allows for offsets - - case Type_Matrix: - return 1; - - case Type_Array: - { - Type *elem = type->Array.elem; - i64 count = cg_global_const_calculate_region_count_from_basic_type(elem); - return count*type->Array.count; - } - case Type_EnumeratedArray: - { - Type *elem = type->EnumeratedArray.elem; - i64 count = cg_global_const_calculate_region_count_from_basic_type(elem); - return count*type->EnumeratedArray.count; - } - - case Type_Struct: - if (type->Struct.is_raw_union) { - i64 max_count = 0; - for (Entity *f : type->Struct.fields) { - i64 count = cg_global_const_calculate_region_count_from_basic_type(f->type); - max_count = gb_max(count, max_count); - } - return max_count; - } else { - i64 max_count = 0; - for (Entity *f : type->Struct.fields) { - max_count += cg_global_const_calculate_region_count_from_basic_type(f->type); - } - return max_count; - } - break; - case Type_Union: - { - i64 max_count = 0; - for (Type *t : type->Union.variants) { - i64 count = cg_global_const_calculate_region_count_from_basic_type(t); - max_count = gb_max(count, max_count); - } - return max_count+1; - } - break; - - default: - GB_PANIC("TODO(bill): %s", type_to_string(type)); - break; - } - return -1; -} -gb_internal isize cg_global_const_calculate_region_count(ExactValue const &value, Type *type) { - Type *bt = base_type(type); - if (is_type_array(type) && value.kind == ExactValue_String && !is_type_u8(core_array_type(type))) { - if (is_type_rune_array(type)) { - return 1; - } - - Type *et = base_array_type(type); - i64 base_count = 2; - if (is_type_cstring(et)) { - base_count = 1; - } - return base_count * bt->Array.count; - } else if (is_type_u8_array(type) && value.kind == ExactValue_String) { - return 1; - } else if (is_type_array(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_String && - value.kind != ExactValue_Compound) { - Type *elem = type->Array.elem; - - i64 base_count = cg_global_const_calculate_region_count(value, elem); - return base_count * type->Array.count; - } else if (is_type_matrix(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_Compound) { - return 1; - } else if (is_type_simd_vector(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_Compound) { - return 1; - } - - isize count = 0; - switch (value.kind) { - case ExactValue_Invalid: - return 0; - case ExactValue_Bool: - case ExactValue_Integer: - case ExactValue_Float: - case ExactValue_Typeid: - case ExactValue_Complex: - case ExactValue_Quaternion: - return 1; - case ExactValue_Pointer: - return 2; - - case ExactValue_Procedure: - return 1; - - case ExactValue_String: - if (is_type_string(type)) { - return 3; - } else if (is_type_cstring(type) || is_type_array_like(type)) { - return 2; - } - return 3; - - case ExactValue_Compound: { - ast_node(cl, CompoundLit, value.value_compound); - Type *bt = base_type(type); - switch (bt->kind) { - case Type_Struct: - if (cl->elems[0]->kind == Ast_FieldValue) { - for (isize i = 0; i < cl->elems.count; i++) { - ast_node(fv, FieldValue, cl->elems[i]); - String name = fv->field->Ident.token.string; - - Selection sel = lookup_field(type, name, false); - GB_ASSERT(!sel.indirect); - - Entity *f = bt->Struct.fields[sel.index[0]]; - - if (!cg_elem_type_can_be_constant(f->type)) { - continue; - } - - if (sel.index.count == 1) { - count += cg_global_const_calculate_region_count(fv->value->tav.value, f->type); - } else { - count += 1; // just in case - if (cg_is_nested_possibly_constant(type, sel, fv->value)) { - Type *cv_type = sel.entity->type; - count += cg_global_const_calculate_region_count(fv->value->tav.value, cv_type); - } - } - } - } else { - for_array(i, cl->elems) { - i64 field_index = i; - Ast *elem = cl->elems[i]; - TypeAndValue tav = elem->tav; - Entity *f = bt->Struct.fields[field_index]; - if (!cg_elem_type_can_be_constant(f->type)) { - continue; - } - - ExactValue value = {}; - if (tav.mode != Addressing_Invalid) { - value = tav.value; - } - count += cg_global_const_calculate_region_count(value, type); - } - } - break; - case Type_Array: - case Type_EnumeratedArray: - case Type_SimdVector: { - Type *et = base_array_type(bt); - if (!cg_elem_type_can_be_constant(et)) { - break; - } - for (Ast *elem : cl->elems) { - if (elem->kind == Ast_FieldValue) { - ast_node(fv, FieldValue, elem); - ExactValue const &value = elem->FieldValue.value->tav.value; - if (is_ast_range(fv->field)) { - ast_node(ie, BinaryExpr, fv->field); - TypeAndValue lo_tav = ie->left->tav; - TypeAndValue hi_tav = ie->right->tav; - GB_ASSERT(lo_tav.mode == Addressing_Constant); - GB_ASSERT(hi_tav.mode == Addressing_Constant); - - TokenKind op = ie->op.kind; - i64 lo = exact_value_to_i64(lo_tav.value); - i64 hi = exact_value_to_i64(hi_tav.value); - if (op != Token_RangeHalf) { - hi += 1; - } - - for (i64 i = lo; i < hi; i++) { - count += cg_global_const_calculate_region_count(value, et); - } - } else { - count += cg_global_const_calculate_region_count(value, et); - } - } else { - ExactValue const &value = elem->tav.value; - count += cg_global_const_calculate_region_count(value, et); - } - } - } break; - - case Type_BitSet: - return 1; - case Type_Matrix: - return 1; - - case Type_Slice: - return 3; - - default: - GB_PANIC("TODO(bill): %s", type_to_string(type)); - break; - } - }break; - } - return count; -} - -gb_internal TB_Global *cg_global_const_comp_literal(cgModule *m, Type *type, ExactValue const &value, TB_Global *global, i64 base_offset); - -gb_internal bool cg_global_const_add_region(cgModule *m, ExactValue const &value, Type *type, TB_Global *global, i64 offset) { - GB_ASSERT(is_type_endian_little(type)); - GB_ASSERT(!is_type_different_to_arch_endianness(type)); - - GB_ASSERT(global != nullptr); - - Type *bt = base_type(type); - i64 size = type_size_of(type); - if (value.kind == ExactValue_Invalid) { - return false; - } - if (is_type_array(type) && value.kind == ExactValue_String && !is_type_u8(core_array_type(type))) { - if (is_type_rune_array(type)) { - i64 count = type->Array.count; - Rune rune; - isize rune_offset = 0; - isize width = 1; - String s = value.value_string; - - Rune *runes = cast(Rune *)tb_global_add_region(m->mod, global, offset, count*4); - - for (i64 i = 0; i < count && rune_offset < s.len; i++) { - width = utf8_decode(s.text+rune_offset, s.len-rune_offset, &rune); - runes[i] = rune; - rune_offset += width; - - } - GB_ASSERT(offset == s.len); - return true; - } - Type *et = bt->Array.elem; - i64 elem_size = type_size_of(et); - - for (i64 i = 0; i < bt->Array.count; i++) { - cg_global_const_add_region(m, value, et, global, offset+(i * elem_size)); - } - return true; - } else if (is_type_u8_array(type) && value.kind == ExactValue_String) { - u8 *dst = cast(u8 *)tb_global_add_region(m->mod, global, offset, size); - gb_memcopy(dst, value.value_string.text, gb_min(value.value_string.len, size)); - return true; - } else if (is_type_array(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_String && - value.kind != ExactValue_Compound) { - - Type *et = bt->Array.elem; - i64 elem_size = type_size_of(et); - - for (i64 i = 0; i < bt->Array.count; i++) { - cg_global_const_add_region(m, value, et, global, offset+(i * elem_size)); - } - - return true; - } else if (is_type_matrix(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_Compound) { - GB_PANIC("TODO(bill): matrices"); - - i64 row = bt->Matrix.row_count; - i64 column = bt->Matrix.column_count; - GB_ASSERT(row == column); - - Type *elem = bt->Matrix.elem; - - i64 elem_size = type_size_of(elem); - gb_unused(elem_size); - - // 1 region in memory, not many - - return true; - } else if (is_type_simd_vector(type) && - value.kind != ExactValue_Invalid && - value.kind != ExactValue_Compound) { - - GB_PANIC("TODO(bill): #simd vectors"); - - Type *et = type->SimdVector.elem; - i64 elem_size = type_size_of(et); - gb_unused(elem_size); - - // 1 region in memory, not many - - return true; - } - - - switch (value.kind) { - case ExactValue_Bool: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - bool *res = cast(bool *)tb_global_add_region(m->mod, global, offset, size); - *res = !!value.value_bool; - } - break; - - case ExactValue_Integer: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - void *res = tb_global_add_region(m->mod, global, offset, size); - cg_write_big_int_at_ptr(res, &value.value_integer, type); - } - break; - - case ExactValue_Float: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - f64 f = exact_value_to_f64(value); - void *res = tb_global_add_region(m->mod, global, offset, size); - switch (size) { - case 2: *(u16 *)res = f32_to_f16(cast(f32)f); break; - case 4: *(f32 *)res = cast(f32)f; break; - case 8: *(f64 *)res = cast(f64)f; break; - } - } - break; - - case ExactValue_Pointer: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - void *res = tb_global_add_region(m->mod, global, offset, size); - *(u64 *)res = exact_value_to_u64(value); - } - break; - - case ExactValue_String: - if (is_type_array_like(type)) { - GB_ASSERT(global != nullptr); - void *data = tb_global_add_region(m->mod, global, offset, size); - gb_memcopy(data, value.value_string.text, gb_min(value.value_string.len, size)); - } else { - cg_global_const_string(m, value.value_string, type, global, offset); - } - break; - - case ExactValue_Typeid: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - void *dst = tb_global_add_region(m->mod, global, offset, size); - u64 id = cg_typeid_as_u64(m, value.value_typeid); - cg_write_uint_at_ptr(dst, id, t_typeid); - } - break; - - case ExactValue_Compound: - { - TB_Global *out_global = cg_global_const_comp_literal(m, type, value, global, offset); - GB_ASSERT(out_global == global); - } - break; - - case ExactValue_Procedure: - GB_PANIC("TODO(bill): nested procedure values/literals\n"); - break; - case ExactValue_Complex: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - Complex128 c = {}; - if (value.value_complex) { - c = *value.value_complex; - } - void *res = tb_global_add_region(m->mod, global, offset, size); - switch (size) { - case 4: - ((u16 *)res)[0] = f32_to_f16(cast(f32)c.real); - ((u16 *)res)[1] = f32_to_f16(cast(f32)c.imag); - break; - case 8: - ((f32 *)res)[0] = cast(f32)c.real; - ((f32 *)res)[1] = cast(f32)c.imag; - break; - case 16: - ((f64 *)res)[0] = cast(f64)c.real; - ((f64 *)res)[1] = cast(f64)c.imag; - break; - } - } - break; - case ExactValue_Quaternion: - { - GB_ASSERT_MSG(!is_type_array_like(bt), "%s", type_to_string(type)); - // @QuaternionLayout - Quaternion256 q = {}; - if (value.value_quaternion) { - q = *value.value_quaternion; - } - void *res = tb_global_add_region(m->mod, global, offset, size); - switch (size) { - case 8: - ((u16 *)res)[0] = f32_to_f16(cast(f32)q.imag); - ((u16 *)res)[1] = f32_to_f16(cast(f32)q.jmag); - ((u16 *)res)[2] = f32_to_f16(cast(f32)q.kmag); - ((u16 *)res)[3] = f32_to_f16(cast(f32)q.real); - break; - case 16: - ((f32 *)res)[0] = cast(f32)q.imag; - ((f32 *)res)[1] = cast(f32)q.jmag; - ((f32 *)res)[2] = cast(f32)q.kmag; - ((f32 *)res)[3] = cast(f32)q.real; - break; - case 32: - ((f64 *)res)[0] = cast(f64)q.imag; - ((f64 *)res)[1] = cast(f64)q.jmag; - ((f64 *)res)[2] = cast(f64)q.kmag; - ((f64 *)res)[3] = cast(f64)q.real; - break; - } - } - break; - default: - GB_PANIC("%s", type_to_string(type)); - break; - } - return true; -} - - -gb_internal TB_Global *cg_global_const_comp_literal(cgModule *m, Type *original_type, ExactValue const &value, TB_Global *global, i64 base_offset) { - GB_ASSERT(value.kind == ExactValue_Compound); - Ast *value_compound = value.value_compound; - ast_node(cl, CompoundLit, value_compound); - - TEMPORARY_ALLOCATOR_GUARD(); - - if (global == nullptr) { - char name[32] = {}; - gb_snprintf(name, 31, "complit$%u", 1+m->const_nil_guid.fetch_add(1)); - global = tb_global_create(m->mod, -1, name, cg_debug_type(m, original_type), TB_LINKAGE_PRIVATE); - i64 size = type_size_of(original_type); - i64 align = type_align_of(original_type); - - // READ ONLY? - TB_ModuleSectionHandle section = 0; - if (is_type_string(original_type) || is_type_cstring(original_type)) { - section = tb_module_get_rdata(m->mod); - } else { - section = tb_module_get_data(m->mod); - } - - if (cl->elems.count == 0) { - tb_global_set_storage(m->mod, section, global, size, align, 0); - return global; - } - - - isize global_region_count = cg_global_const_calculate_region_count(value, original_type); - tb_global_set_storage(m->mod, section, global, size, align, global_region_count); - } - - if (cl->elems.count == 0) { - return global; - } - - - Type *bt = base_type(original_type); - i64 bt_size = type_size_of(bt); - - switch (bt->kind) { - case Type_Struct: - if (cl->elems[0]->kind == Ast_FieldValue) { - isize elem_count = cl->elems.count; - for (isize i = 0; i < elem_count; i++) { - ast_node(fv, FieldValue, cl->elems[i]); - String name = fv->field->Ident.token.string; - - TypeAndValue tav = fv->value->tav; - GB_ASSERT(tav.mode != Addressing_Invalid); - ExactValue value = tav.value; - - Selection sel = lookup_field(bt, name, false); - GB_ASSERT(!sel.indirect); - - if (!cg_is_nested_possibly_constant(bt, sel, fv->value)) { - continue; - } - - i64 offset = type_offset_of_from_selection(bt, sel); - cg_global_const_add_region(m, value, sel.entity->type, global, base_offset+offset); - } - } else { - for_array(i, cl->elems) { - i64 field_index = i; - Ast *elem = cl->elems[i]; - TypeAndValue tav = elem->tav; - Entity *f = bt->Struct.fields[field_index]; - if (!cg_elem_type_can_be_constant(f->type)) { - continue; - } - - i64 offset = bt->Struct.offsets[field_index]; - - ExactValue value = {}; - if (tav.mode != Addressing_Invalid) { - value = tav.value; - } - cg_global_const_add_region(m, value, f->type, global, base_offset+offset); - } - } - return global; - - case Type_Array: - case Type_EnumeratedArray: - case Type_SimdVector: - if (cl->elems[0]->kind == Ast_FieldValue) { - Type *et = base_array_type(bt); - i64 elem_size = type_size_of(et); - for (Ast *elem : cl->elems) { - ast_node(fv, FieldValue, elem); - - ExactValue const &value = fv->value->tav.value; - - if (is_ast_range(fv->field)) { - ast_node(ie, BinaryExpr, fv->field); - TypeAndValue lo_tav = ie->left->tav; - TypeAndValue hi_tav = ie->right->tav; - GB_ASSERT(lo_tav.mode == Addressing_Constant); - GB_ASSERT(hi_tav.mode == Addressing_Constant); - - TokenKind op = ie->op.kind; - i64 lo = exact_value_to_i64(lo_tav.value); - i64 hi = exact_value_to_i64(hi_tav.value); - if (op != Token_RangeHalf) { - hi += 1; - } - - for (i64 i = lo; i < hi; i++) { - i64 offset = i * elem_size; - cg_global_const_add_region(m, value, et, global, base_offset+offset); - } - } else { - TypeAndValue index_tav = fv->field->tav; - GB_ASSERT(index_tav.mode == Addressing_Constant); - i64 i = exact_value_to_i64(index_tav.value); - i64 offset = i * elem_size; - cg_global_const_add_region(m, value, et, global, base_offset+offset); - } - } - } else { - Type *et = base_array_type(bt); - i64 elem_size = type_size_of(et); - i64 offset = 0; - for (Ast *elem : cl->elems) { - ExactValue const &value = elem->tav.value; - cg_global_const_add_region(m, value, et, global, base_offset+offset); - offset += elem_size; - } - } - - return global; - - case Type_BitSet: - if (bt_size > 0) { - BigInt bits = {}; - BigInt one = {}; - big_int_from_u64(&one, 1); - - for_array(i, cl->elems) { - Ast *e = cl->elems[i]; - GB_ASSERT(e->kind != Ast_FieldValue); - - TypeAndValue tav = e->tav; - if (tav.mode != Addressing_Constant) { - continue; - } - GB_ASSERT(tav.value.kind == ExactValue_Integer); - i64 v = big_int_to_i64(&tav.value.value_integer); - i64 lower = bt->BitSet.lower; - u64 index = cast(u64)(v-lower); - BigInt bit = {}; - big_int_from_u64(&bit, index); - big_int_shl(&bit, &one, &bit); - big_int_or(&bits, &bits, &bit); - } - - void *dst = tb_global_add_region(m->mod, global, base_offset, bt_size); - cg_write_big_int_at_ptr(dst, &bits, original_type); - } - return global; - - case Type_Matrix: - GB_PANIC("TODO(bill): constant compound literal for %s", type_to_string(original_type)); - break; - - case Type_Slice: - { - i64 count = gb_max(cl->elems.count, cl->max_count); - Type *elem = bt->Slice.elem; - Type *t = alloc_type_array(elem, count); - TB_Global *backing_array = cg_global_const_comp_literal(m, t, value, nullptr, 0); - - tb_global_add_symbol_reloc(m->mod, global, base_offset+0, cast(TB_Symbol *)backing_array); - - void *len_ptr = tb_global_add_region(m->mod, global, base_offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); - } - return global; - } - - GB_PANIC("TODO(bill): constant compound literal for %s", type_to_string(original_type)); - return nullptr; -} - - -gb_internal cgValue cg_const_value(cgProcedure *p, Type *type, ExactValue const &value) { - GB_ASSERT(p != nullptr); - TB_Node *node = nullptr; - - if (is_type_untyped(type)) { - // TODO(bill): THIS IS A COMPLETE HACK, WHY DOES THIS NOT A TYPE? - GB_ASSERT(type->kind == Type_Basic); - switch (type->Basic.kind) { - case Basic_UntypedBool: - type = t_bool; - break; - case Basic_UntypedInteger: - type = t_i64; - break; - case Basic_UntypedFloat: - type = t_f64; - break; - case Basic_UntypedComplex: - type = t_complex128; - break; - case Basic_UntypedQuaternion: - type = t_quaternion256; - break; - case Basic_UntypedString: - type = t_string; - break; - case Basic_UntypedRune: - type = t_rune; - break; - case Basic_UntypedNil: - case Basic_UntypedUninit: - return cg_value(cast(TB_Node *)nullptr, type); - } - } - TB_DataType dt = cg_data_type(type); - - switch (value.kind) { - case ExactValue_Invalid: - return cg_const_nil(p, type); - - case ExactValue_Typeid: - return cg_typeid(p, value.value_typeid); - - case ExactValue_Procedure: - { - Ast *expr = unparen_expr(value.value_procedure); - if (expr->kind == Ast_ProcLit) { - cgProcedure *anon = cg_procedure_generate_anonymous(p->module, expr, p); - TB_Node *ptr = tb_inst_get_symbol_address(p->func, anon->symbol); - GB_ASSERT(are_types_identical(type, anon->type)); - return cg_value(ptr, type); - } - - Entity *e = entity_of_node(expr); - if (e != nullptr) { - TB_Symbol *found = cg_find_symbol_from_entity(p->module, e); - GB_ASSERT_MSG(found != nullptr, "could not find '%.*s'", LIT(e->token.string)); - TB_Node *ptr = tb_inst_get_symbol_address(p->func, found); - GB_ASSERT(type != nullptr); - GB_ASSERT(are_types_identical(type, e->type)); - return cg_value(ptr, type); - } - - GB_PANIC("TODO(bill): cg_const_value ExactValue_Procedure %s", expr_to_string(expr)); - } - break; - } - - switch (value.kind) { - case ExactValue_Bool: - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - return cg_value(tb_inst_uint(p->func, dt, value.value_bool), type); - - case ExactValue_Integer: - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - // GB_ASSERT(dt.raw != TB_TYPE_I128.raw); - if (is_type_unsigned(type)) { - u64 i = 0; - if (value.kind == ExactValue_Integer && value.value_integer.sign) { - i = exact_value_to_i64(value); - } else { - i = exact_value_to_u64(value); - } - return cg_value(tb_inst_uint(p->func, dt, i), type); - } else { - i64 i = exact_value_to_i64(value); - return cg_value(tb_inst_sint(p->func, dt, i), type); - } - break; - - case ExactValue_Float: - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - GB_ASSERT(dt.raw != TB_TYPE_F16.raw); - GB_ASSERT(!is_type_different_to_arch_endianness(type)); - { - f64 f = exact_value_to_f64(value); - if (type_size_of(type) == 8) { - return cg_value(tb_inst_float64(p->func, f), type); - } else { - return cg_value(tb_inst_float32(p->func, cast(f32)f), type); - } - } - break; - - case ExactValue_String: - { - GB_ASSERT(is_type_string(type)); - cgModule *m = p->module; - - String str = value.value_string; - - char name[32] = {}; - gb_snprintf(name, 31, "csb$%u", 1+m->const_nil_guid.fetch_add(1)); - TB_Global *cstr_global = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - - i64 size = str.len+1; - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), cstr_global, size, 1, 1); - u8 *data = cast(u8 *)tb_global_add_region(m->mod, cstr_global, 0, size); - gb_memcopy(data, str.text, str.len); - data[str.len] = 0; - - if (is_type_cstring(type)) { - cgValue s = cg_value(cstr_global, type); - return cg_flatten_value(p, s); - } - - gb_snprintf(name, 31, "str$%u", 1+m->const_nil_guid.fetch_add(1)); - TB_Global *str_global = tb_global_create(m->mod, -1, name, cg_debug_type(m, type), TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), str_global, type_size_of(type), type_align_of(type), 2); - - tb_global_add_symbol_reloc(m->mod, str_global, 0, cast(TB_Symbol *)cstr_global); - void *len_ptr = tb_global_add_region(m->mod, str_global, build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, str.len, t_int); - - TB_Node *s = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)str_global); - return cg_lvalue_addr(s, type); - - } - - case ExactValue_Pointer: - return cg_value(tb_inst_uint(p->func, dt, exact_value_to_u64(value)), type); - - case ExactValue_Compound: - { - TB_Symbol *symbol = cast(TB_Symbol *)cg_global_const_comp_literal(p->module, type, value, nullptr, 0); - TB_Node *node = tb_inst_get_symbol_address(p->func, symbol); - return cg_lvalue_addr(node, type); - } - break; - } - - - GB_ASSERT(node != nullptr); - return cg_value(node, type); -} - -gb_internal cgValue cg_const_int(cgProcedure *p, Type *type, i64 i) { - return cg_const_value(p, type, exact_value_i64(i)); -} -gb_internal cgValue cg_const_bool(cgProcedure *p, Type *type, bool v) { - return cg_value(tb_inst_bool(p->func, v), type); -} - -gb_internal cgValue cg_const_string(cgProcedure *p, Type *type, String const &str) { - return cg_const_value(p, type, exact_value_string(str)); -} - -gb_internal cgValue cg_const_union_tag(cgProcedure *p, Type *u, Type *v) { - return cg_const_value(p, union_tag_type(u), exact_value_i64(union_variant_index(u, v))); -} - diff --git a/src/tilde_debug.cpp b/src/tilde_debug.cpp deleted file mode 100644 index a4b82bf72..000000000 --- a/src/tilde_debug.cpp +++ /dev/null @@ -1,482 +0,0 @@ -gb_internal TB_DebugType *cg_debug_type_internal(cgModule *m, Type *type); -gb_internal TB_DebugType *cg_debug_type(cgModule *m, Type *type) { - type = reduce_tuple_to_single_type(type); - - mutex_lock(&m->debug_type_mutex); - defer (mutex_unlock(&m->debug_type_mutex)); - TB_DebugType **found = map_get(&m->debug_type_map, type); - if (found) { - return *found; - } - - TB_DebugType *res = cg_debug_type_internal(m, type); - map_set(&m->debug_type_map, type, res); - return res; -} - -gb_internal TB_DebugType *cg_debug_type_for_proc(cgModule *m, Type *type) { - GB_ASSERT(is_type_proc(type)); - TB_DebugType **func_found = nullptr; - TB_DebugType *func_ptr = cg_debug_type(m, type); - GB_ASSERT(func_ptr != nullptr); - - mutex_lock(&m->debug_type_mutex); - func_found = map_get(&m->proc_debug_type_map, type); - mutex_unlock(&m->debug_type_mutex); - GB_ASSERT(func_found != nullptr); - return *func_found; -} - - -gb_internal TB_DebugType *cg_debug_type_internal_record(cgModule *m, Type *type, String const &record_name) { - Type *bt = base_type(type); - switch (bt->kind) { - case Type_Struct: - { - type_set_offsets(bt); - - TB_DebugType *record = nullptr; - if (bt->Struct.is_raw_union) { - record = tb_debug_create_union(m->mod, record_name.len, cast(char const *)record_name.text); - } else { - record = tb_debug_create_struct(m->mod, record_name.len, cast(char const *)record_name.text); - } - if (record_name.len != 0) { - map_set(&m->debug_type_map, type, record); - } - - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, bt->Struct.fields.count); - for_array(i, bt->Struct.fields) { - Entity *e = bt->Struct.fields[i]; - Type *type = e->type; - if (is_type_proc(type)) { - type = t_rawptr; - } - TB_DebugType *field_type = cg_debug_type(m, type); - String name = e->token.string; - TB_CharUnits offset = cast(TB_CharUnits)bt->Struct.offsets[i]; - if (name.len == 0) { - name = str_lit("_"); - } - - fields[i] = tb_debug_create_field(m->mod, field_type, name.len, cast(char const *)name.text, offset); - } - tb_debug_record_end( - record, - cast(TB_CharUnits)type_size_of(type), - cast(TB_CharUnits)type_align_of(type) - ); - return record; - } - break; - - case Type_Tuple: - { - GB_ASSERT(record_name.len == 0); - type_set_offsets(bt); - - TB_DebugType *record = tb_debug_create_struct(m->mod, 0, ""); - isize record_count = 0; - for (Entity *e : bt->Tuple.variables) { - if (e->kind == Entity_Variable) { - record_count += 1; - } - } - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, record_count); - for_array(i, bt->Tuple.variables) { - Entity *e = bt->Tuple.variables[i]; - if (e->kind != Entity_Variable) { - continue; - } - Type *type = e->type; - if (is_type_proc(type)) { - type = t_rawptr; - } - TB_DebugType *field_type = cg_debug_type(m, type); - String name = e->token.string; - TB_CharUnits offset = cast(TB_CharUnits)bt->Tuple.offsets[i]; - if (name.len == 0) { - name = str_lit("_"); - } - - fields[i] = tb_debug_create_field(m->mod, field_type, name.len, cast(char const *)name.text, offset); - } - tb_debug_record_end( - record, - cast(TB_CharUnits)type_size_of(type), - cast(TB_CharUnits)type_align_of(type) - ); - return record; - } - break; - case Type_Union: - { - TB_DebugType *record = tb_debug_create_struct(m->mod, record_name.len, cast(char const *)record_name.text); - if (record_name.len != 0) { - map_set(&m->debug_type_map, type, record); - } - - i64 variant_count = bt->Union.variants.count; - if (is_type_union_maybe_pointer(bt)) { - // NO TAG - GB_ASSERT(variant_count == 1); - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, variant_count); - TB_DebugType *variant_type = cg_debug_type(m, bt->Union.variants[0]); - fields[0] = tb_debug_create_field(m->mod, variant_type, -1, "v0", 0); - tb_debug_record_end( - record, - cast(TB_CharUnits)type_size_of(type), - cast(TB_CharUnits)type_align_of(type) - ); - } else { - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, variant_count+1); - for_array(i, bt->Union.variants) { - Type *v = bt->Union.variants[i]; - TB_DebugType *variant_type = cg_debug_type(m, v); - char name[32] = {}; - u32 v_index = cast(u32)i; - if (bt->Union.kind != UnionType_no_nil) { - v_index += 1; - } - gb_snprintf(name, 31, "v%u", v_index); - fields[i] = tb_debug_create_field(m->mod, variant_type, -1, name, 0); - } - - TB_DebugType *tag_type = cg_debug_type(m, union_tag_type(bt)); - fields[variant_count] = tb_debug_create_field(m->mod, tag_type, -1, "tag", cast(TB_CharUnits)bt->Union.variant_block_size); - - } - tb_debug_record_end( - record, - cast(TB_CharUnits)type_size_of(type), - cast(TB_CharUnits)type_align_of(type) - ); - return record; - } - break; - } - return nullptr; -} - - -gb_internal TB_DebugType *cg_debug_type_internal(cgModule *m, Type *type) { - if (type == nullptr) { - return tb_debug_get_void(m->mod); - } - Type *original_type = type; - if (type->kind == Type_Named) { - String name = type->Named.name; - TB_DebugType *res = cg_debug_type_internal_record(m, type, name); - if (res) { - return res; - } - type = base_type(type->Named.base); - } - - TB_CharUnits int_size = cast(TB_CharUnits)build_context.int_size; - TB_CharUnits ptr_size = cast(TB_CharUnits)build_context.ptr_size; - TB_CharUnits size = cast(TB_CharUnits)type_size_of(type); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(type); - int bits = cast(int)(8*size); - bool is_signed = is_type_integer(core_type(type)) && !is_type_unsigned(core_type(type)); - - switch (type->kind) { - case Type_Basic: - switch (type->Basic.kind) { - case Basic_bool: return tb_debug_get_bool(m->mod); - case Basic_b8: return tb_debug_get_bool(m->mod); - case Basic_b16: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_b32: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_b64: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i8: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u8: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i16: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u16: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i32: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u32: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i64: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u64: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i128: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u128: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_rune: return tb_debug_get_integer(m->mod, is_signed, bits); - - case Basic_f16: return tb_debug_get_integer(m->mod, false, bits); - case Basic_f32: return tb_debug_get_float(m->mod, TB_FLT_32); - case Basic_f64: return tb_debug_get_float(m->mod, TB_FLT_64); - - case Basic_complex32: - case Basic_complex64: - case Basic_complex128: - { - String name = basic_types[type->Basic.kind].Basic.name; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - Type *et = base_complex_elem_type(type); - TB_CharUnits elem_size = cast(TB_CharUnits)type_size_of(et); - TB_DebugType *elem = cg_debug_type(m, et); - - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 2); - fields[0] = tb_debug_create_field(m->mod, elem, -1, "real", 0*elem_size); - fields[1] = tb_debug_create_field(m->mod, elem, -1, "imag", 1*elem_size); - - tb_debug_record_end(record, size, align); - return record; - } - case Basic_quaternion64: - case Basic_quaternion128: - case Basic_quaternion256: - { - String name = basic_types[type->Basic.kind].Basic.name; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - Type *et = base_complex_elem_type(type); - TB_CharUnits elem_size = cast(TB_CharUnits)type_size_of(et); - TB_DebugType *elem = cg_debug_type(m, et); - - // @QuaternionLayout - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 4); - fields[0] = tb_debug_create_field(m->mod, elem, -1, "imag", 0*elem_size); - fields[1] = tb_debug_create_field(m->mod, elem, -1, "jmag", 1*elem_size); - fields[2] = tb_debug_create_field(m->mod, elem, -1, "kmag", 2*elem_size); - fields[3] = tb_debug_create_field(m->mod, elem, -1, "real", 3*elem_size); - - tb_debug_record_end(record, size, align); - return record; - } - - case Basic_int: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_uint: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_uintptr: return tb_debug_get_integer(m->mod, is_signed, bits); - - case Basic_rawptr: - return tb_debug_create_ptr(m->mod, tb_debug_get_void(m->mod)); - case Basic_string: - { - String name = basic_types[type->Basic.kind].Basic.name; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - // @QuaternionLayout - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 2); - fields[0] = tb_debug_create_field(m->mod, cg_debug_type(m, t_u8_ptr), -1, "data", 0*int_size); - fields[1] = tb_debug_create_field(m->mod, cg_debug_type(m, t_int), -1, "len", 1*int_size); - - tb_debug_record_end(record, size, align); - return record; - } - case Basic_cstring: - return tb_debug_create_ptr(m->mod, tb_debug_get_integer(m->mod, false, 8)); - - case Basic_any: - { - String name = basic_types[type->Basic.kind].Basic.name; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - // @QuaternionLayout - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 2); - fields[0] = tb_debug_create_field(m->mod, cg_debug_type(m, t_rawptr), -1, "data", 0*ptr_size); - fields[1] = tb_debug_create_field(m->mod, cg_debug_type(m, t_typeid), -1, "id", 1*ptr_size); - - tb_debug_record_end(record, size, align); - return record; - } - case Basic_typeid: return tb_debug_get_integer(m->mod, false, bits); - - case Basic_i16le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u16le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i32le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u32le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i64le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u64le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i128le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u128le: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i16be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u16be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i32be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u32be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i64be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u64be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_i128be: return tb_debug_get_integer(m->mod, is_signed, bits); - case Basic_u128be: return tb_debug_get_integer(m->mod, is_signed, bits); - - case Basic_f16le: return tb_debug_get_integer(m->mod, false, bits); - case Basic_f32le: return tb_debug_get_float(m->mod, TB_FLT_32); - case Basic_f64le: return tb_debug_get_float(m->mod, TB_FLT_64); - case Basic_f16be: return tb_debug_get_integer(m->mod, false, bits); - case Basic_f32be: return tb_debug_get_float(m->mod, TB_FLT_32); - case Basic_f64be: return tb_debug_get_float(m->mod, TB_FLT_64); - } - break; - case Type_Generic: - GB_PANIC("SHOULD NEVER HIT"); - break; - case Type_Pointer: - return tb_debug_create_ptr(m->mod, cg_debug_type(m, type->Pointer.elem)); - case Type_MultiPointer: - return tb_debug_create_ptr(m->mod, cg_debug_type(m, type->MultiPointer.elem)); - case Type_Array: - return tb_debug_create_array(m->mod, cg_debug_type(m, type->Array.elem), type->Array.count); - case Type_EnumeratedArray: - return tb_debug_create_array(m->mod, cg_debug_type(m, type->EnumeratedArray.elem), type->EnumeratedArray.count); - case Type_Slice: - { - String name = {}; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 2); - fields[0] = tb_debug_create_field(m->mod, cg_debug_type(m, alloc_type_pointer(type->Slice.elem)), -1, "data", 0*int_size); - fields[1] = tb_debug_create_field(m->mod, cg_debug_type(m, t_int), -1, "len", 1*int_size); - - tb_debug_record_end(record, size, align); - return record; - } - case Type_DynamicArray: - { - String name = {}; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 4); - fields[0] = tb_debug_create_field(m->mod, cg_debug_type(m, alloc_type_pointer(type->Slice.elem)), -1, "data", 0*int_size); - fields[1] = tb_debug_create_field(m->mod, cg_debug_type(m, t_int), -1, "len", 1*int_size); - fields[2] = tb_debug_create_field(m->mod, cg_debug_type(m, t_int), -1, "cap", 2*int_size); - fields[3] = tb_debug_create_field(m->mod, cg_debug_type(m, t_allocator), -1, "allocator", 3*int_size); - - tb_debug_record_end(record, size, align); - return record; - } - case Type_Map: - return cg_debug_type(m, t_raw_map); - - case Type_Struct: - case Type_Tuple: - case Type_Union: - return cg_debug_type_internal_record(m, type, {}); - - case Type_Enum: - return tb_debug_get_integer(m->mod, is_signed, bits); - - case Type_Proc: - { - TypeProc *pt = &type->Proc; - isize param_count = 0; - isize return_count = 0; - - bool is_odin_cc = is_calling_convention_odin(pt->calling_convention); - - if (pt->params) for (Entity *e : pt->params->Tuple.variables) { - if (e->kind == Entity_Variable) { - param_count += 1; - } - } - - if (pt->result_count > 0) { - if (is_odin_cc) { - // Split returns - param_count += pt->result_count-1; - return_count = 1; - } else { - return_count = 1; - } - } - - if (pt->calling_convention == ProcCC_Odin) { - // `context` ptr - param_count += 1; - } - - TB_CallingConv tb_cc = TB_CDECL; - if (pt->calling_convention == ProcCC_StdCall) { - tb_cc = TB_STDCALL; - } - TB_DebugType *func = tb_debug_create_func(m->mod, tb_cc, param_count, return_count, pt->c_vararg); - - map_set(&m->proc_debug_type_map, original_type, func); - map_set(&m->proc_debug_type_map, type, func); - - TB_DebugType *func_ptr = tb_debug_create_ptr(m->mod, func); - map_set(&m->debug_type_map, original_type, func_ptr); - map_set(&m->debug_type_map, type, func_ptr); - - TB_DebugType **params = tb_debug_func_params(func); - TB_DebugType **returns = tb_debug_func_returns(func); - - isize param_index = 0; - isize return_index = 0; - if (pt->params) for (Entity *e : pt->params->Tuple.variables) { - if (e->kind == Entity_Variable) { - Type *type = e->type; - if (is_type_proc(type)) { - type = t_rawptr; - } - String name = e->token.string; - if (name.len == 0) { - name = str_lit("_"); - } - params[param_index++] = tb_debug_create_field(m->mod, cg_debug_type(m, type), name.len, cast(char const *)name.text, 0); - } - } - - if (pt->result_count) { - GB_ASSERT(pt->results); - if (is_odin_cc) { - // Split Returns - for (isize i = 0; i < pt->results->Tuple.variables.count-1; i++) { - Entity *e = pt->results->Tuple.variables[i]; - GB_ASSERT(e->kind == Entity_Variable); - Type *type = e->type; - if (is_type_proc(e->type)) { - type = t_rawptr; - } - type = alloc_type_pointer(type); - - String name = e->token.string; - if (name.len == 0) { - name = str_lit("_"); - } - params[param_index++] = tb_debug_create_field(m->mod, cg_debug_type(m, type), name.len, cast(char const *)name.text, 0); - } - - Type *last_type = pt->results->Tuple.variables[pt->results->Tuple.variables.count-1]->type; - if (is_type_proc(last_type)) { - last_type = t_rawptr; - } - returns[return_index++] = cg_debug_type(m, last_type); - } else { - returns[return_index++] = cg_debug_type(m, pt->results); - } - } - - if (pt->calling_convention == ProcCC_Odin) { - Type *type = t_context_ptr; - String name = str_lit("__.context_ptr"); - params[param_index++] = tb_debug_create_field(m->mod, cg_debug_type(m, type), name.len, cast(char const *)name.text, 0); - } - - GB_ASSERT_MSG(param_index == param_count, "%td vs %td for %s", param_index, param_count, type_to_string(type)); - GB_ASSERT_MSG(return_index == return_count, "%td vs %td for %s", return_index, return_count, type_to_string(type)); - - return func_ptr; - } - break; - case Type_BitSet: - return cg_debug_type(m, bit_set_to_int(type)); - case Type_SimdVector: - return tb_debug_create_array(m->mod, cg_debug_type(m, type->SimdVector.elem), type->SimdVector.count); - case Type_RelativePointer: - return cg_debug_type(m, type->RelativePointer.base_integer); - case Type_RelativeMultiPointer: - return cg_debug_type(m, type->RelativeMultiPointer.base_integer); - case Type_Matrix: - { - i64 count = matrix_type_total_internal_elems(type); - return tb_debug_create_array(m->mod, cg_debug_type(m, type->Matrix.elem), count); - } - case Type_SoaPointer: - { - String name = {}; - TB_DebugType *record = tb_debug_create_struct(m->mod, name.len, cast(char const *)name.text); - TB_DebugType **fields = tb_debug_record_begin(m->mod, record, 2); - fields[0] = tb_debug_create_field(m->mod, cg_debug_type(m, alloc_type_pointer(type->SoaPointer.elem)), -1, "ptr", 0*int_size); - fields[1] = tb_debug_create_field(m->mod, cg_debug_type(m, t_int), -1, "offset", 1*int_size); - - tb_debug_record_end(record, size, align); - return record; - } - } - - // TODO(bill): cg_debug_type - return tb_debug_get_void(m->mod); -} diff --git a/src/tilde_expr.cpp b/src/tilde_expr.cpp deleted file mode 100644 index 236d0cf7d..000000000 --- a/src/tilde_expr.cpp +++ /dev/null @@ -1,3961 +0,0 @@ -gb_internal cgValue cg_flatten_value(cgProcedure *p, cgValue value) { - GB_ASSERT(value.kind != cgValue_Multi); - if (value.kind == cgValue_Symbol) { - GB_ASSERT(is_type_internally_pointer_like(value.type)); - return cg_value(tb_inst_get_symbol_address(p->func, value.symbol), value.type); - } else if (value.kind == cgValue_Addr) { - // TODO(bill): Is this a good idea? - // this converts an lvalue to an rvalue if trivially possible - TB_DataType dt = cg_data_type(value.type); - if (!TB_IS_VOID_TYPE(dt)) { - TB_CharUnits align = cast(TB_CharUnits)type_align_of(value.type); - return cg_value(tb_inst_load(p->func, dt, value.node, align, false), value.type); - } - } - return value; -} - -gb_internal cgValue cg_emit_select(cgProcedure *p, cgValue const &cond, cgValue const &x, cgValue const &y) { - GB_ASSERT(x.kind == y.kind); - GB_ASSERT(cond.kind == cgValue_Value); - cgValue res = x; - res.node = tb_inst_select(p->func, cond.node, x.node, y.node); - return res; -} - - -gb_internal bool cg_is_expr_untyped_const(Ast *expr) { - auto const &tv = type_and_value_of_expr(expr); - if (is_type_untyped(tv.type)) { - return tv.value.kind != ExactValue_Invalid; - } - return false; -} -gb_internal cgValue cg_expr_untyped_const_to_typed(cgProcedure *p, Ast *expr, Type *t) { - GB_ASSERT(is_type_typed(t)); - auto const &tv = type_and_value_of_expr(expr); - return cg_const_value(p, t, tv.value); -} - -gb_internal cgContextData *cg_push_context_onto_stack(cgProcedure *p, cgAddr ctx) { - ctx.kind = cgAddr_Context; - cgContextData *cd = array_add_and_get(&p->context_stack); - cd->ctx = ctx; - cd->scope_index = p->scope_index; - return cd; -} - -gb_internal cgAddr cg_find_or_generate_context_ptr(cgProcedure *p) { - if (p->context_stack.count > 0) { - return p->context_stack[p->context_stack.count-1].ctx; - } - - Type *pt = base_type(p->type); - GB_ASSERT(pt->kind == Type_Proc); - GB_ASSERT(pt->Proc.calling_convention != ProcCC_Odin); - - cgAddr c = cg_add_local(p, t_context, nullptr, true); - tb_function_attrib_variable(p->func, c.addr.node, nullptr, -1, "context", cg_debug_type(p->module, t_context)); - c.kind = cgAddr_Context; - // lb_emit_init_context(p, c); - cg_push_context_onto_stack(p, c); - // lb_add_debug_context_variable(p, c); - - return c; -} - -gb_internal cgValue cg_find_value_from_entity(cgModule *m, Entity *e) { - e = strip_entity_wrapping(e); - GB_ASSERT(e != nullptr); - - GB_ASSERT(e->token.string != "_"); - - if (e->kind == Entity_Procedure) { - return cg_find_procedure_value_from_entity(m, e); - } - - cgValue *found = nullptr; - rw_mutex_shared_lock(&m->values_mutex); - found = map_get(&m->values, e); - rw_mutex_shared_unlock(&m->values_mutex); - if (found) { - return *found; - } - - GB_PANIC("\n\tError in: %s, missing value '%.*s'\n", token_pos_to_string(e->token.pos), LIT(e->token.string)); - return {}; -} - -gb_internal cgValue cg_get_using_variable(cgProcedure *p, Entity *e) { - GB_ASSERT(e->kind == Entity_Variable && e->flags & EntityFlag_Using); - String name = e->token.string; - Entity *parent = e->using_parent; - Selection sel = lookup_field(parent->type, name, false); - GB_ASSERT(sel.entity != nullptr); - cgValue *pv = map_get(&p->module->values, parent); - - cgValue v = {}; - - if (pv == nullptr && parent->flags & EntityFlag_SoaPtrField) { - // NOTE(bill): using SOA value (probably from for-in statement) - GB_PANIC("TODO(bill): cg_get_soa_variable_addr"); - // cgAddr parent_addr = cg_get_soa_variable_addr(p, parent); - // v = cg_addr_get_ptr(p, parent_addr); - } else if (pv != nullptr) { - v = *pv; - } else { - GB_ASSERT_MSG(e->using_expr != nullptr, "%.*s %.*s", LIT(e->token.string), LIT(name)); - v = cg_build_addr_ptr(p, e->using_expr); - } - GB_ASSERT(v.node != nullptr); - GB_ASSERT_MSG(parent->type == type_deref(v.type), "%s %s", type_to_string(parent->type), type_to_string(v.type)); - cgValue ptr = cg_emit_deep_field_gep(p, v, sel); - // if (parent->scope) { - // if ((parent->scope->flags & (ScopeFlag_File|ScopeFlag_Pkg)) == 0) { - // cg_add_debug_local_variable(p, ptr.value, e->type, e->token); - // } - // } else { - // cg_add_debug_local_variable(p, ptr.value, e->type, e->token); - // } - return ptr; -} -gb_internal cgAddr cg_build_addr_from_entity(cgProcedure *p, Entity *e, Ast *expr) { - GB_ASSERT(e != nullptr); - if (e->kind == Entity_Constant) { - Type *t = default_type(type_of_expr(expr)); - cgValue v = cg_const_value(p, t, e->Constant.value); - GB_PANIC("TODO(bill): cg_add_global_generated"); - // return cg_add_global_generated(p->module, t, v); - return {}; - } - - cgAddr *local_found = map_get(&p->variable_map, e); - if (local_found) { - return *local_found; - } - - cgValue v = {}; - - cgModule *m = p->module; - - rw_mutex_lock(&m->values_mutex); - cgValue *found = map_get(&m->values, e); - rw_mutex_unlock(&m->values_mutex); - if (found) { - v = *found; - } else if (e->kind == Entity_Variable && e->flags & EntityFlag_Using) { - // NOTE(bill): Calculate the using variable every time - v = cg_get_using_variable(p, e); - } else if (e->flags & EntityFlag_SoaPtrField) { - return map_must_get(&p->soa_values_map, e); - } - - - if (v.node == nullptr) { - cgValue v = cg_find_value_from_entity(m, e); - v = cg_flatten_value(p, v); - return cg_addr(v); - } - - return cg_addr(v); -} - -gb_internal cgValue cg_emit_union_tag_ptr(cgProcedure *p, cgValue const &parent_ptr) { - Type *t = parent_ptr.type; - Type *ut = base_type(type_deref(t)); - GB_ASSERT_MSG(is_type_pointer(t), "%s", type_to_string(t)); - GB_ASSERT_MSG(ut->kind == Type_Union, "%s", type_to_string(t)); - - GB_ASSERT(!is_type_union_maybe_pointer_original_alignment(ut)); - GB_ASSERT(!is_type_union_maybe_pointer(ut)); - GB_ASSERT(type_size_of(ut) > 0); - - Type *tag_type = union_tag_type(ut); - i64 tag_offset = ut->Union.variant_block_size; - - GB_ASSERT(parent_ptr.kind == cgValue_Value); - TB_Node *ptr = parent_ptr.node; - TB_Node *tag_ptr = tb_inst_member_access(p->func, ptr, tag_offset); - return cg_value(tag_ptr, alloc_type_pointer(tag_type)); -} - - - -gb_internal cgValue cg_correct_endianness(cgProcedure *p, cgValue value) { - Type *src = core_type(value.type); - GB_ASSERT(is_type_integer(src) || is_type_float(src)); - if (is_type_different_to_arch_endianness(src)) { - GB_PANIC("TODO(bill): cg_correct_endianness"); - // Type *platform_src_type = integer_endian_type_to_platform_type(src); - // value = cg_emit_byte_swap(p, value, platform_src_type); - } - return value; -} - -gb_internal cgValue cg_emit_transmute(cgProcedure *p, cgValue value, Type *type) { - GB_ASSERT(type_size_of(value.type) == type_size_of(type)); - - value = cg_flatten_value(p, value); - - if (are_types_identical(value.type, type)) { - return value; - } - if (are_types_identical(core_type(value.type), core_type(type))) { - value.type = type; - return value; - } - - i64 src_align = type_align_of(value.type); - i64 dst_align = type_align_of(type); - - if (dst_align > src_align) { - cgAddr local = cg_add_local(p, type, nullptr, false); - cgValue dst = local.addr; - dst.type = alloc_type_pointer(value.type); - cg_emit_store(p, dst, value); - return cg_addr_load(p, local); - } - - TB_DataType dt = cg_data_type(type); - switch (value.kind) { - case cgValue_Value: - GB_ASSERT_MSG(!TB_IS_VOID_TYPE(dt), "%d %s -> %s", dt.type, type_to_string(value.type), type_to_string(type)); - value.type = type; - if (value.node->dt.raw != dt.raw) { - switch (value.node->dt.type) { - case TB_INT: - switch (value.node->dt.type) { - case TB_INT: - break; - case TB_FLOAT: - value.node = tb_inst_bitcast(p->func, value.node, dt); - break; - case TB_PTR: - value.node = tb_inst_int2ptr(p->func, value.node); - break; - } - break; - case TB_FLOAT: - switch (value.node->dt.type) { - case TB_INT: - value.node = tb_inst_bitcast(p->func, value.node, dt); - break; - case TB_FLOAT: - break; - case TB_PTR: - value.node = tb_inst_bitcast(p->func, value.node, TB_TYPE_INTPTR); - value.node = tb_inst_int2ptr(p->func, value.node); - break; - } - break; - case TB_PTR: - switch (value.node->dt.type) { - case TB_INT: - value.node = tb_inst_ptr2int(p->func, value.node, dt); - break; - case TB_FLOAT: - value.node = tb_inst_ptr2int(p->func, value.node, TB_TYPE_INTPTR); - value.node = tb_inst_bitcast(p->func, value.node, dt); - break; - case TB_PTR: - break; - } - break; - } - } - return value; - case cgValue_Addr: - value.type = type; - return value; - case cgValue_Symbol: - GB_PANIC("should be handled above"); - break; - case cgValue_Multi: - GB_PANIC("cannot transmute multiple values at once"); - break; - } - return value; - -} -gb_internal cgValue cg_emit_byte_swap(cgProcedure *p, cgValue value, Type *end_type) { - GB_ASSERT(type_size_of(value.type) == type_size_of(end_type)); - - if (type_size_of(value.type) < 2) { - return value; - } - - if (is_type_float(value.type)) { - i64 sz = type_size_of(value.type); - Type *integer_type = nullptr; - switch (sz) { - case 2: integer_type = t_u16; break; - case 4: integer_type = t_u32; break; - case 8: integer_type = t_u64; break; - } - GB_ASSERT(integer_type != nullptr); - value = cg_emit_transmute(p, value, integer_type); - } - - GB_ASSERT(value.kind == cgValue_Value); - - // TODO(bill): bswap - // value.node = tb_inst_bswap(p->func, value.node); - return cg_emit_transmute(p, value, end_type); -} - -gb_internal cgValue cg_emit_comp_records(cgProcedure *p, TokenKind op_kind, cgValue left, cgValue right, Type *type) { - GB_ASSERT((is_type_struct(type) || is_type_union(type)) && is_type_comparable(type)); - cgValue left_ptr = cg_address_from_load_or_generate_local(p, left); - cgValue right_ptr = cg_address_from_load_or_generate_local(p, right); - cgValue res = {}; - if (type_size_of(type) == 0) { - switch (op_kind) { - case Token_CmpEq: - return cg_const_bool(p, t_bool, true); - case Token_NotEq: - return cg_const_bool(p, t_bool, false); - } - GB_PANIC("invalid operator"); - } - TEMPORARY_ALLOCATOR_GUARD(); - if (is_type_simple_compare(type)) { - // TODO(bill): Test to see if this is actually faster!!!! - auto args = slice_make(temporary_allocator(), 3); - args[0] = cg_emit_conv(p, left_ptr, t_rawptr); - args[1] = cg_emit_conv(p, right_ptr, t_rawptr); - args[2] = cg_const_int(p, t_int, type_size_of(type)); - res = cg_emit_runtime_call(p, "memory_equal", args); - } else { - cgProcedure *equal_proc = cg_equal_proc_for_type(p->module, type); - cgValue value = cg_value(tb_inst_get_symbol_address(p->func, equal_proc->symbol), equal_proc->type); - auto args = slice_make(temporary_allocator(), 2); - args[0] = cg_emit_conv(p, left_ptr, t_rawptr); - args[1] = cg_emit_conv(p, right_ptr, t_rawptr); - res = cg_emit_call(p, value, args); - } - if (op_kind == Token_NotEq) { - res = cg_emit_unary_arith(p, Token_Not, res, res.type); - } - return res; -} - -gb_internal cgValue cg_emit_comp(cgProcedure *p, TokenKind op_kind, cgValue left, cgValue right) { - GB_ASSERT(gb_is_between(op_kind, Token__ComparisonBegin+1, Token__ComparisonEnd-1)); - - Type *a = core_type(left.type); - Type *b = core_type(right.type); - - cgValue nil_check = {}; - if (is_type_array_like(left.type) || is_type_array_like(right.type)) { - // don't do `nil` check if it is array-like - } else if (is_type_untyped_nil(left.type)) { - nil_check = cg_emit_comp_against_nil(p, op_kind, right); - } else if (is_type_untyped_nil(right.type)) { - nil_check = cg_emit_comp_against_nil(p, op_kind, left); - } - if (nil_check.node != nullptr) { - return nil_check; - } - - if (are_types_identical(a, b)) { - // NOTE(bill): No need for a conversion - } /*else if (cg_is_const(left) || cg_is_const_nil(left)) { - left = cg_emit_conv(p, left, right.type); - } else if (cg_is_const(right) || cg_is_const_nil(right)) { - right = cg_emit_conv(p, right, left.type); - }*/ else { - Type *lt = left.type; - Type *rt = right.type; - - lt = left.type; - rt = right.type; - i64 ls = type_size_of(lt); - i64 rs = type_size_of(rt); - - // NOTE(bill): Quick heuristic, larger types are usually the target type - if (ls < rs) { - left = cg_emit_conv(p, left, rt); - } else if (ls > rs) { - right = cg_emit_conv(p, right, lt); - } else { - if (is_type_union(rt)) { - left = cg_emit_conv(p, left, rt); - } else { - right = cg_emit_conv(p, right, lt); - } - } - } - - a = core_type(left.type); - b = core_type(right.type); - left = cg_flatten_value(p, left); - right = cg_flatten_value(p, right); - - - if (is_type_matrix(a) && (op_kind == Token_CmpEq || op_kind == Token_NotEq)) { - GB_PANIC("TODO(bill): cg_emit_comp matrix"); - // Type *tl = base_type(a); - // lbValue lhs = lb_address_from_load_or_generate_local(p, left); - // lbValue rhs = lb_address_from_load_or_generate_local(p, right); - - - // // TODO(bill): Test to see if this is actually faster!!!! - // auto args = array_make(permanent_allocator(), 3); - // args[0] = lb_emit_conv(p, lhs, t_rawptr); - // args[1] = lb_emit_conv(p, rhs, t_rawptr); - // args[2] = lb_const_int(p->module, t_int, type_size_of(tl)); - // lbValue val = lb_emit_runtime_call(p, "memory_compare", args); - // lbValue res = lb_emit_comp(p, op_kind, val, lb_const_nil(p->module, val.type)); - // return lb_emit_conv(p, res, t_bool); - } - if (is_type_array_like(a)) { - GB_PANIC("TODO(bill): cg_emit_comp is_type_array_like"); - // Type *tl = base_type(a); - // lbValue lhs = lb_address_from_load_or_generate_local(p, left); - // lbValue rhs = lb_address_from_load_or_generate_local(p, right); - - - // TokenKind cmp_op = Token_And; - // lbValue res = lb_const_bool(p->module, t_bool, true); - // if (op_kind == Token_NotEq) { - // res = lb_const_bool(p->module, t_bool, false); - // cmp_op = Token_Or; - // } else if (op_kind == Token_CmpEq) { - // res = lb_const_bool(p->module, t_bool, true); - // cmp_op = Token_And; - // } - - // bool inline_array_arith = lb_can_try_to_inline_array_arith(tl); - // i32 count = 0; - // switch (tl->kind) { - // case Type_Array: count = cast(i32)tl->Array.count; break; - // case Type_EnumeratedArray: count = cast(i32)tl->EnumeratedArray.count; break; - // } - - // if (inline_array_arith) { - // // inline - // lbAddr val = lb_add_local_generated(p, t_bool, false); - // lb_addr_store(p, val, res); - // for (i32 i = 0; i < count; i++) { - // lbValue x = lb_emit_load(p, lb_emit_array_epi(p, lhs, i)); - // lbValue y = lb_emit_load(p, lb_emit_array_epi(p, rhs, i)); - // lbValue cmp = lb_emit_comp(p, op_kind, x, y); - // lbValue new_res = lb_emit_arith(p, cmp_op, lb_addr_load(p, val), cmp, t_bool); - // lb_addr_store(p, val, lb_emit_conv(p, new_res, t_bool)); - // } - - // return lb_addr_load(p, val); - // } else { - // if (is_type_simple_compare(tl) && (op_kind == Token_CmpEq || op_kind == Token_NotEq)) { - // // TODO(bill): Test to see if this is actually faster!!!! - // auto args = array_make(permanent_allocator(), 3); - // args[0] = lb_emit_conv(p, lhs, t_rawptr); - // args[1] = lb_emit_conv(p, rhs, t_rawptr); - // args[2] = lb_const_int(p->module, t_int, type_size_of(tl)); - // lbValue val = lb_emit_runtime_call(p, "memory_compare", args); - // lbValue res = lb_emit_comp(p, op_kind, val, lb_const_nil(p->module, val.type)); - // return lb_emit_conv(p, res, t_bool); - // } else { - // lbAddr val = lb_add_local_generated(p, t_bool, false); - // lb_addr_store(p, val, res); - // auto loop_data = lb_loop_start(p, count, t_i32); - // { - // lbValue i = loop_data.idx; - // lbValue x = lb_emit_load(p, lb_emit_array_ep(p, lhs, i)); - // lbValue y = lb_emit_load(p, lb_emit_array_ep(p, rhs, i)); - // lbValue cmp = lb_emit_comp(p, op_kind, x, y); - // lbValue new_res = lb_emit_arith(p, cmp_op, lb_addr_load(p, val), cmp, t_bool); - // lb_addr_store(p, val, lb_emit_conv(p, new_res, t_bool)); - // } - // lb_loop_end(p, loop_data); - - // return lb_addr_load(p, val); - // } - // } - } - - if ((is_type_struct(a) || is_type_union(a)) && is_type_comparable(a)) { - return cg_emit_comp_records(p, op_kind, left, right, a); - } - - if ((is_type_struct(b) || is_type_union(b)) && is_type_comparable(b)) { - return cg_emit_comp_records(p, op_kind, left, right, b); - } - - if (is_type_string(a)) { - if (is_type_cstring(a)) { - left = cg_emit_conv(p, left, t_string); - right = cg_emit_conv(p, right, t_string); - } - - char const *runtime_procedure = nullptr; - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "string_eq"; break; - case Token_NotEq: runtime_procedure = "string_ne"; break; - case Token_Lt: runtime_procedure = "string_lt"; break; - case Token_Gt: runtime_procedure = "string_gt"; break; - case Token_LtEq: runtime_procedure = "string_le"; break; - case Token_GtEq: runtime_procedure = "string_gt"; break; - } - GB_ASSERT(runtime_procedure != nullptr); - - auto args = slice_make(permanent_allocator(), 2); - args[0] = left; - args[1] = right; - return cg_emit_runtime_call(p, runtime_procedure, args); - } - - if (is_type_complex(a)) { - char const *runtime_procedure = ""; - i64 sz = 8*type_size_of(a); - switch (sz) { - case 32: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "complex32_eq"; break; - case Token_NotEq: runtime_procedure = "complex32_ne"; break; - } - break; - case 64: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "complex64_eq"; break; - case Token_NotEq: runtime_procedure = "complex64_ne"; break; - } - break; - case 128: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "complex128_eq"; break; - case Token_NotEq: runtime_procedure = "complex128_ne"; break; - } - break; - } - GB_ASSERT(runtime_procedure != nullptr); - - GB_PANIC("TODO(bill): cg_emit_runtime_call"); - // auto args = array_make(permanent_allocator(), 2); - // args[0] = left; - // args[1] = right; - // return lb_emit_runtime_call(p, runtime_procedure, args); - } - - if (is_type_quaternion(a)) { - char const *runtime_procedure = ""; - i64 sz = 8*type_size_of(a); - switch (sz) { - case 64: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "quaternion64_eq"; break; - case Token_NotEq: runtime_procedure = "quaternion64_ne"; break; - } - break; - case 128: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "quaternion128_eq"; break; - case Token_NotEq: runtime_procedure = "quaternion128_ne"; break; - } - break; - case 256: - switch (op_kind) { - case Token_CmpEq: runtime_procedure = "quaternion256_eq"; break; - case Token_NotEq: runtime_procedure = "quaternion256_ne"; break; - } - break; - } - GB_ASSERT(runtime_procedure != nullptr); - - GB_PANIC("TODO(bill): cg_emit_runtime_call"); - // auto args = array_make(permanent_allocator(), 2); - // args[0] = left; - // args[1] = right; - // return lb_emit_runtime_call(p, runtime_procedure, args); - } - - if (is_type_bit_set(a)) { - switch (op_kind) { - case Token_Lt: - case Token_LtEq: - case Token_Gt: - case Token_GtEq: - { - Type *it = bit_set_to_int(a); - cgValue lhs = cg_emit_transmute(p, left, it); - cgValue rhs = cg_emit_transmute(p, right, it); - cgValue res = cg_emit_arith(p, Token_And, lhs, rhs, it); - GB_ASSERT(lhs.kind == cgValue_Value); - GB_ASSERT(rhs.kind == cgValue_Value); - GB_ASSERT(res.kind == cgValue_Value); - - if (op_kind == Token_Lt || op_kind == Token_LtEq) { - // (lhs & rhs) == lhs - res = cg_value(tb_inst_cmp_eq(p->func, res.node, lhs.node), t_bool); - } else if (op_kind == Token_Gt || op_kind == Token_GtEq) { - // (lhs & rhs) == rhs - res = cg_value(tb_inst_cmp_eq(p->func, res.node, rhs.node), t_bool); - } - - // NOTE(bill): Strict subsets - if (op_kind == Token_Lt || op_kind == Token_Gt) { - // res &~ (lhs == rhs) - cgValue eq = cg_value(tb_inst_cmp_eq(p->func, lhs.node, rhs.node), t_bool); - res = cg_emit_arith(p, Token_AndNot, res, eq, t_bool); - } - return res; - } - - case Token_CmpEq: - GB_ASSERT(left.kind == cgValue_Value); - GB_ASSERT(right.kind == cgValue_Value); - return cg_value(tb_inst_cmp_eq(p->func, left.node, right.node), t_bool); - case Token_NotEq: - GB_ASSERT(left.kind == cgValue_Value); - GB_ASSERT(right.kind == cgValue_Value); - return cg_value(tb_inst_cmp_ne(p->func, left.node, right.node), t_bool); - } - } - - if (op_kind != Token_CmpEq && op_kind != Token_NotEq) { - Type *t = left.type; - if (is_type_integer(t) && is_type_different_to_arch_endianness(t)) { - Type *platform_type = integer_endian_type_to_platform_type(t); - cgValue x = cg_emit_byte_swap(p, left, platform_type); - cgValue y = cg_emit_byte_swap(p, right, platform_type); - left = x; - right = y; - } else if (is_type_float(t) && is_type_different_to_arch_endianness(t)) { - Type *platform_type = integer_endian_type_to_platform_type(t); - cgValue x = cg_emit_conv(p, left, platform_type); - cgValue y = cg_emit_conv(p, right, platform_type); - left = x; - right = y; - } - } - - a = core_type(left.type); - b = core_type(right.type); - - - if (is_type_integer(a) || - is_type_boolean(a) || - is_type_pointer(a) || - is_type_multi_pointer(a) || - is_type_proc(a) || - is_type_enum(a) || - is_type_typeid(a)) { - TB_Node *lhs = left.node; - TB_Node *rhs = right.node; - TB_Node *res = nullptr; - - bool is_signed = is_type_integer(left.type) && !is_type_unsigned(left.type); - switch (op_kind) { - case Token_CmpEq: res = tb_inst_cmp_eq(p->func, lhs, rhs); break; - case Token_NotEq: res = tb_inst_cmp_ne(p->func, lhs, rhs); break; - case Token_Gt: res = tb_inst_cmp_igt(p->func, lhs, rhs, is_signed); break; - case Token_GtEq: res = tb_inst_cmp_ige(p->func, lhs, rhs, is_signed); break; - case Token_Lt: res = tb_inst_cmp_ilt(p->func, lhs, rhs, is_signed); break; - case Token_LtEq: res = tb_inst_cmp_ile(p->func, lhs, rhs, is_signed); break; - } - - GB_ASSERT(res != nullptr); - return cg_value(res, t_bool); - } else if (is_type_float(a)) { - TB_Node *lhs = left.node; - TB_Node *rhs = right.node; - TB_Node *res = nullptr; - switch (op_kind) { - case Token_CmpEq: res = tb_inst_cmp_eq(p->func, lhs, rhs); break; - case Token_NotEq: res = tb_inst_cmp_ne(p->func, lhs, rhs); break; - case Token_Gt: res = tb_inst_cmp_fgt(p->func, lhs, rhs); break; - case Token_GtEq: res = tb_inst_cmp_fge(p->func, lhs, rhs); break; - case Token_Lt: res = tb_inst_cmp_flt(p->func, lhs, rhs); break; - case Token_LtEq: res = tb_inst_cmp_fle(p->func, lhs, rhs); break; - } - GB_ASSERT(res != nullptr); - return cg_value(res, t_bool); - } else if (is_type_simd_vector(a)) { - GB_PANIC("TODO(bill): #simd vector"); - // LLVMValueRef mask = nullptr; - // Type *elem = base_array_type(a); - // if (is_type_float(elem)) { - // LLVMRealPredicate pred = {}; - // switch (op_kind) { - // case Token_CmpEq: pred = LLVMRealOEQ; break; - // case Token_NotEq: pred = LLVMRealONE; break; - // } - // mask = LLVMBuildFCmp(p->builder, pred, left.value, right.value, ""); - // } else { - // LLVMIntPredicate pred = {}; - // switch (op_kind) { - // case Token_CmpEq: pred = LLVMIntEQ; break; - // case Token_NotEq: pred = LLVMIntNE; break; - // } - // mask = LLVMBuildICmp(p->builder, pred, left.value, right.value, ""); - // } - // GB_ASSERT_MSG(mask != nullptr, "Unhandled comparison kind %s (%s) %.*s %s (%s)", type_to_string(left.type), type_to_string(base_type(left.type)), LIT(token_strings[op_kind]), type_to_string(right.type), type_to_string(base_type(right.type))); - - // /* NOTE(bill, 2022-05-28): - // Thanks to Per Vognsen, sign extending to - // a vector of the same width as the input vector, bit casting to an integer, - // and then comparing against zero is the better option - // See: https://lists.llvm.org/pipermail/llvm-dev/2012-September/053046.html - - // // Example assuming 128-bit vector - - // %1 = <4 x float> ... - // %2 = <4 x float> ... - // %3 = fcmp oeq <4 x float> %1, %2 - // %4 = sext <4 x i1> %3 to <4 x i32> - // %5 = bitcast <4 x i32> %4 to i128 - // %6 = icmp ne i128 %5, 0 - // br i1 %6, label %true1, label %false2 - - // This will result in 1 cmpps + 1 ptest + 1 br - // (even without SSE4.1, contrary to what the mail list states, because of pmovmskb) - - // */ - - // unsigned count = cast(unsigned)get_array_type_count(a); - // unsigned elem_sz = cast(unsigned)(type_size_of(elem)*8); - // LLVMTypeRef mask_type = LLVMVectorType(LLVMIntTypeInContext(p->module->ctx, elem_sz), count); - // mask = LLVMBuildSExtOrBitCast(p->builder, mask, mask_type, ""); - - // LLVMTypeRef mask_int_type = LLVMIntTypeInContext(p->module->ctx, cast(unsigned)(8*type_size_of(a))); - // LLVMValueRef mask_int = LLVMBuildBitCast(p->builder, mask, mask_int_type, ""); - // res.value = LLVMBuildICmp(p->builder, LLVMIntNE, mask_int, LLVMConstNull(LLVMTypeOf(mask_int)), ""); - // return res; - } - - GB_PANIC("Unhandled comparison kind %s (%s) %.*s %s (%s)", type_to_string(left.type), type_to_string(base_type(left.type)), LIT(token_strings[op_kind]), type_to_string(right.type), type_to_string(base_type(right.type))); - return {}; -} - -gb_internal cgValue cg_emit_comp_against_nil(cgProcedure *p, TokenKind op_kind, cgValue x) { - GB_ASSERT(op_kind == Token_CmpEq || op_kind == Token_NotEq); - x = cg_flatten_value(p, x); - cgValue res = {}; - Type *t = x.type; - - TB_DataType dt = cg_data_type(t); - - Type *bt = base_type(t); - TypeKind type_kind = bt->kind; - - switch (type_kind) { - case Type_Basic: - switch (bt->Basic.kind) { - case Basic_rawptr: - case Basic_cstring: - GB_ASSERT(x.kind == cgValue_Value); - if (op_kind == Token_CmpEq) { - return cg_value(tb_inst_cmp_eq(p->func, x.node, tb_inst_uint(p->func, dt, 0)), t_bool); - } else if (op_kind == Token_NotEq) { - return cg_value(tb_inst_cmp_ne(p->func, x.node, tb_inst_uint(p->func, dt, 0)), t_bool); - } - break; - case Basic_any: - { - GB_ASSERT(x.kind == cgValue_Addr); - // // TODO(bill): is this correct behaviour for nil comparison for any? - cgValue data = cg_emit_struct_ev(p, x, 0); - cgValue id = cg_emit_struct_ev(p, x, 1); - - if (op_kind == Token_CmpEq) { - TB_Node *a = tb_inst_cmp_eq(p->func, data.node, tb_inst_uint(p->func, data.node->dt, 0)); - TB_Node *b = tb_inst_cmp_eq(p->func, id.node, tb_inst_uint(p->func, id.node->dt, 0)); - TB_Node *c = tb_inst_or(p->func, a, b); - return cg_value(c, t_bool); - } else if (op_kind == Token_NotEq) { - TB_Node *a = tb_inst_cmp_ne(p->func, data.node, tb_inst_uint(p->func, data.node->dt, 0)); - TB_Node *b = tb_inst_cmp_ne(p->func, id.node, tb_inst_uint(p->func, id.node->dt, 0)); - TB_Node *c = tb_inst_and(p->func, a, b); - return cg_value(c, t_bool); - } - } - break; - case Basic_typeid: - cgValue invalid_typeid = cg_const_value(p, t_typeid, exact_value_i64(0)); - return cg_emit_comp(p, op_kind, x, invalid_typeid); - } - break; - - case Type_Enum: - case Type_Pointer: - case Type_MultiPointer: - case Type_Proc: - case Type_BitSet: - GB_ASSERT(x.kind == cgValue_Value); - if (op_kind == Token_CmpEq) { - return cg_value(tb_inst_cmp_eq(p->func, x.node, tb_inst_uint(p->func, dt, 0)), t_bool); - } else if (op_kind == Token_NotEq) { - return cg_value(tb_inst_cmp_ne(p->func, x.node, tb_inst_uint(p->func, dt, 0)), t_bool); - } - break; - - case Type_Slice: - case Type_DynamicArray: - case Type_Map: - { - // NOTE(bill): all of their data "pointer-like" fields are at the 0-index - cgValue data = cg_emit_struct_ev(p, x, 0); - if (op_kind == Token_CmpEq) { - TB_Node *a = tb_inst_cmp_eq(p->func, data.node, tb_inst_uint(p->func, data.node->dt, 0)); - return cg_value(a, t_bool); - } else if (op_kind == Token_NotEq) { - TB_Node *a = tb_inst_cmp_ne(p->func, data.node, tb_inst_uint(p->func, data.node->dt, 0)); - return cg_value(a, t_bool); - } - } - break; - - case Type_Union: - { - if (type_size_of(t) == 0) { - return cg_const_bool(p, t_bool, op_kind == Token_CmpEq); - } else if (is_type_union_maybe_pointer(t)) { - cgValue tag = cg_emit_transmute(p, x, t_rawptr); - return cg_emit_comp_against_nil(p, op_kind, tag); - } else { - GB_ASSERT("TODO(bill): cg_emit_union_tag_value"); - // cgValue tag = cg_emit_union_tag_value(p, x); - // return cg_emit_comp(p, op_kind, tag, cg_zero(p->module, tag.type)); - } - } - break; - case Type_Struct: - GB_PANIC("TODO(bill): cg_emit_struct_ev"); - // if (is_type_soa_struct(t)) { - // Type *bt = base_type(t); - // if (bt->Struct.soa_kind == StructSoa_Slice) { - // LLVMValueRef the_value = {}; - // if (bt->Struct.fields.count == 0) { - // cgValue len = cg_soa_struct_len(p, x); - // the_value = len.value; - // } else { - // cgValue first_field = cg_emit_struct_ev(p, x, 0); - // the_value = first_field.value; - // } - // if (op_kind == Token_CmpEq) { - // res.value = LLVMBuildIsNull(p->builder, the_value, ""); - // return res; - // } else if (op_kind == Token_NotEq) { - // res.value = LLVMBuildIsNotNull(p->builder, the_value, ""); - // return res; - // } - // } else if (bt->Struct.soa_kind == StructSoa_Dynamic) { - // LLVMValueRef the_value = {}; - // if (bt->Struct.fields.count == 0) { - // cgValue cap = cg_soa_struct_cap(p, x); - // the_value = cap.value; - // } else { - // cgValue first_field = cg_emit_struct_ev(p, x, 0); - // the_value = first_field.value; - // } - // if (op_kind == Token_CmpEq) { - // res.value = LLVMBuildIsNull(p->builder, the_value, ""); - // return res; - // } else if (op_kind == Token_NotEq) { - // res.value = LLVMBuildIsNotNull(p->builder, the_value, ""); - // return res; - // } - // } - // } else if (is_type_struct(t) && type_has_nil(t)) { - // auto args = array_make(permanent_allocator(), 2); - // cgValue lhs = cg_address_from_load_or_generate_local(p, x); - // args[0] = cg_emit_conv(p, lhs, t_rawptr); - // args[1] = cg_const_int(p->module, t_int, type_size_of(t)); - // cgValue val = cg_emit_runtime_call(p, "memory_compare_zero", args); - // cgValue res = cg_emit_comp(p, op_kind, val, cg_const_int(p->module, t_int, 0)); - // return res; - // } - break; - } - GB_PANIC("Unknown handled type: %s -> %s", type_to_string(t), type_to_string(bt)); - return {}; -} - -gb_internal cgValue cg_emit_conv(cgProcedure *p, cgValue value, Type *t) { - t = reduce_tuple_to_single_type(t); - - value = cg_flatten_value(p, value); - - Type *src_type = value.type; - if (are_types_identical(t, src_type)) { - return value; - } - - if (is_type_untyped_uninit(src_type)) { - // return cg_const_undef(m, t); - return cg_const_nil(p, t); - } - if (is_type_untyped_nil(src_type)) { - return cg_const_nil(p, t); - } - - Type *src = core_type(src_type); - Type *dst = core_type(t); - GB_ASSERT(src != nullptr); - GB_ASSERT(dst != nullptr); - - if (are_types_identical(src, dst)) { - return cg_emit_transmute(p, value, t); - } - - TB_DataType st = cg_data_type(src); - if (value.kind == cgValue_Value && !TB_IS_VOID_TYPE(value.node->dt)) { - st = value.node->dt; - } - TB_DataType dt = cg_data_type(t); - - if (is_type_integer(src) && is_type_integer(dst)) { - GB_ASSERT(src->kind == Type_Basic && - dst->kind == Type_Basic); - GB_ASSERT(value.kind == cgValue_Value); - - i64 sz = type_size_of(default_type(src)); - i64 dz = type_size_of(default_type(dst)); - - if (sz == dz) { - if (dz > 1 && !types_have_same_internal_endian(src, dst)) { - return cg_emit_byte_swap(p, value, t); - } - value.type = t; - return value; - } - - if (sz > 1 && is_type_different_to_arch_endianness(src)) { - Type *platform_src_type = integer_endian_type_to_platform_type(src); - value = cg_emit_byte_swap(p, value, platform_src_type); - } - - TB_Node* (*op)(TB_Function* f, TB_Node* src, TB_DataType dt) = tb_inst_trunc; - - if (dz < sz) { - op = tb_inst_trunc; - } else if (dz == sz) { - op = tb_inst_bitcast; - } else if (dz > sz) { - op = is_type_unsigned(src) ? tb_inst_zxt : tb_inst_sxt; // zero extent - } - - if (dz > 1 && is_type_different_to_arch_endianness(dst)) { - Type *platform_dst_type = integer_endian_type_to_platform_type(dst); - - cgValue res = cg_value(op(p->func, value.node, cg_data_type(platform_dst_type)), platform_dst_type); - return cg_emit_byte_swap(p, res, t); - } else { - return cg_value(op(p->func, value.node, dt), t); - } - } - - // boolean -> boolean/integer - if (is_type_boolean(src) && (is_type_boolean(dst) || is_type_integer(dst))) { - TB_Node *v = tb_inst_cmp_ne(p->func, value.node, tb_inst_uint(p->func, st, 0)); - return cg_value(tb_inst_zxt(p->func, v, dt), t); - } - - // integer -> boolean - if (is_type_integer(src) && is_type_boolean(dst)) { - TB_Node *v = tb_inst_cmp_ne(p->func, value.node, tb_inst_uint(p->func, st, 0)); - return cg_value(tb_inst_zxt(p->func, v, dt), t); - } - - if (is_type_cstring(src) && is_type_u8_ptr(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_u8_ptr(src) && is_type_cstring(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_cstring(src) && is_type_u8_multi_ptr(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_u8_multi_ptr(src) && is_type_cstring(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_cstring(src) && is_type_rawptr(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_rawptr(src) && is_type_cstring(dst)) { - return cg_emit_transmute(p, value, dst); - } - - - if (are_types_identical(src, t_cstring) && are_types_identical(dst, t_string)) { - TEMPORARY_ALLOCATOR_GUARD(); - cgValue c = cg_emit_conv(p, value, t_cstring); - auto args = slice_make(temporary_allocator(), 1); - args[0] = c; - cgValue s = cg_emit_runtime_call(p, "cstring_to_string", args); - return cg_emit_conv(p, s, dst); - } - - // float -> float - if (is_type_float(src) && is_type_float(dst)) { - i64 sz = type_size_of(src); - i64 dz = type_size_of(dst); - - if (sz == 2 || dz == 2) { - GB_PANIC("TODO(bill): f16 conversions"); - } - - - if (dz == sz) { - if (types_have_same_internal_endian(src, dst)) { - return cg_value(value.node, t); - } else { - return cg_emit_byte_swap(p, value, t); - } - } - - if (is_type_different_to_arch_endianness(src) || is_type_different_to_arch_endianness(dst)) { - Type *platform_src_type = integer_endian_type_to_platform_type(src); - Type *platform_dst_type = integer_endian_type_to_platform_type(dst); - cgValue res = {}; - res = cg_emit_conv(p, value, platform_src_type); - res = cg_emit_conv(p, res, platform_dst_type); - if (is_type_different_to_arch_endianness(dst)) { - res = cg_emit_byte_swap(p, res, t); - } - return cg_emit_conv(p, res, t); - } - - - if (dz >= sz) { - return cg_value(tb_inst_fpxt(p->func, value.node, dt), t); - } - return cg_value(tb_inst_trunc(p->func, value.node, dt), t); - } - - if (is_type_complex(src) && is_type_complex(dst)) { - GB_PANIC("TODO(bill): complex -> complex"); - } - - if (is_type_quaternion(src) && is_type_quaternion(dst)) { - // @QuaternionLayout - GB_PANIC("TODO(bill): quaternion -> quaternion"); - } - if (is_type_integer(src) && is_type_complex(dst)) { - GB_PANIC("TODO(bill): int -> complex"); - } - if (is_type_float(src) && is_type_complex(dst)) { - GB_PANIC("TODO(bill): float -> complex"); - } - if (is_type_integer(src) && is_type_quaternion(dst)) { - GB_PANIC("TODO(bill): int -> quaternion"); - } - if (is_type_float(src) && is_type_quaternion(dst)) { - GB_PANIC("TODO(bill): float -> quaternion"); - } - if (is_type_complex(src) && is_type_quaternion(dst)) { - GB_PANIC("TODO(bill): complex -> quaternion"); - } - - - // float <-> integer - if (is_type_float(src) && is_type_integer(dst)) { - if (is_type_different_to_arch_endianness(src) || is_type_different_to_arch_endianness(dst)) { - Type *platform_src_type = integer_endian_type_to_platform_type(src); - Type *platform_dst_type = integer_endian_type_to_platform_type(dst); - cgValue res = {}; - res = cg_emit_conv(p, value, platform_src_type); - res = cg_emit_conv(p, res, platform_dst_type); - return cg_emit_conv(p, res, t); - } - - // if (is_type_integer_128bit(dst)) { - // TEMPORARY_ALLOCATOR_GUARD(); - - // auto args = array_make(temporary_allocator(), 1); - // args[0] = value; - // char const *call = "fixunsdfdi"; - // if (is_type_unsigned(dst)) { - // call = "fixunsdfti"; - // } - // lbValue res_i128 = lb_emit_runtime_call(p, call, args); - // return lb_emit_conv(p, res_i128, t); - // } - - bool is_signed = !is_type_unsigned(dst); - return cg_value(tb_inst_float2int(p->func, value.node, dt, is_signed), t); - } - if (is_type_integer(src) && is_type_float(dst)) { - if (is_type_different_to_arch_endianness(src) || is_type_different_to_arch_endianness(dst)) { - Type *platform_src_type = integer_endian_type_to_platform_type(src); - Type *platform_dst_type = integer_endian_type_to_platform_type(dst); - cgValue res = {}; - res = cg_emit_conv(p, value, platform_src_type); - res = cg_emit_conv(p, res, platform_dst_type); - if (is_type_different_to_arch_endianness(dst)) { - res = cg_emit_byte_swap(p, res, t); - } - return cg_emit_conv(p, res, t); - } - - // if (is_type_integer_128bit(src)) { - // TEMPORARY_ALLOCATOR_GUARD(); - - // auto args = array_make(temporary_allocator(), 1); - // args[0] = value; - // char const *call = "floattidf"; - // if (is_type_unsigned(src)) { - // call = "floattidf_unsigned"; - // } - // lbValue res_f64 = lb_emit_runtime_call(p, call, args); - // return lb_emit_conv(p, res_f64, t); - // } - - bool is_signed = !is_type_unsigned(dst); - return cg_value(tb_inst_int2float(p->func, value.node, dt, is_signed), t); - } - - if (is_type_simd_vector(dst)) { - GB_PANIC("TODO(bill): ? -> #simd vector"); - } - - - // Pointer <-> uintptr - if (is_type_pointer(src) && is_type_uintptr(dst)) { - return cg_value(tb_inst_ptr2int(p->func, value.node, dt), t); - } - if (is_type_uintptr(src) && is_type_pointer(dst)) { - return cg_value(tb_inst_int2ptr(p->func, value.node), t); - } - if (is_type_multi_pointer(src) && is_type_uintptr(dst)) { - return cg_value(tb_inst_ptr2int(p->func, value.node, dt), t); - } - if (is_type_uintptr(src) && is_type_multi_pointer(dst)) { - return cg_value(tb_inst_int2ptr(p->func, value.node), t); - } - - if (is_type_union(dst)) { - GB_PANIC("TODO(bill): ? -> union"); - } - - // NOTE(bill): This has to be done before 'Pointer <-> Pointer' as it's - // subtype polymorphism casting - if (check_is_assignable_to_using_subtype(src_type, t)) { - GB_PANIC("TODO(bill): ? -> subtyping"); - } - - // Pointer <-> Pointer - if (is_type_pointer(src) && is_type_pointer(dst)) { - return cg_value(value.node, t); - } - if (is_type_multi_pointer(src) && is_type_pointer(dst)) { - return cg_value(value.node, t); - } - if (is_type_pointer(src) && is_type_multi_pointer(dst)) { - return cg_value(value.node, t); - } - if (is_type_multi_pointer(src) && is_type_multi_pointer(dst)) { - return cg_value(value.node, t); - } - - // proc <-> proc - if (is_type_proc(src) && is_type_proc(dst)) { - return cg_value(value.node, t); - } - - // pointer -> proc - if (is_type_pointer(src) && is_type_proc(dst)) { - return cg_value(value.node, t); - } - // proc -> pointer - if (is_type_proc(src) && is_type_pointer(dst)) { - return cg_value(value.node, t); - } - - // []byte/[]u8 <-> string - if (is_type_u8_slice(src) && is_type_string(dst)) { - return cg_emit_transmute(p, value, t); - } - if (is_type_string(src) && is_type_u8_slice(dst)) { - return cg_emit_transmute(p, value, t); - } - - if (is_type_matrix(dst) && !is_type_matrix(src)) { - GB_PANIC("TODO(bill): !matrix -> matrix"); - } - - if (is_type_matrix(dst) && is_type_matrix(src)) { - GB_PANIC("TODO(bill): matrix -> matrix"); - } - - if (is_type_any(dst)) { - if (is_type_untyped_nil(src) || - is_type_untyped_uninit(src)) { - return cg_const_nil(p, t); - } - - cgAddr result = cg_add_local(p, t, nullptr, false); - - Type *st = default_type(src_type); - - cgValue data = cg_address_from_load_or_generate_local(p, value); - GB_ASSERT(is_type_pointer(data.type)); - GB_ASSERT(is_type_typed(st)); - - data = cg_emit_conv(p, data, t_rawptr); - if (p->name == "main@main") { - GB_PANIC("HERE %s %llu", type_to_string(st), cg_typeid_as_u64(p->module, value.type)); - } - - cgValue id = cg_typeid(p, st); - cgValue data_ptr = cg_emit_struct_ep(p, result.addr, 0); - cgValue id_ptr = cg_emit_struct_ep(p, result.addr, 1); - - cg_emit_store(p, data_ptr, data); - cg_emit_store(p, id_ptr, id); - - return cg_addr_load(p, result); - } - - i64 src_sz = type_size_of(src); - i64 dst_sz = type_size_of(dst); - - if (src_sz == dst_sz) { - // bit_set <-> integer - if (is_type_integer(src) && is_type_bit_set(dst)) { - cgValue v = cg_emit_conv(p, value, bit_set_to_int(dst)); - return cg_emit_transmute(p, v, t); - } - if (is_type_bit_set(src) && is_type_integer(dst)) { - cgValue bs = cg_emit_transmute(p, value, bit_set_to_int(src)); - return cg_emit_conv(p, bs, dst); - } - - // typeid <-> integer - if (is_type_integer(src) && is_type_typeid(dst)) { - return cg_emit_transmute(p, value, dst); - } - if (is_type_typeid(src) && is_type_integer(dst)) { - return cg_emit_transmute(p, value, dst); - } - } - - - if (is_type_untyped(src)) { - if (is_type_string(src) && is_type_string(dst)) { - cgAddr result = cg_add_local(p, t, nullptr, false); - cg_addr_store(p, result, value); - return cg_addr_load(p, result); - } - } - - - gb_printf_err("%.*s\n", LIT(p->name)); - gb_printf_err("cg_emit_conv: src -> dst\n"); - gb_printf_err("Not Identical %s != %s\n", type_to_string(src_type), type_to_string(t)); - gb_printf_err("Not Identical %s != %s\n", type_to_string(src), type_to_string(dst)); - gb_printf_err("Not Identical %p != %p\n", src_type, t); - gb_printf_err("Not Identical %p != %p\n", src, dst); - - - GB_PANIC("Invalid type conversion: '%s' to '%s' for procedure '%.*s'", - type_to_string(src_type), type_to_string(t), - LIT(p->name)); - - return {}; -} - -gb_internal cgValue cg_emit_arith(cgProcedure *p, TokenKind op, cgValue lhs, cgValue rhs, Type *type) { - if (is_type_array_like(lhs.type) || is_type_array_like(rhs.type)) { - GB_PANIC("TODO(bill): cg_emit_arith_array"); - } else if (is_type_matrix(lhs.type) || is_type_matrix(rhs.type)) { - GB_PANIC("TODO(bill): cg_emit_arith_matrix"); - } else if (is_type_complex(type)) { - GB_PANIC("TODO(bill): cg_emit_arith complex"); - } else if (is_type_quaternion(type)) { - GB_PANIC("TODO(bill): cg_emit_arith quaternion"); - } - - lhs = cg_flatten_value(p, cg_emit_conv(p, lhs, type)); - rhs = cg_flatten_value(p, cg_emit_conv(p, rhs, type)); - GB_ASSERT(lhs.kind == cgValue_Value); - GB_ASSERT(rhs.kind == cgValue_Value); - - if (is_type_integer(type) && is_type_different_to_arch_endianness(type)) { - switch (op) { - case Token_AndNot: - case Token_And: - case Token_Or: - case Token_Xor: - goto handle_op; - } - - Type *platform_type = integer_endian_type_to_platform_type(type); - cgValue x = cg_emit_byte_swap(p, lhs, integer_endian_type_to_platform_type(lhs.type)); - cgValue y = cg_emit_byte_swap(p, rhs, integer_endian_type_to_platform_type(rhs.type)); - - cgValue res = cg_emit_arith(p, op, x, y, platform_type); - - return cg_emit_byte_swap(p, res, type); - } - - if (is_type_float(type) && is_type_different_to_arch_endianness(type)) { - Type *platform_type = integer_endian_type_to_platform_type(type); - cgValue x = cg_emit_conv(p, lhs, integer_endian_type_to_platform_type(lhs.type)); - cgValue y = cg_emit_conv(p, rhs, integer_endian_type_to_platform_type(rhs.type)); - - cgValue res = cg_emit_arith(p, op, x, y, platform_type); - - return cg_emit_byte_swap(p, res, type); - } - -handle_op:; - - // NOTE(bill): Bit Set Aliases for + and - - if (is_type_bit_set(type)) { - switch (op) { - case Token_Add: op = Token_Or; break; - case Token_Sub: op = Token_AndNot; break; - } - } - - TB_ArithmeticBehavior arith_behavior = cast(TB_ArithmeticBehavior)0; - - Type *integral_type = type; - if (is_type_simd_vector(integral_type)) { - GB_PANIC("TODO(bill): cg_emit_arith #simd vector"); - // integral_type = core_array_type(integral_type); - } - - switch (op) { - case Token_Add: - if (is_type_float(integral_type)) { - return cg_value(tb_inst_fadd(p->func, lhs.node, rhs.node), type); - } - return cg_value(tb_inst_add(p->func, lhs.node, rhs.node, arith_behavior), type); - case Token_Sub: - if (is_type_float(integral_type)) { - return cg_value(tb_inst_fsub(p->func, lhs.node, rhs.node), type); - } - return cg_value(tb_inst_sub(p->func, lhs.node, rhs.node, arith_behavior), type); - case Token_Mul: - if (is_type_float(integral_type)) { - return cg_value(tb_inst_fmul(p->func, lhs.node, rhs.node), type); - } - return cg_value(tb_inst_mul(p->func, lhs.node, rhs.node, arith_behavior), type); - case Token_Quo: - if (is_type_float(integral_type)) { - return cg_value(tb_inst_fdiv(p->func, lhs.node, rhs.node), type); - } - return cg_value(tb_inst_div(p->func, lhs.node, rhs.node, !is_type_unsigned(integral_type)), type); - case Token_Mod: - if (is_type_float(integral_type)) { - GB_PANIC("TODO(bill): float %% float"); - } - return cg_value(tb_inst_mod(p->func, lhs.node, rhs.node, !is_type_unsigned(integral_type)), type); - case Token_ModMod: - if (is_type_unsigned(integral_type)) { - return cg_value(tb_inst_mod(p->func, lhs.node, rhs.node, false), type); - } else { - TB_Node *a = tb_inst_mod(p->func, lhs.node, rhs.node, true); - TB_Node *b = tb_inst_add(p->func, a, rhs.node, arith_behavior); - TB_Node *c = tb_inst_mod(p->func, b, rhs.node, true); - return cg_value(c, type); - } - - case Token_And: - return cg_value(tb_inst_and(p->func, lhs.node, rhs.node), type); - case Token_Or: - return cg_value(tb_inst_or(p->func, lhs.node, rhs.node), type); - case Token_Xor: - return cg_value(tb_inst_xor(p->func, lhs.node, rhs.node), type); - case Token_Shl: - { - rhs = cg_emit_conv(p, rhs, lhs.type); - TB_DataType dt = cg_data_type(lhs.type); - TB_Node *lhsval = lhs.node; - TB_Node *bits = rhs.node; - - TB_Node *bit_size = tb_inst_uint(p->func, dt, 8*type_size_of(lhs.type)); - TB_Node *zero = tb_inst_uint(p->func, dt, 0); - - TB_Node *width_test = tb_inst_cmp_ilt(p->func, bits, bit_size, false); - - TB_Node *res = tb_inst_shl(p->func, lhsval, bits, arith_behavior); - res = tb_inst_select(p->func, width_test, res, zero); - return cg_value(res, type); - } - case Token_Shr: - { - rhs = cg_emit_conv(p, rhs, lhs.type); - TB_DataType dt = cg_data_type(lhs.type); - TB_Node *lhsval = lhs.node; - TB_Node *bits = rhs.node; - - TB_Node *bit_size = tb_inst_uint(p->func, dt, 8*type_size_of(lhs.type)); - TB_Node *zero = tb_inst_uint(p->func, dt, 0); - - TB_Node *width_test = tb_inst_cmp_ilt(p->func, bits, bit_size, false); - - TB_Node *res = nullptr; - - if (is_type_unsigned(integral_type)) { - res = tb_inst_shr(p->func, lhsval, bits); - } else { - res = tb_inst_sar(p->func, lhsval, bits); - } - - - res = tb_inst_select(p->func, width_test, res, zero); - return cg_value(res, type); - } - case Token_AndNot: - return cg_value(tb_inst_and(p->func, lhs.node, tb_inst_not(p->func, rhs.node)), type); - } - - GB_PANIC("unhandled operator of cg_emit_arith"); - - return {}; -} - - -gb_internal void cg_fill_slice(cgProcedure *p, cgAddr const &slice, cgValue data, cgValue len) { - cgValue slice_ptr = cg_addr_get_ptr(p, slice); - cgValue data_ptr = cg_emit_struct_ep(p, slice_ptr, 0); - cgValue len_ptr = cg_emit_struct_ep(p, slice_ptr, 1); - - data = cg_emit_conv(p, data, type_deref(data_ptr.type)); - len = cg_emit_conv(p, len, t_int); - cg_emit_store(p, data_ptr, data); - cg_emit_store(p, len_ptr, len); -} - -gb_internal cgAddr cg_build_addr_slice_expr(cgProcedure *p, Ast *expr) { - ast_node(se, SliceExpr, expr); - - cgValue low = cg_const_int(p, t_int, 0); - cgValue high = {}; - - if (se->low != nullptr) { - low = cg_correct_endianness(p, cg_build_expr(p, se->low)); - } - if (se->high != nullptr) { - high = cg_correct_endianness(p, cg_build_expr(p, se->high)); - } - - bool no_indices = se->low == nullptr && se->high == nullptr; - gb_unused(no_indices); - - cgAddr addr = cg_build_addr(p, se->expr); - cgValue base = cg_addr_load(p, addr); - Type *type = base_type(base.type); - - if (is_type_pointer(type)) { - type = base_type(type_deref(type)); - addr = cg_addr(base); - base = cg_addr_load(p, addr); - } - - switch (type->kind) { - case Type_Basic: - case Type_Slice: { - if (type->kind == Type_Basic) { - GB_ASSERT(type->Basic.kind == Basic_string); - } - - Type *slice_type = type; - if (high.node == nullptr) { - cgValue len = cg_builtin_len(p, base); - high = len; - } - - if (!no_indices) { - // cg_emit_slice_bounds_check(p, se->open, low, high, len, se->low != nullptr); - } - - cgValue elem = cg_emit_ptr_offset(p, cg_builtin_raw_data(p, base), low); - cgValue new_len = cg_emit_arith(p, Token_Sub, high, low, t_int); - - cgAddr slice = cg_add_local(p, slice_type, nullptr, true); - cg_fill_slice(p, slice, elem, new_len); - return slice; - } - - case Type_RelativeMultiPointer: - GB_PANIC("TODO(bill): Type_RelativeMultiPointer should be handled above already on the cg_addr_load"); - break; - - case Type_DynamicArray: { - // Type *elem_type = type->DynamicArray.elem; - // Type *slice_type = alloc_type_slice(elem_type); - - // lbValue len = lb_dynamic_array_len(p, base); - // if (high.value == nullptr) high = len; - - // if (!no_indices) { - // lb_emit_slice_bounds_check(p, se->open, low, high, len, se->low != nullptr); - // } - - // lbValue elem = lb_emit_ptr_offset(p, lb_dynamic_array_elem(p, base), low); - // lbValue new_len = lb_emit_arith(p, Token_Sub, high, low, t_int); - - // lbAddr slice = lb_add_local_generated(p, slice_type, false); - // lb_fill_slice(p, slice, elem, new_len); - // return slice; - GB_PANIC("cg_build_addr_slice_expr Type_DynamicArray"); - break; - } - - case Type_MultiPointer: { - Type *res_type = type_of_expr(expr); - if (se->high == nullptr) { - cgAddr res = cg_add_local(p, res_type, nullptr, false); - GB_ASSERT(base.kind == cgValue_Value); - GB_ASSERT(low.kind == cgValue_Value); - - i64 stride = type_size_of(type->MultiPointer.elem); - cgValue offset = cg_value(tb_inst_array_access(p->func, base.node, low.node, stride), base.type); - cg_addr_store(p, res, offset); - return res; - } else { - cgAddr res = cg_add_local(p, res_type, nullptr, true); - low = cg_emit_conv(p, low, t_int); - high = cg_emit_conv(p, high, t_int); - - // cg_emit_multi_pointer_slice_bounds_check(p, se->open, low, high); - - i64 stride = type_size_of(type->MultiPointer.elem); - TB_Node *offset = tb_inst_array_access(p->func, base.node, low.node, stride); - TB_Node *len = tb_inst_sub(p->func, high.node, low.node, cast(TB_ArithmeticBehavior)0); - - TB_Node *data_ptr = tb_inst_member_access(p->func, res.addr.node, type_offset_of(res_type, 0)); - TB_Node *len_ptr = tb_inst_member_access(p->func, res.addr.node, type_offset_of(res_type, 1)); - - tb_inst_store(p->func, TB_TYPE_PTR, data_ptr, offset, cast(TB_CharUnits)build_context.ptr_size, false); - tb_inst_store(p->func, TB_TYPE_INT, len_ptr, len, cast(TB_CharUnits)build_context.int_size, false); - return res; - } - } - - case Type_Array: { - Type *slice_type = type_of_expr(expr); - GB_ASSERT(is_type_slice(slice_type)); - cgValue len = cg_const_int(p, t_int, type->Array.count); - if (high.node == nullptr) high = len; - - // bool low_const = type_and_value_of_expr(se->low).mode == Addressing_Constant; - // bool high_const = type_and_value_of_expr(se->high).mode == Addressing_Constant; - // if (!low_const || !high_const) { - // if (!no_indices) { - // lb_emit_slice_bounds_check(p, se->open, low, high, len, se->low != nullptr); - // } - // } - cgValue elem = cg_emit_ptr_offset(p, cg_builtin_raw_data(p, cg_addr_get_ptr(p, addr)), low); - cgValue new_len = cg_emit_arith(p, Token_Sub, high, low, t_int); - - cgAddr slice = cg_add_local(p, slice_type, nullptr, true); - cg_fill_slice(p, slice, elem, new_len); - return slice; - } - - - case Type_Struct: - // if (is_type_soa_struct(type)) { - // lbValue len = lb_soa_struct_len(p, lb_addr_get_ptr(p, addr)); - // if (high.value == nullptr) high = len; - - // if (!no_indices) { - // lb_emit_slice_bounds_check(p, se->open, low, high, len, se->low != nullptr); - // } - // #if 1 - - // lbAddr dst = lb_add_local_generated(p, type_of_expr(expr), true); - // if (type->Struct.soa_kind == StructSoa_Fixed) { - // i32 field_count = cast(i32)type->Struct.fields.count; - // for (i32 i = 0; i < field_count; i++) { - // lbValue field_dst = lb_emit_struct_ep(p, dst.addr, i); - // lbValue field_src = lb_emit_struct_ep(p, lb_addr_get_ptr(p, addr), i); - // field_src = lb_emit_array_ep(p, field_src, low); - // lb_emit_store(p, field_dst, field_src); - // } - - // lbValue len_dst = lb_emit_struct_ep(p, dst.addr, field_count); - // lbValue new_len = lb_emit_arith(p, Token_Sub, high, low, t_int); - // lb_emit_store(p, len_dst, new_len); - // } else if (type->Struct.soa_kind == StructSoa_Slice) { - // if (no_indices) { - // lb_addr_store(p, dst, base); - // } else { - // i32 field_count = cast(i32)type->Struct.fields.count - 1; - // for (i32 i = 0; i < field_count; i++) { - // lbValue field_dst = lb_emit_struct_ep(p, dst.addr, i); - // lbValue field_src = lb_emit_struct_ev(p, base, i); - // field_src = lb_emit_ptr_offset(p, field_src, low); - // lb_emit_store(p, field_dst, field_src); - // } - - - // lbValue len_dst = lb_emit_struct_ep(p, dst.addr, field_count); - // lbValue new_len = lb_emit_arith(p, Token_Sub, high, low, t_int); - // lb_emit_store(p, len_dst, new_len); - // } - // } else if (type->Struct.soa_kind == StructSoa_Dynamic) { - // i32 field_count = cast(i32)type->Struct.fields.count - 3; - // for (i32 i = 0; i < field_count; i++) { - // lbValue field_dst = lb_emit_struct_ep(p, dst.addr, i); - // lbValue field_src = lb_emit_struct_ev(p, base, i); - // field_src = lb_emit_ptr_offset(p, field_src, low); - // lb_emit_store(p, field_dst, field_src); - // } - - - // lbValue len_dst = lb_emit_struct_ep(p, dst.addr, field_count); - // lbValue new_len = lb_emit_arith(p, Token_Sub, high, low, t_int); - // lb_emit_store(p, len_dst, new_len); - // } - - // return dst; - // #endif - // } - GB_PANIC("cg_build_addr_slice_expr Type_Struct"); - break; - - } - - GB_PANIC("Unknown slicable type"); - return {}; -} - -gb_internal cgValue cg_emit_unary_arith(cgProcedure *p, TokenKind op, cgValue x, Type *type) { - switch (op) { - case Token_Add: - return x; - case Token_Not: // Boolean not - case Token_Xor: // Bitwise not - case Token_Sub: // Number negation - break; - case Token_Pointer: - GB_PANIC("This should be handled elsewhere"); - break; - } - - x = cg_flatten_value(p, x); - - if (is_type_array_like(x.type)) { - GB_PANIC("TODO(bill): cg_emit_unary_arith is_type_array_like"); - // // IMPORTANT TODO(bill): This is very wasteful with regards to stack memory - // Type *tl = base_type(x.type); - // cgValue val = cg_address_from_load_or_generate_local(p, x); - // GB_ASSERT(is_type_array_like(type)); - // Type *elem_type = base_array_type(type); - - // // NOTE(bill): Doesn't need to be zero because it will be initialized in the loops - // cgAddr res_addr = cg_add_local(p, type, nullptr, false); - // cgValue res = cg_addr_get_ptr(p, res_addr); - - // bool inline_array_arith = cg_can_try_to_inline_array_arith(type); - - // i32 count = cast(i32)get_array_type_count(tl); - - // LLVMTypeRef vector_type = nullptr; - // if (op != Token_Not && cg_try_vector_cast(p->module, val, &vector_type)) { - // LLVMValueRef vp = LLVMBuildPointerCast(p->builder, val.value, LLVMPointerType(vector_type, 0), ""); - // LLVMValueRef v = LLVMBuildLoad2(p->builder, vector_type, vp, ""); - - // LLVMValueRef opv = nullptr; - // switch (op) { - // case Token_Xor: - // opv = LLVMBuildNot(p->builder, v, ""); - // break; - // case Token_Sub: - // if (is_type_float(elem_type)) { - // opv = LLVMBuildFNeg(p->builder, v, ""); - // } else { - // opv = LLVMBuildNeg(p->builder, v, ""); - // } - // break; - // } - - // if (opv != nullptr) { - // LLVMSetAlignment(res.value, cast(unsigned)cg_alignof(vector_type)); - // LLVMValueRef res_ptr = LLVMBuildPointerCast(p->builder, res.value, LLVMPointerType(vector_type, 0), ""); - // LLVMBuildStore(p->builder, opv, res_ptr); - // return cg_emit_conv(p, cg_emit_load(p, res), type); - // } - // } - - // if (inline_array_arith) { - // // inline - // for (i32 i = 0; i < count; i++) { - // cgValue e = cg_emit_load(p, cg_emit_array_epi(p, val, i)); - // cgValue z = cg_emit_unary_arith(p, op, e, elem_type); - // cg_emit_store(p, cg_emit_array_epi(p, res, i), z); - // } - // } else { - // auto loop_data = cg_loop_start(p, count, t_i32); - - // cgValue e = cg_emit_load(p, cg_emit_array_ep(p, val, loop_data.idx)); - // cgValue z = cg_emit_unary_arith(p, op, e, elem_type); - // cg_emit_store(p, cg_emit_array_ep(p, res, loop_data.idx), z); - - // cg_loop_end(p, loop_data); - // } - // return cg_emit_load(p, res); - } - - if (op == Token_Xor) { - GB_ASSERT(x.kind == cgValue_Value); - cgValue cmp = cg_value(tb_inst_not(p->func, x.node), x.type); - return cg_emit_conv(p, cmp, type); - } - - if (op == Token_Not) { - TB_Node *zero = cg_const_nil(p, x.type).node; - cgValue cmp = cg_value(tb_inst_cmp_ne(p->func, x.node, zero), x.type); - return cg_emit_conv(p, cmp, type); - } - - if (op == Token_Sub && is_type_integer(type) && is_type_different_to_arch_endianness(type)) { - Type *platform_type = integer_endian_type_to_platform_type(type); - cgValue v = cg_emit_byte_swap(p, x, platform_type); - - cgValue res = cg_value(tb_inst_neg(p->func, v.node), platform_type); - return cg_emit_byte_swap(p, res, type); - } - - if (op == Token_Sub && is_type_float(type) && is_type_different_to_arch_endianness(type)) { - Type *platform_type = integer_endian_type_to_platform_type(type); - cgValue v = cg_emit_byte_swap(p, x, platform_type); - - cgValue res = cg_value(tb_inst_neg(p->func, v.node), platform_type); - return cg_emit_byte_swap(p, res, type); - } - - cgValue res = {}; - - if (op == Token_Sub) { // Number negation - if (is_type_integer(x.type)) { - res = cg_value(tb_inst_neg(p->func, x.node), x.type); - } else if (is_type_float(x.type)) { - res = cg_value(tb_inst_neg(p->func, x.node), x.type); - } else if (is_type_complex(x.type)) { - GB_PANIC("TODO(bill): neg complex"); - // LLVMValueRef v0 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 0, ""), ""); - // LLVMValueRef v1 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 1, ""), ""); - - // cgAddr addr = cg_add_local_generated(p, x.type, false); - // LLVMTypeRef type = llvm_addr_type(p->module, addr.addr); - // LLVMBuildStore(p->builder, v0, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 0, "")); - // LLVMBuildStore(p->builder, v1, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 1, "")); - // return cg_addr_load(p, addr); - - } else if (is_type_quaternion(x.type)) { - GB_PANIC("TODO(bill): neg quaternion"); - // LLVMValueRef v0 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 0, ""), ""); - // LLVMValueRef v1 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 1, ""), ""); - // LLVMValueRef v2 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 2, ""), ""); - // LLVMValueRef v3 = LLVMBuildFNeg(p->builder, LLVMBuildExtractValue(p->builder, x.value, 3, ""), ""); - - // cgAddr addr = cg_add_local_generated(p, x.type, false); - // LLVMTypeRef type = llvm_addr_type(p->module, addr.addr); - // LLVMBuildStore(p->builder, v0, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 0, "")); - // LLVMBuildStore(p->builder, v1, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 1, "")); - // LLVMBuildStore(p->builder, v2, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 2, "")); - // LLVMBuildStore(p->builder, v3, LLVMBuildStructGEP2(p->builder, type, addr.addr.value, 3, "")); - // return cg_addr_load(p, addr); - } else if (is_type_simd_vector(x.type)) { - GB_PANIC("TODO(bill): neg simd"); - // Type *elem = base_array_type(x.type); - // if (is_type_float(elem)) { - // res.value = LLVMBuildFNeg(p->builder, x.value, ""); - // } else { - // res.value = LLVMBuildNeg(p->builder, x.value, ""); - // } - } else if (is_type_matrix(x.type)) { - GB_PANIC("TODO(bill): neg matrix"); - // cgValue zero = {}; - // zero.value = LLVMConstNull(cg_type(p->module, type)); - // zero.type = type; - // return cg_emit_arith_matrix(p, Token_Sub, zero, x, type, true); - } else { - GB_PANIC("Unhandled type %s", type_to_string(x.type)); - } - res.type = x.type; - return res; - } - - return res; -} - -gb_internal void cg_emit_if(cgProcedure *p, cgValue const &cond, TB_Node *true_region, TB_Node *false_region) { - GB_ASSERT(cond.kind == cgValue_Value); - tb_inst_if(p->func, cond.node, true_region, false_region); -} - - -struct cgLoopData { - cgAddr index_addr; - cgValue index; - TB_Node *body; - TB_Node *done; - TB_Node *loop; -}; - -gb_internal cgLoopData cg_loop_start(cgProcedure *p, isize count, Type *index_type) { - cgLoopData data = {}; - - cgValue max = cg_const_int(p, index_type, count); - - data.index_addr = cg_add_local(p, index_type, nullptr, true); - - data.body = cg_control_region(p, "loop_body"); - data.done = cg_control_region(p, "loop_done"); - data.loop = cg_control_region(p, "loop_loop"); - - cg_emit_goto(p, data.loop); - tb_inst_set_control(p->func, data.loop); - - data.index = cg_addr_load(p, data.index_addr); - - cgValue cond = cg_emit_comp(p, Token_Lt, data.index, max); - cg_emit_if(p, cond, data.body, data.done); - tb_inst_set_control(p->func, data.body); - - return data; -} - -gb_internal void cg_loop_end(cgProcedure *p, cgLoopData const &data) { - if (data.index_addr.addr.node != nullptr) { - cg_emit_increment(p, data.index_addr.addr); - cg_emit_goto(p, data.loop); - tb_inst_set_control(p->func, data.done); - } -} - - - -gb_internal void cg_build_try_lhs_rhs(cgProcedure *p, Ast *arg, Type *final_type, cgValue *lhs_, cgValue *rhs_) { - cgValue lhs = {}; - cgValue rhs = {}; - - cgValue value = cg_build_expr(p, arg); - if (value.kind == cgValue_Multi) { - auto const &values = value.multi->values; - if (values.count == 2) { - lhs = values[0]; - rhs = values[1]; - } else { - rhs = values[values.count-1]; - if (values.count > 1) { - lhs = cg_value_multi(slice(values, 0, values.count-1), final_type); - } - } - } else { - rhs = value; - } - - GB_ASSERT(rhs.node != nullptr); - - if (lhs_) *lhs_ = lhs; - if (rhs_) *rhs_ = rhs; -} - -gb_internal cgValue cg_emit_try_has_value(cgProcedure *p, cgValue rhs) { - cgValue has_value = {}; - if (is_type_boolean(rhs.type)) { - has_value = rhs; - } else { - GB_ASSERT_MSG(type_has_nil(rhs.type), "%s", type_to_string(rhs.type)); - has_value = cg_emit_comp_against_nil(p, Token_CmpEq, rhs); - } - GB_ASSERT(has_value.node != nullptr); - return has_value; -} - -gb_internal cgValue cg_build_or_return(cgProcedure *p, Ast *arg, Type *final_type) { - cgValue lhs = {}; - cgValue rhs = {}; - cg_build_try_lhs_rhs(p, arg, final_type, &lhs, &rhs); - - TB_Node *return_region = cg_control_region(p, "or_return_return"); - TB_Node *continue_region = cg_control_region(p, "or_return_continue"); - - cgValue cond = cg_emit_try_has_value(p, rhs); - cg_emit_if(p, cond, continue_region, return_region); - tb_inst_set_control(p->func, return_region); - { - Type *proc_type = base_type(p->type); - Type *results = proc_type->Proc.results; - GB_ASSERT(results != nullptr && results->kind == Type_Tuple); - TypeTuple *tuple = &results->Tuple; - - GB_ASSERT(tuple->variables.count != 0); - - Entity *end_entity = tuple->variables[tuple->variables.count-1]; - rhs = cg_emit_conv(p, rhs, end_entity->type); - if (p->type->Proc.has_named_results) { - GB_ASSERT(end_entity->token.string.len != 0); - - // NOTE(bill): store the named values before returning - cgAddr found = map_must_get(&p->variable_map, end_entity); - cg_addr_store(p, found, rhs); - - cg_build_return_stmt(p, {}); - } else { - GB_ASSERT(tuple->variables.count == 1); - Slice results = {}; - results.data = &rhs; - results.count = 1;; - cg_build_return_stmt_internal(p, results); - } - } - tb_inst_set_control(p->func, continue_region); - if (final_type != nullptr && !is_type_tuple(final_type)) { - return cg_emit_conv(p, lhs, final_type); - } - return {}; -} - -gb_internal cgValue cg_build_or_else(cgProcedure *p, Ast *arg, Ast *else_expr, Type *final_type) { - if (arg->state_flags & StateFlag_DirectiveWasFalse) { - return cg_build_expr(p, else_expr); - } - - cgValue lhs = {}; - cgValue rhs = {}; - cg_build_try_lhs_rhs(p, arg, final_type, &lhs, &rhs); - - GB_ASSERT(else_expr != nullptr); - - if (is_diverging_expr(else_expr)) { - TB_Node *then = cg_control_region(p, "or_else_then"); - TB_Node *else_ = cg_control_region(p, "or_else_else"); - - cg_emit_if(p, cg_emit_try_has_value(p, rhs), then, else_); - // NOTE(bill): else block needs to be straight afterwards to make sure that the actual value is used - // from the then block - tb_inst_set_control(p->func, else_); - - cg_build_expr(p, else_expr); - - tb_inst_set_control(p->func, then); - return cg_emit_conv(p, lhs, final_type); - } else { - TB_Node *incoming_values[2] = {}; - TB_Node *incoming_regions[2] = {}; - - TB_Node *then = cg_control_region(p, "or_else_then"); - TB_Node *done = cg_control_region(p, "or_else_done"); // NOTE(bill): Append later - TB_Node *else_ = cg_control_region(p, "or_else_else"); - - cg_emit_if(p, cg_emit_try_has_value(p, rhs), then, else_); - tb_inst_set_control(p->func, then); - - cgValue x = cg_emit_conv(p, lhs, final_type); - incoming_values[0] = x.node; - incoming_regions[0] = tb_inst_get_control(p->func); - - tb_inst_goto(p->func, done); - tb_inst_set_control(p->func, else_); - - cgValue y = cg_emit_conv(p, cg_build_expr(p, else_expr), final_type); - incoming_values[1] = y.node; - incoming_regions[1] = tb_inst_get_control(p->func); - - tb_inst_goto(p->func, done); - tb_inst_set_control(p->func, done); - - GB_ASSERT(x.kind == y.kind); - GB_ASSERT(incoming_values[0]->dt.raw == incoming_values[1]->dt.raw); - cgValue res = {}; - res.kind = x.kind; - res.type = final_type; - - res.node = tb_inst_incomplete_phi(p->func, incoming_values[0]->dt, done, 2); - tb_inst_add_phi_operand(p->func, res.node, incoming_regions[0], incoming_values[0]); - tb_inst_add_phi_operand(p->func, res.node, incoming_regions[1], incoming_values[1]); - return res; - } -} - - -gb_internal isize cg_control_region_pred_count(TB_Node *region) { - GB_ASSERT(region->type == TB_REGION); - GB_ASSERT(region->input_count > 0); - return region->input_count; -} - -gb_internal cgValue cg_build_logical_binary_expr(cgProcedure *p, TokenKind op, Ast *left, Ast *right, Type *final_type) { - TB_Node *rhs = cg_control_region(p, "logical_cmp_rhs"); - TB_Node *done = cg_control_region(p, "logical_cmp_done"); - - cgValue short_circuit = {}; - if (op == Token_CmpAnd) { - cg_build_cond(p, left, rhs, done); - short_circuit = cg_const_bool(p, t_bool, false); - } else if (op == Token_CmpOr) { - cg_build_cond(p, left, done, rhs); - short_circuit = cg_const_bool(p, t_bool, true); - } - - if (rhs->input_count == 0) { - tb_inst_set_control(p->func, done); - return cg_emit_conv(p, short_circuit, final_type); - } - - if (done->input_count == 0) { - tb_inst_set_control(p->func, rhs); - return cg_build_expr(p, right); - } - - tb_inst_set_control(p->func, rhs); - cgValue edge = cg_build_expr(p, right); - TB_Node *edge_region = tb_inst_get_control(p->func); - - tb_inst_goto(p->func, done); - tb_inst_set_control(p->func, done); - - TB_DataType dt = edge.node->dt; - TB_Node *phi = tb_inst_incomplete_phi(p->func, dt, done, done->input_count); - for (size_t i = 0; i < done->input_count; i++) { - TB_Node *val = short_circuit.node; - TB_Node *region = done->inputs[i]; - if (region == edge_region) { - val = edge.node; - } - tb_inst_add_phi_operand(p->func, phi, region, val); - } - return cg_emit_conv(p, cg_value(phi, t_bool), final_type); -} - - - -gb_internal cgValue cg_build_binary_expr(cgProcedure *p, Ast *expr) { - ast_node(be, BinaryExpr, expr); - - TypeAndValue tv = type_and_value_of_expr(expr); - - if (is_type_matrix(be->left->tav.type) || is_type_matrix(be->right->tav.type)) { - cgValue left = cg_build_expr(p, be->left); - cgValue right = cg_build_expr(p, be->right); - GB_PANIC("TODO(bill): cg_emit_arith_matrix"); - // return cg_emit_arith_matrix(p, be->op.kind, left, right, default_type(tv.type), false); - } - - - switch (be->op.kind) { - case Token_Add: - case Token_Sub: - case Token_Mul: - case Token_Quo: - case Token_Mod: - case Token_ModMod: - case Token_And: - case Token_Or: - case Token_Xor: - case Token_AndNot: { - Type *type = default_type(tv.type); - cgValue left = cg_build_expr(p, be->left); - cgValue right = cg_build_expr(p, be->right); - return cg_emit_arith(p, be->op.kind, left, right, type); - } - - case Token_Shl: - case Token_Shr: { - cgValue left, right; - Type *type = default_type(tv.type); - left = cg_build_expr(p, be->left); - - if (cg_is_expr_untyped_const(be->right)) { - // NOTE(bill): RHS shift operands can still be untyped - // Just bypass the standard cg_build_expr - right = cg_expr_untyped_const_to_typed(p, be->right, type); - } else { - right = cg_build_expr(p, be->right); - } - return cg_emit_arith(p, be->op.kind, left, right, type); - } - - case Token_CmpEq: - case Token_NotEq: - if (is_type_untyped_nil(be->right->tav.type)) { - // `x == nil` or `x != nil` - cgValue left = cg_build_expr(p, be->left); - cgValue cmp = cg_emit_comp_against_nil(p, be->op.kind, left); - Type *type = default_type(tv.type); - return cg_emit_conv(p, cmp, type); - } else if (is_type_untyped_nil(be->left->tav.type)) { - // `nil == x` or `nil != x` - cgValue right = cg_build_expr(p, be->right); - cgValue cmp = cg_emit_comp_against_nil(p, be->op.kind, right); - Type *type = default_type(tv.type); - return cg_emit_conv(p, cmp, type); - }/* else if (cg_is_empty_string_constant(be->right)) { - // `x == ""` or `x != ""` - cgValue s = cg_build_expr(p, be->left); - s = cg_emit_conv(p, s, t_string); - cgValue len = cg_string_len(p, s); - cgValue cmp = cg_emit_comp(p, be->op.kind, len, cg_const_int(p->module, t_int, 0)); - Type *type = default_type(tv.type); - return cg_emit_conv(p, cmp, type); - } else if (cg_is_empty_string_constant(be->left)) { - // `"" == x` or `"" != x` - cgValue s = cg_build_expr(p, be->right); - s = cg_emit_conv(p, s, t_string); - cgValue len = cg_string_len(p, s); - cgValue cmp = cg_emit_comp(p, be->op.kind, len, cg_const_int(p->module, t_int, 0)); - Type *type = default_type(tv.type); - return cg_emit_conv(p, cmp, type); - }*/ - /*fallthrough*/ - case Token_Lt: - case Token_LtEq: - case Token_Gt: - case Token_GtEq: - { - cgValue left = {}; - cgValue right = {}; - - if (be->left->tav.mode == Addressing_Type) { - left = cg_typeid(p, be->left->tav.type); - } - if (be->right->tav.mode == Addressing_Type) { - right = cg_typeid(p, be->right->tav.type); - } - if (left.node == nullptr) left = cg_build_expr(p, be->left); - if (right.node == nullptr) right = cg_build_expr(p, be->right); - cgValue cmp = cg_emit_comp(p, be->op.kind, left, right); - Type *type = default_type(tv.type); - return cg_emit_conv(p, cmp, type); - } - - case Token_CmpAnd: - case Token_CmpOr: - return cg_build_logical_binary_expr(p, be->op.kind, be->left, be->right, tv.type); - - case Token_in: - case Token_not_in: - { - cgValue left = cg_build_expr(p, be->left); - cgValue right = cg_build_expr(p, be->right); - Type *rt = base_type(right.type); - if (is_type_pointer(rt)) { - right = cg_emit_load(p, right); - rt = base_type(type_deref(rt)); - } - - switch (rt->kind) { - case Type_Map: - { - cgValue map_ptr = cg_address_from_load_or_generate_local(p, right); - cgValue key = left; - cgValue ptr = cg_internal_dynamic_map_get_ptr(p, map_ptr, key); - if (be->op.kind == Token_in) { - return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_NotEq, ptr), t_bool); - } else { - return cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_CmpEq, ptr), t_bool); - } - } - break; - case Type_BitSet: - { - Type *key_type = rt->BitSet.elem; - GB_ASSERT(are_types_identical(left.type, key_type)); - - Type *it = bit_set_to_int(rt); - left = cg_emit_conv(p, left, it); - if (is_type_different_to_arch_endianness(it)) { - left = cg_emit_byte_swap(p, left, integer_endian_type_to_platform_type(it)); - } - - cgValue lower = cg_const_value(p, left.type, exact_value_i64(rt->BitSet.lower)); - cgValue key = cg_emit_arith(p, Token_Sub, left, lower, left.type); - cgValue bit = cg_emit_arith(p, Token_Shl, cg_const_int(p, left.type, 1), key, left.type); - bit = cg_emit_conv(p, bit, it); - - cgValue old_value = cg_emit_transmute(p, right, it); - cgValue new_value = cg_emit_arith(p, Token_And, old_value, bit, it); - - GB_PANIC("TODO(bill): cg_emit_comp"); - // TokenKind op = (be->op.kind == Token_in) ? Token_NotEq : Token_CmpEq; - // return cg_emit_conv(p, cg_emit_comp(p, op, new_value, cg_const_int(p, new_value.type, 0)), t_bool); - } - break; - default: - GB_PANIC("Invalid 'in' type"); - } - break; - } - break; - default: - GB_PANIC("Invalid binary expression"); - break; - } - return {}; -} - -gb_internal cgValue cg_build_cond(cgProcedure *p, Ast *cond, TB_Node *true_block, TB_Node *false_block) { - cond = unparen_expr(cond); - - GB_ASSERT(cond != nullptr); - GB_ASSERT(true_block != nullptr); - GB_ASSERT(false_block != nullptr); - - // Use to signal not to do compile time short circuit for consts - cgValue no_comptime_short_circuit = {}; - - switch (cond->kind) { - case_ast_node(ue, UnaryExpr, cond); - if (ue->op.kind == Token_Not) { - cgValue cond_val = cg_build_cond(p, ue->expr, false_block, true_block); - return cond_val; - // if (cond_val.value && LLVMIsConstant(cond_val.value)) { - // return cg_const_bool(p->module, cond_val.type, LLVMConstIntGetZExtValue(cond_val.value) == 0); - // } - // return no_comptime_short_circuit; - } - case_end; - - case_ast_node(be, BinaryExpr, cond); - if (be->op.kind == Token_CmpAnd) { - TB_Node *block = cg_control_region(p, "cmp_and"); - cg_build_cond(p, be->left, block, false_block); - tb_inst_set_control(p->func, block); - cg_build_cond(p, be->right, true_block, false_block); - return no_comptime_short_circuit; - } else if (be->op.kind == Token_CmpOr) { - TB_Node *block = cg_control_region(p, "cmp_or"); - cg_build_cond(p, be->left, true_block, block); - tb_inst_set_control(p->func, block); - cg_build_cond(p, be->right, true_block, false_block); - return no_comptime_short_circuit; - } - case_end; - } - - cgValue v = {}; - if (cg_is_expr_untyped_const(cond)) { - v = cg_expr_untyped_const_to_typed(p, cond, t_bool); - } else { - v = cg_build_expr(p, cond); - } - cg_emit_if(p, v, true_block, false_block); - return v; -} - -gb_internal cgValue cg_build_expr_internal(cgProcedure *p, Ast *expr); -gb_internal cgValue cg_build_expr(cgProcedure *p, Ast *expr) { - cg_set_debug_pos_from_node(p, expr); - - u16 prev_state_flags = p->state_flags; - defer (p->state_flags = prev_state_flags); - - if (expr->state_flags != 0) { - u16 in = expr->state_flags; - u16 out = p->state_flags; - - if (in & StateFlag_bounds_check) { - out |= StateFlag_bounds_check; - out &= ~StateFlag_no_bounds_check; - } else if (in & StateFlag_no_bounds_check) { - out |= StateFlag_no_bounds_check; - out &= ~StateFlag_bounds_check; - } - - if (in & StateFlag_type_assert) { - out |= StateFlag_type_assert; - out &= ~StateFlag_no_type_assert; - } else if (in & StateFlag_no_type_assert) { - out |= StateFlag_no_type_assert; - out &= ~StateFlag_type_assert; - } - - p->state_flags = out; - } - - - // IMPORTANT NOTE(bill): - // Selector Call Expressions (foo->bar(...)) - // must only evaluate `foo` once as it gets transformed into - // `foo.bar(foo, ...)` - // And if `foo` is a procedure call or something more complex, storing the value - // once is a very good idea - // If a stored value is found, it must be removed from the cache - if (expr->state_flags & StateFlag_SelectorCallExpr) { - // cgValue *pp = map_get(&p->selector_values, expr); - // if (pp != nullptr) { - // cgValue res = *pp; - // map_remove(&p->selector_values, expr); - // return res; - // } - // cgAddr *pa = map_get(&p->selector_addr, expr); - // if (pa != nullptr) { - // cgAddr res = *pa; - // map_remove(&p->selector_addr, expr); - // return cg_addr_load(p, res); - // } - } - - cgValue res = cg_build_expr_internal(p, expr); - if (res.kind == cgValue_Symbol) { - GB_ASSERT(is_type_internally_pointer_like(res.type)); - res = cg_value(tb_inst_get_symbol_address(p->func, res.symbol), res.type); - } - - if (expr->state_flags & StateFlag_SelectorCallExpr) { - // map_set(&p->selector_values, expr, res); - } - return res; -} - - -gb_internal cgValue cg_find_ident(cgProcedure *p, Entity *e, Ast *expr) { - cgAddr *found_addr = map_get(&p->variable_map, e); - if (found_addr) { - return cg_addr_load(p, *found_addr); - } - - cgValue *found = nullptr; - rw_mutex_shared_lock(&p->module->values_mutex); - found = map_get(&p->module->values, e); - rw_mutex_shared_unlock(&p->module->values_mutex); - - if (found) { - - auto v = *found; - // NOTE(bill): This is because pointers are already pointers in LLVM - if (is_type_proc(v.type)) { - return v; - } - return cg_emit_load(p, v); - } else if (e != nullptr && e->kind == Entity_Variable) { - return cg_addr_load(p, cg_build_addr(p, expr)); - } - - if (e->kind == Entity_Procedure) { - return cg_find_procedure_value_from_entity(p->module, e); - } - - String pkg = {}; - if (e->pkg) { - pkg = e->pkg->name; - } - gb_printf_err("Error in: %s\n", token_pos_to_string(ast_token(expr).pos)); - GB_PANIC("nullptr value for expression from identifier: %.*s.%.*s (%p) : %s @ %p", LIT(pkg), LIT(e->token.string), e, type_to_string(e->type), expr); - return {}; -} - -cgAddr cg_build_addr_compound_lit(cgProcedure *p, Ast *expr) { - struct cgCompoundLitElemTempData { - Ast * expr; - cgValue value; - i64 elem_index; - i64 elem_length; - cgValue gep; - }; - - - auto const &populate = [](cgProcedure *p, Slice const &elems, Array *temp_data, Type *compound_type) { - Type *bt = base_type(compound_type); - Type *et = nullptr; - switch (bt->kind) { - case Type_Array: et = bt->Array.elem; break; - case Type_EnumeratedArray: et = bt->EnumeratedArray.elem; break; - case Type_Slice: et = bt->Slice.elem; break; - case Type_BitSet: et = bt->BitSet.elem; break; - case Type_DynamicArray: et = bt->DynamicArray.elem; break; - case Type_SimdVector: et = bt->SimdVector.elem; break; - case Type_Matrix: et = bt->Matrix.elem; break; - } - GB_ASSERT(et != nullptr); - - - // NOTE(bill): Separate value, gep, store into their own chunks - for_array(i, elems) { - Ast *elem = elems[i]; - if (elem->kind == Ast_FieldValue) { - ast_node(fv, FieldValue, elem); - if (is_ast_range(fv->field)) { - ast_node(ie, BinaryExpr, fv->field); - TypeAndValue lo_tav = ie->left->tav; - TypeAndValue hi_tav = ie->right->tav; - GB_ASSERT(lo_tav.mode == Addressing_Constant); - GB_ASSERT(hi_tav.mode == Addressing_Constant); - - TokenKind op = ie->op.kind; - i64 lo = exact_value_to_i64(lo_tav.value); - i64 hi = exact_value_to_i64(hi_tav.value); - if (op != Token_RangeHalf) { - hi += 1; - } - - cgValue value = cg_emit_conv(p, cg_build_expr(p, fv->value), et); - - GB_ASSERT((hi-lo) > 0); - - if (bt->kind == Type_Matrix) { - GB_PANIC("TODO(bill): Type_Matrix"); - // for (i64 k = lo; k < hi; k++) { - // cgCompoundLitElemTempData data = {}; - // data.value = value; - - // data.elem_index = matrix_row_major_index_to_offset(bt, k); - // array_add(temp_data, data); - // } - } else { - enum {MAX_ELEMENT_AMOUNT = 32}; - if ((hi-lo) <= MAX_ELEMENT_AMOUNT) { - for (i64 k = lo; k < hi; k++) { - cgCompoundLitElemTempData data = {}; - data.value = value; - data.elem_index = k; - array_add(temp_data, data); - } - } else { - cgCompoundLitElemTempData data = {}; - data.value = value; - data.elem_index = lo; - data.elem_length = hi-lo; - array_add(temp_data, data); - } - } - } else { - auto tav = fv->field->tav; - GB_ASSERT(tav.mode == Addressing_Constant); - i64 index = exact_value_to_i64(tav.value); - - cgValue value = cg_emit_conv(p, cg_build_expr(p, fv->value), et); - GB_ASSERT(!is_type_tuple(value.type)); - - cgCompoundLitElemTempData data = {}; - data.value = value; - data.expr = fv->value; - if (bt->kind == Type_Matrix) { - GB_PANIC("TODO(bill): Type_Matrix"); - // data.elem_index = matrix_row_major_index_to_offset(bt, index); - } else { - data.elem_index = index; - } - array_add(temp_data, data); - } - - } else { - // if (bt->kind != Type_DynamicArray && lb_is_elem_const(elem, et)) { - // continue; - // } - - cgValue field_expr = cg_build_expr(p, elem); - GB_ASSERT(!is_type_tuple(field_expr.type)); - - cgValue ev = cg_emit_conv(p, field_expr, et); - - cgCompoundLitElemTempData data = {}; - data.value = ev; - if (bt->kind == Type_Matrix) { - GB_PANIC("TODO(bill): Type_Matrix"); - // data.elem_index = matrix_row_major_index_to_offset(bt, i); - } else { - data.elem_index = i; - } - array_add(temp_data, data); - } - } - }; - - auto const &assign_array = [](cgProcedure *p, Array const &temp_data) { - for (auto const &td : temp_data) if (td.value.node != nullptr) { - if (td.elem_length > 0) { - GB_PANIC("TODO(bill): range"); - // auto loop_data = cg_loop_start(p, cast(isize)td.elem_length, t_i32); - // { - // cgValue dst = td.gep; - // dst = cg_emit_ptr_offset(p, dst, loop_data.idx); - // cg_emit_store(p, dst, td.value); - // } - // cg_loop_end(p, loop_data); - } else { - cg_emit_store(p, td.gep, td.value); - } - } - }; - - - - ast_node(cl, CompoundLit, expr); - - Type *type = type_of_expr(expr); - Type *bt = base_type(type); - - cgAddr v = {}; - if (p->is_startup) { - v = cg_add_global(p, type, nullptr); - } else { - v = cg_add_local(p, type, nullptr, true); - } - - if (cl->elems.count == 0) { - // No need to create it - return v; - } - - TEMPORARY_ALLOCATOR_GUARD(); - - Type *et = nullptr; - switch (bt->kind) { - case Type_Array: et = bt->Array.elem; break; - case Type_EnumeratedArray: et = bt->EnumeratedArray.elem; break; - case Type_Slice: et = bt->Slice.elem; break; - case Type_BitSet: et = bt->BitSet.elem; break; - case Type_SimdVector: et = bt->SimdVector.elem; break; - case Type_Matrix: et = bt->Matrix.elem; break; - } - - String proc_name = {}; - if (p->entity) { - proc_name = p->entity->token.string; - } - TokenPos pos = ast_token(expr).pos; - - - switch (bt->kind) { - default: GB_PANIC("Unknown CompoundLit type: %s", type_to_string(type)); break; - - case Type_Struct: { - TypeStruct *st = &bt->Struct; - cgValue comp_lit_ptr = cg_addr_get_ptr(p, v); - - for_array(field_index, cl->elems) { - Ast *elem = cl->elems[field_index]; - - cgValue field_expr = {}; - Entity *field = nullptr; - isize index = field_index; - - if (elem->kind == Ast_FieldValue) { - ast_node(fv, FieldValue, elem); - String name = fv->field->Ident.token.string; - Selection sel = lookup_field(bt, name, false); - GB_ASSERT(!sel.indirect); - - elem = fv->value; - if (sel.index.count > 1) { - cgValue dst = cg_emit_deep_field_gep(p, comp_lit_ptr, sel); - field_expr = cg_build_expr(p, elem); - field_expr = cg_emit_conv(p, field_expr, sel.entity->type); - cg_emit_store(p, dst, field_expr); - continue; - } - - index = sel.index[0]; - } else { - Selection sel = lookup_field_from_index(bt, st->fields[field_index]->Variable.field_index); - GB_ASSERT(sel.index.count == 1); - GB_ASSERT(!sel.indirect); - index = sel.index[0]; - } - - field = st->fields[index]; - Type *ft = field->type; - - field_expr = cg_build_expr(p, elem); - - cgValue gep = {}; - if (st->is_raw_union) { - gep = cg_emit_conv(p, comp_lit_ptr, alloc_type_pointer(ft)); - } else { - gep = cg_emit_struct_ep(p, comp_lit_ptr, cast(i32)index); - } - - Type *fet = field_expr.type; - GB_ASSERT(fet->kind != Type_Tuple); - - // HACK TODO(bill): THIS IS A MASSIVE HACK!!!! - if (is_type_union(ft) && !are_types_identical(fet, ft) && !is_type_untyped(fet)) { - GB_ASSERT_MSG(union_variant_index(ft, fet) >= 0, "%s", type_to_string(fet)); - - GB_PANIC("TODO(bill): cg_emit_store_union_variant"); - // cg_emit_store_union_variant(p, gep, field_expr, fet); - } else { - cgValue fv = cg_emit_conv(p, field_expr, ft); - cg_emit_store(p, gep, fv); - } - } - return v; - } - - case Type_Map: { - GB_ASSERT(!build_context.no_dynamic_literals); - GB_PANIC("TODO(bill): map literals"); - - // cgValue err = cg_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos); - // gb_unused(err); - - // for (Ast *elem : cl->elems) { - // ast_node(fv, FieldValue, elem); - - // cgValue key = cg_build_expr(p, fv->field); - // cgValue value = cg_build_expr(p, fv->value); - // cg_internal_dynamic_map_set(p, v.addr, type, key, value, elem); - // } - break; - } - - case Type_Array: { - auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - - populate(p, cl->elems, &temp_data, type); - - cgValue dst_ptr = cg_addr_get_ptr(p, v); - for_array(i, temp_data) { - i32 index = cast(i32)(temp_data[i].elem_index); - temp_data[i].gep = cg_emit_array_epi(p, dst_ptr, index); - } - - assign_array(p, temp_data); - break; - } - case Type_EnumeratedArray: { - auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - - populate(p, cl->elems, &temp_data, type); - - cgValue dst_ptr = cg_addr_get_ptr(p, v); - i64 index_offset = exact_value_to_i64(*bt->EnumeratedArray.min_value); - for_array(i, temp_data) { - i32 index = cast(i32)(temp_data[i].elem_index - index_offset); - temp_data[i].gep = cg_emit_array_epi(p, dst_ptr, index); - } - - assign_array(p, temp_data); - break; - } - case Type_Slice: { - isize count = gb_max(cl->elems.count, cl->max_count); - - TB_CharUnits backing_size = cast(TB_CharUnits)(type_size_of(bt->Slice.elem) * count); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(bt->Slice.elem); - - TB_Node *backing = nullptr; - if (p->is_startup) { - TB_Global *global = tb_global_create(p->module->mod, 0, "", nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(p->module->mod, tb_module_get_data(p->module->mod), global, backing_size, align, 0); - backing = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)global); - } else { - backing = tb_inst_local(p->func, backing_size, align); - } - - cgValue data = cg_value(backing, alloc_type_multi_pointer(bt->Slice.elem)); - - auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - populate(p, cl->elems, &temp_data, type); - - - for_array(i, temp_data) { - temp_data[i].gep = cg_emit_ptr_offset(p, data, cg_const_int(p, t_int, temp_data[i].elem_index)); - } - - assign_array(p, temp_data); - cg_fill_slice(p, v, data, cg_const_int(p, t_int, count)); - return v; - } - - case Type_DynamicArray: { - GB_ASSERT(!build_context.no_dynamic_literals); - - Type *et = bt->DynamicArray.elem; - cgValue size = cg_const_int(p, t_int, type_size_of(et)); - cgValue align = cg_const_int(p, t_int, type_align_of(et)); - - i64 item_count = gb_max(cl->max_count, cl->elems.count); - { - - auto args = slice_make(temporary_allocator(), 5); - args[0] = cg_emit_conv(p, cg_addr_get_ptr(p, v), t_rawptr); - args[1] = size; - args[2] = align; - args[3] = cg_const_int(p, t_int, item_count); - args[4] = cg_emit_source_code_location_as_global(p, proc_name, pos); - cg_emit_runtime_call(p, "__dynamic_array_reserve", args); - } - - Type *array_type = alloc_type_array(et, item_count); - cgAddr items_addr = cg_add_local(p, array_type, nullptr, true); - cgValue items = cg_addr_get_ptr(p, items_addr); - - auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - populate(p, cl->elems, &temp_data, type); - - for_array(i, temp_data) { - temp_data[i].gep = cg_emit_array_epi(p, items, temp_data[i].elem_index); - } - assign_array(p, temp_data); - - { - auto args = slice_make(temporary_allocator(), 6); - args[0] = cg_emit_conv(p, v.addr, t_rawptr); - args[1] = size; - args[2] = align; - args[3] = cg_emit_conv(p, items, t_rawptr); - args[4] = cg_const_int(p, t_int, item_count); - args[5] = cg_emit_source_code_location_as_global(p, proc_name, pos); - cg_emit_runtime_call(p, "__dynamic_array_append", args); - } - break; - } - - case Type_Basic: { - GB_ASSERT(is_type_any(bt)); - String field_names[2] = { - str_lit("data"), - str_lit("id"), - }; - Type *field_types[2] = { - t_rawptr, - t_typeid, - }; - - for_array(field_index, cl->elems) { - Ast *elem = cl->elems[field_index]; - - cgValue field_expr = {}; - isize index = field_index; - - if (elem->kind == Ast_FieldValue) { - ast_node(fv, FieldValue, elem); - Selection sel = lookup_field(bt, fv->field->Ident.token.string, false); - index = sel.index[0]; - elem = fv->value; - } else { - TypeAndValue tav = type_and_value_of_expr(elem); - Selection sel = lookup_field(bt, field_names[field_index], false); - index = sel.index[0]; - } - - field_expr = cg_build_expr(p, elem); - - GB_ASSERT(field_expr.type->kind != Type_Tuple); - - Type *ft = field_types[index]; - cgValue fv = cg_emit_conv(p, field_expr, ft); - cgValue gep = cg_emit_struct_ep(p, cg_addr_get_ptr(p, v), index); - cg_emit_store(p, gep, fv); - } - break; - } - - case Type_BitSet: { - i64 sz = type_size_of(type); - if (sz == 0) { - return v; - } - cgValue lower = cg_const_value(p, t_int, exact_value_i64(bt->BitSet.lower)); - Type *it = bit_set_to_int(bt); - cgValue one = cg_const_value(p, it, exact_value_i64(1)); - for (Ast *elem : cl->elems) { - GB_ASSERT(elem->kind != Ast_FieldValue); - - cgValue expr = cg_build_expr(p, elem); - GB_ASSERT(expr.type->kind != Type_Tuple); - - cgValue e = cg_emit_conv(p, expr, it); - e = cg_emit_arith(p, Token_Sub, e, lower, it); - e = cg_emit_arith(p, Token_Shl, one, e, it); - - cgValue old_value = cg_emit_transmute(p, cg_addr_load(p, v), it); - cgValue new_value = cg_emit_arith(p, Token_Or, old_value, e, it); - new_value = cg_emit_transmute(p, new_value, type); - cg_addr_store(p, v, new_value); - } - return v; - } - - case Type_Matrix: { - auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - - populate(p, cl->elems, &temp_data, type); - - cgValue dst_ptr = cg_addr_get_ptr(p, v); - for_array(i, temp_data) { - temp_data[i].gep = cg_emit_array_epi(p, dst_ptr, temp_data[i].elem_index); - } - - assign_array(p, temp_data); - break; - } - - case Type_SimdVector: { - // auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); - - // populate(p, cl->elems, &temp_data, type); - - // // TODO(bill): reduce the need for individual `insertelement` if a `shufflevector` - // // might be a better option - // for (auto const &td : temp_data) if (td.value.node != nullptr) { - // if (td.elem_length > 0) { - // for (i64 k = 0; k < td.elem_length; k++) { - // LLVMValueRef index = cg_const_int(p->module, t_u32, td.elem_index + k).value; - // vector_value.value = LLVMBuildInsertElement(p->builder, vector_value.value, td.value.value, index, ""); - // } - // } else { - // LLVMValueRef index = cg_const_int(p->module, t_u32, td.elem_index).value; - // vector_value.value = LLVMBuildInsertElement(p->builder, vector_value.value, td.value.value, index, ""); - - // } - // } - break; - } - } - - return v; -} - -gb_internal cgValue cg_make_soa_pointer(cgProcedure *p, Type *type, cgValue const &addr, cgValue const &index) { - cgAddr v = cg_add_local(p, type, nullptr, true); - cgValue ptr = cg_emit_struct_ep(p, v.addr, 0); - cgValue idx = cg_emit_struct_ep(p, v.addr, 1); - cg_emit_store(p, ptr, addr); - cg_emit_store(p, idx, cg_emit_conv(p, index, t_int)); - - return cg_addr_load(p, v); -} - -gb_internal cgValue cg_build_unary_and(cgProcedure *p, Ast *expr) { - ast_node(ue, UnaryExpr, expr); - auto tv = type_and_value_of_expr(expr); - - - Ast *ue_expr = unparen_expr(ue->expr); - if (ue_expr->kind == Ast_IndexExpr && tv.mode == Addressing_OptionalOkPtr && is_type_tuple(tv.type)) { - GB_PANIC("TODO(bill): &m[k]"); - // Type *tuple = tv.type; - - // Type *map_type = type_of_expr(ue_expr->IndexExpr.expr); - // Type *ot = base_type(map_type); - // Type *t = base_type(type_deref(ot)); - // bool deref = t != ot; - // GB_ASSERT(t->kind == Type_Map); - // ast_node(ie, IndexExpr, ue_expr); - - // cgValue map_val = cg_build_addr_ptr(p, ie->expr); - // if (deref) { - // map_val = cg_emit_load(p, map_val); - // } - - // cgValue key = lb_build_expr(p, ie->index); - // key = lb_emit_conv(p, key, t->Map.key); - - // lbAddr addr = lb_addr_map(map_val, key, t, alloc_type_pointer(t->Map.value)); - // lbValue ptr = lb_addr_get_ptr(p, addr); - - // lbValue ok = lb_emit_comp_against_nil(p, Token_NotEq, ptr); - // ok = lb_emit_conv(p, ok, tuple->Tuple.variables[1]->type); - - // lbAddr res = lb_add_local_generated(p, tuple, false); - // lbValue gep0 = lb_emit_struct_ep(p, res.addr, 0); - // lbValue gep1 = lb_emit_struct_ep(p, res.addr, 1); - // lb_emit_store(p, gep0, ptr); - // lb_emit_store(p, gep1, ok); - // return lb_addr_load(p, res); - - } else if (is_type_soa_pointer(tv.type)) { - ast_node(ie, IndexExpr, ue_expr); - cgValue addr = cg_build_addr_ptr(p, ie->expr); - cgValue index = cg_build_expr(p, ie->index); - - if (!build_context.no_bounds_check) { - // TODO(bill): soa bounds checking - } - - return cg_make_soa_pointer(p, tv.type, addr, index); - } else if (ue_expr->kind == Ast_CompoundLit) { - cgAddr addr = cg_build_addr_compound_lit(p, expr); - return addr.addr; - } else if (ue_expr->kind == Ast_TypeAssertion) { - GB_PANIC("TODO(bill): &v.(T)"); - // if (is_type_tuple(tv.type)) { - // Type *tuple = tv.type; - // Type *ptr_type = tuple->Tuple.variables[0]->type; - // Type *ok_type = tuple->Tuple.variables[1]->type; - - // ast_node(ta, TypeAssertion, ue_expr); - // TokenPos pos = ast_token(expr).pos; - // Type *type = type_of_expr(ue_expr); - // GB_ASSERT(!is_type_tuple(type)); - - // lbValue e = lb_build_expr(p, ta->expr); - // Type *t = type_deref(e.type); - // if (is_type_union(t)) { - // lbValue v = e; - // if (!is_type_pointer(v.type)) { - // v = lb_address_from_load_or_generate_local(p, v); - // } - // Type *src_type = type_deref(v.type); - // Type *dst_type = type; - - // lbValue src_tag = {}; - // lbValue dst_tag = {}; - // if (is_type_union_maybe_pointer(src_type)) { - // src_tag = lb_emit_comp_against_nil(p, Token_NotEq, v); - // dst_tag = lb_const_bool(p->module, t_bool, true); - // } else { - // src_tag = lb_emit_load(p, lb_emit_union_tag_ptr(p, v)); - // dst_tag = lb_const_union_tag(p->module, src_type, dst_type); - // } - - // lbValue ok = lb_emit_comp(p, Token_CmpEq, src_tag, dst_tag); - - // lbValue data_ptr = lb_emit_conv(p, v, ptr_type); - // lbAddr res = lb_add_local_generated(p, tuple, true); - // lbValue gep0 = lb_emit_struct_ep(p, res.addr, 0); - // lbValue gep1 = lb_emit_struct_ep(p, res.addr, 1); - // lb_emit_store(p, gep0, lb_emit_select(p, ok, data_ptr, lb_const_nil(p->module, ptr_type))); - // lb_emit_store(p, gep1, lb_emit_conv(p, ok, ok_type)); - // return lb_addr_load(p, res); - // } else if (is_type_any(t)) { - // lbValue v = e; - // if (is_type_pointer(v.type)) { - // v = lb_emit_load(p, v); - // } - - // lbValue data_ptr = lb_emit_conv(p, lb_emit_struct_ev(p, v, 0), ptr_type); - // lbValue any_id = lb_emit_struct_ev(p, v, 1); - // lbValue id = lb_typeid(p->module, type); - - // lbValue ok = lb_emit_comp(p, Token_CmpEq, any_id, id); - - // lbAddr res = lb_add_local_generated(p, tuple, false); - // lbValue gep0 = lb_emit_struct_ep(p, res.addr, 0); - // lbValue gep1 = lb_emit_struct_ep(p, res.addr, 1); - // lb_emit_store(p, gep0, lb_emit_select(p, ok, data_ptr, lb_const_nil(p->module, ptr_type))); - // lb_emit_store(p, gep1, lb_emit_conv(p, ok, ok_type)); - // return lb_addr_load(p, res); - // } else { - // GB_PANIC("TODO(bill): type assertion %s", type_to_string(type)); - // } - - // } else { - // GB_ASSERT(is_type_pointer(tv.type)); - - // ast_node(ta, TypeAssertion, ue_expr); - // TokenPos pos = ast_token(expr).pos; - // Type *type = type_of_expr(ue_expr); - // GB_ASSERT(!is_type_tuple(type)); - - // lbValue e = lb_build_expr(p, ta->expr); - // Type *t = type_deref(e.type); - // if (is_type_union(t)) { - // lbValue v = e; - // if (!is_type_pointer(v.type)) { - // v = lb_address_from_load_or_generate_local(p, v); - // } - // Type *src_type = type_deref(v.type); - // Type *dst_type = type; - - - // if ((p->state_flags & StateFlag_no_type_assert) == 0) { - // lbValue src_tag = {}; - // lbValue dst_tag = {}; - // if (is_type_union_maybe_pointer(src_type)) { - // src_tag = lb_emit_comp_against_nil(p, Token_NotEq, v); - // dst_tag = lb_const_bool(p->module, t_bool, true); - // } else { - // src_tag = lb_emit_load(p, lb_emit_union_tag_ptr(p, v)); - // dst_tag = lb_const_union_tag(p->module, src_type, dst_type); - // } - - - // isize arg_count = 6; - // if (build_context.no_rtti) { - // arg_count = 4; - // } - - // lbValue ok = lb_emit_comp(p, Token_CmpEq, src_tag, dst_tag); - // auto args = array_make(permanent_allocator(), arg_count); - // args[0] = ok; - - // args[1] = lb_find_or_add_entity_string(p->module, get_file_path_string(pos.file_id)); - // args[2] = lb_const_int(p->module, t_i32, pos.line); - // args[3] = lb_const_int(p->module, t_i32, pos.column); - - // if (!build_context.no_rtti) { - // args[4] = lb_typeid(p->module, src_type); - // args[5] = lb_typeid(p->module, dst_type); - // } - // lb_emit_runtime_call(p, "type_assertion_check", args); - // } - - // lbValue data_ptr = v; - // return lb_emit_conv(p, data_ptr, tv.type); - // } else if (is_type_any(t)) { - // lbValue v = e; - // if (is_type_pointer(v.type)) { - // v = lb_emit_load(p, v); - // } - // lbValue data_ptr = lb_emit_struct_ev(p, v, 0); - // if ((p->state_flags & StateFlag_no_type_assert) == 0) { - // GB_ASSERT(!build_context.no_rtti); - - // lbValue any_id = lb_emit_struct_ev(p, v, 1); - - // lbValue id = lb_typeid(p->module, type); - // lbValue ok = lb_emit_comp(p, Token_CmpEq, any_id, id); - // auto args = array_make(permanent_allocator(), 6); - // args[0] = ok; - - // args[1] = lb_find_or_add_entity_string(p->module, get_file_path_string(pos.file_id)); - // args[2] = lb_const_int(p->module, t_i32, pos.line); - // args[3] = lb_const_int(p->module, t_i32, pos.column); - - // args[4] = any_id; - // args[5] = id; - // lb_emit_runtime_call(p, "type_assertion_check", args); - // } - - // return lb_emit_conv(p, data_ptr, tv.type); - // } else { - // GB_PANIC("TODO(bill): type assertion %s", type_to_string(type)); - // } - // } - } - - return cg_build_addr_ptr(p, ue->expr); -} - -gb_internal cgValue cg_emit_cast_union(cgProcedure *p, cgValue value, Type *type, TokenPos pos) { - Type *src_type = value.type; - bool is_ptr = is_type_pointer(src_type); - - bool is_tuple = true; - Type *tuple = type; - if (type->kind != Type_Tuple) { - is_tuple = false; - tuple = make_optional_ok_type(type); - } - - - if (is_ptr) { - value = cg_emit_load(p, value); - } - Type *src = base_type(type_deref(src_type)); - GB_ASSERT_MSG(is_type_union(src), "%s", type_to_string(src_type)); - Type *dst = tuple->Tuple.variables[0]->type; - - cgValue value_ = cg_address_from_load_or_generate_local(p, value); - - if ((p->state_flags & StateFlag_no_type_assert) != 0 && !is_tuple) { - // just do a bit cast of the data at the front - cgValue ptr = cg_emit_conv(p, value_, alloc_type_pointer(type)); - return cg_emit_load(p, ptr); - } - - - cgValue tag = {}; - cgValue dst_tag = {}; - cgValue cond = {}; - cgValue data = {}; - - cgValue gep0 = cg_add_local(p, tuple->Tuple.variables[0]->type, nullptr, true).addr; - cgValue gep1 = cg_add_local(p, tuple->Tuple.variables[1]->type, nullptr, true).addr; - - if (is_type_union_maybe_pointer(src)) { - data = cg_emit_load(p, cg_emit_conv(p, value_, gep0.type)); - } else { - tag = cg_emit_load(p, cg_emit_union_tag_ptr(p, value_)); - dst_tag = cg_const_union_tag(p, src, dst); - } - - TB_Node *ok_block = cg_control_region(p, "union_cast_ok"); - TB_Node *end_block = cg_control_region(p, "union_cast_end"); - - if (data.node != nullptr) { - GB_ASSERT(is_type_union_maybe_pointer(src)); - cond = cg_emit_comp_against_nil(p, Token_NotEq, data); - } else { - cond = cg_emit_comp(p, Token_CmpEq, tag, dst_tag); - } - - cg_emit_if(p, cond, ok_block, end_block); - tb_inst_set_control(p->func, ok_block); - - if (data.node == nullptr) { - data = cg_emit_load(p, cg_emit_conv(p, value_, gep0.type)); - } - cg_emit_store(p, gep0, data); - cg_emit_store(p, gep1, cg_const_bool(p, t_bool, true)); - - cg_emit_goto(p, end_block); - tb_inst_set_control(p->func, end_block); - - if (!is_tuple) { - GB_ASSERT((p->state_flags & StateFlag_no_type_assert) == 0); - // NOTE(bill): Panic on invalid conversion - Type *dst_type = tuple->Tuple.variables[0]->type; - - isize arg_count = 7; - if (build_context.no_rtti) { - arg_count = 4; - } - - cgValue ok = cg_emit_load(p, gep1); - auto args = slice_make(permanent_allocator(), arg_count); - args[0] = ok; - - args[1] = cg_const_string(p, t_string, get_file_path_string(pos.file_id)); - args[2] = cg_const_int(p, t_i32, pos.line); - args[3] = cg_const_int(p, t_i32, pos.column); - - if (!build_context.no_rtti) { - args[4] = cg_typeid(p, src_type); - args[5] = cg_typeid(p, dst_type); - args[6] = cg_emit_conv(p, value_, t_rawptr); - } - cg_emit_runtime_call(p, "type_assertion_check2", args); - - return cg_emit_load(p, gep0); - } - - return cg_value_multi2(cg_emit_load(p, gep0), cg_emit_load(p, gep1), tuple); -} - -gb_internal cgValue cg_emit_cast_any(cgProcedure *p, cgValue value, Type *type, TokenPos pos) { - Type *src_type = value.type; - - if (is_type_pointer(src_type)) { - value = cg_emit_load(p, value); - } - - bool is_tuple = true; - Type *tuple = type; - if (type->kind != Type_Tuple) { - is_tuple = false; - tuple = make_optional_ok_type(type); - } - Type *dst_type = tuple->Tuple.variables[0]->type; - - if ((p->state_flags & StateFlag_no_type_assert) != 0 && !is_tuple) { - // just do a bit cast of the data at the front - cgValue ptr = cg_emit_struct_ev(p, value, 0); - ptr = cg_emit_conv(p, ptr, alloc_type_pointer(type)); - return cg_emit_load(p, ptr); - } - - cgValue dst_typeid = cg_typeid(p, dst_type); - cgValue any_typeid = cg_emit_struct_ev(p, value, 1); - - - TB_Node *ok_block = cg_control_region(p, "any_cast_ok"); - TB_Node *end_block = cg_control_region(p, "any_cast_end"); - cgValue cond = cg_emit_comp(p, Token_CmpEq, any_typeid, dst_typeid); - cg_emit_if(p, cond, ok_block, end_block); - tb_inst_set_control(p->func, ok_block); - - cgValue gep0 = cg_add_local(p, tuple->Tuple.variables[0]->type, nullptr, true).addr; - cgValue gep1 = cg_add_local(p, tuple->Tuple.variables[1]->type, nullptr, true).addr; - - cgValue any_data = cg_emit_struct_ev(p, value, 0); - cgValue ptr = cg_emit_conv(p, any_data, alloc_type_pointer(dst_type)); - cg_emit_store(p, gep0, cg_emit_load(p, ptr)); - cg_emit_store(p, gep1, cg_const_bool(p, t_bool, true)); - - cg_emit_goto(p, end_block); - tb_inst_set_control(p->func, end_block); - - if (!is_tuple) { - // NOTE(bill): Panic on invalid conversion - cgValue ok = cg_emit_load(p, gep1); - - isize arg_count = 7; - if (build_context.no_rtti) { - arg_count = 4; - } - auto args = slice_make(permanent_allocator(), arg_count); - args[0] = ok; - - args[1] = cg_const_string(p, t_string, get_file_path_string(pos.file_id)); - args[2] = cg_const_int(p, t_i32, pos.line); - args[3] = cg_const_int(p, t_i32, pos.column); - - if (!build_context.no_rtti) { - args[4] = any_typeid; - args[5] = dst_typeid; - args[6] = cg_emit_struct_ev(p, value, 0); - } - cg_emit_runtime_call(p, "type_assertion_check2", args); - - return cg_emit_load(p, gep0); - } - - return cg_value_multi2(cg_emit_load(p, gep0), cg_emit_load(p, gep1), tuple); -} - - -gb_internal cgValue cg_build_type_assertion(cgProcedure *p, Ast *expr, Type *type) { - ast_node(ta, TypeAssertion, expr); - - TokenPos pos = ast_token(expr).pos; - cgValue e = cg_build_expr(p, ta->expr); - Type *t = type_deref(e.type); - - if (is_type_union(t)) { - return cg_emit_cast_union(p, e, type, pos); - } else if (is_type_any(t)) { - return cg_emit_cast_any(p, e, type, pos); - } - GB_PANIC("TODO(bill): type assertion %s", type_to_string(e.type)); - return {}; -} - - -gb_internal cgValue cg_build_expr_internal(cgProcedure *p, Ast *expr) { - expr = unparen_expr(expr); - - TokenPos expr_pos = ast_token(expr).pos; - TypeAndValue tv = type_and_value_of_expr(expr); - Type *type = type_of_expr(expr); - GB_ASSERT_MSG(tv.mode != Addressing_Invalid, "invalid expression '%s' (tv.mode = %d, tv.type = %s) @ %s\n Current Proc: %.*s : %s", expr_to_string(expr), tv.mode, type_to_string(tv.type), token_pos_to_string(expr_pos), LIT(p->name), type_to_string(p->type)); - - if (tv.value.kind != ExactValue_Invalid && - expr->kind != Ast_CompoundLit) { - // NOTE(bill): The commented out code below is just for debug purposes only - // if (is_type_untyped(type)) { - // gb_printf_err("%s %s : %s @ %p\n", token_pos_to_string(expr_pos), expr_to_string(expr), type_to_string(expr->tav.type), expr); - // GB_PANIC("%s\n", type_to_string(tv.type)); - // } - // NOTE(bill): Short on constant values - return cg_const_value(p, type, tv.value); - } else if (tv.mode == Addressing_Type) { - // NOTE(bill, 2023-01-16): is this correct? I hope so at least - return cg_typeid(p, tv.type); - } - - switch (expr->kind) { - case_ast_node(bl, BasicLit, expr); - TokenPos pos = bl->token.pos; - GB_PANIC("Non-constant basic literal %s - %.*s", token_pos_to_string(pos), LIT(token_strings[bl->token.kind])); - case_end; - - case_ast_node(bd, BasicDirective, expr); - TokenPos pos = bd->token.pos; - GB_PANIC("Non-constant basic literal %s - %.*s", token_pos_to_string(pos), LIT(bd->name.string)); - case_end; - - case_ast_node(i, Ident, expr); - Entity *e = entity_from_expr(expr); - e = strip_entity_wrapping(e); - - GB_ASSERT_MSG(e != nullptr, "%s in %.*s %p", expr_to_string(expr), LIT(p->name), expr); - - if (e->kind == Entity_Builtin) { - Token token = ast_token(expr); - GB_PANIC("TODO(bill): lb_build_expr Entity_Builtin '%.*s'\n" - "\t at %s", LIT(builtin_procs[e->Builtin.id].name), - token_pos_to_string(token.pos)); - return {}; - } else if (e->kind == Entity_Nil) { - // TODO(bill): is this correct? - return cg_value(cast(TB_Node *)nullptr, e->type); - } - GB_ASSERT(e->kind != Entity_ProcGroup); - - cgAddr *addr = map_get(&p->variable_map, e); - if (addr) { - return cg_addr_load(p, *addr); - } - return cg_find_ident(p, e, expr); - case_end; - - case_ast_node(i, Implicit, expr); - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - case_ast_node(u, Uninit, expr); - if (is_type_untyped(type)) { - return cg_value(cast(TB_Node *)nullptr, t_untyped_uninit); - } - return cg_value(tb_inst_poison(p->func, cg_data_type(type)), type); - case_end; - - case_ast_node(de, DerefExpr, expr); - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - - case_ast_node(se, SelectorExpr, expr); - TypeAndValue tav = type_and_value_of_expr(expr); - GB_ASSERT(tav.mode != Addressing_Invalid); - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - case_ast_node(ise, ImplicitSelectorExpr, expr); - TypeAndValue tav = type_and_value_of_expr(expr); - GB_ASSERT(tav.mode == Addressing_Constant); - - return cg_const_value(p, type, tv.value); - case_end; - - - case_ast_node(se, SelectorCallExpr, expr); - GB_ASSERT(se->modified_call); - return cg_build_call_expr(p, se->call); - case_end; - - case_ast_node(i, CallExpr, expr); - return cg_build_call_expr(p, expr); - case_end; - - case_ast_node(cl, CompoundLit, expr); - cgAddr addr = cg_build_addr_compound_lit(p, expr); - return cg_addr_load(p, addr); - case_end; - - - case_ast_node(te, TernaryIfExpr, expr); - cgValue incoming_values[2] = {}; - TB_Node *incoming_regions[2] = {}; - - TB_Node *then = cg_control_region(p, "if_then"); - TB_Node *done = cg_control_region(p, "if_done"); - TB_Node *else_ = cg_control_region(p, "if_else"); - - cg_build_cond(p, te->cond, then, else_); - tb_inst_set_control(p->func, then); - - Type *type = default_type(type_of_expr(expr)); - - incoming_values [0] = cg_emit_conv(p, cg_build_expr(p, te->x), type); - incoming_regions[0] = tb_inst_get_control(p->func); - - cg_emit_goto(p, done); - tb_inst_set_control(p->func, else_); - - incoming_values [1] = cg_emit_conv(p, cg_build_expr(p, te->y), type); - incoming_regions[1] = tb_inst_get_control(p->func); - - cg_emit_goto(p, done); - tb_inst_set_control(p->func, done); - - GB_ASSERT(incoming_values[0].kind == cgValue_Value || - incoming_values[0].kind == cgValue_Addr); - GB_ASSERT(incoming_values[0].kind == incoming_values[1].kind); - - cgValue res = {}; - res.kind = incoming_values[0].kind; - res.type = type; - TB_DataType dt = cg_data_type(type); - if (res.kind == cgValue_Addr) { - dt = TB_TYPE_PTR; - } - res.node = tb_inst_incomplete_phi(p->func, dt, done, 2); - tb_inst_add_phi_operand(p->func, res.node, incoming_regions[0], incoming_values[0].node); - tb_inst_add_phi_operand(p->func, res.node, incoming_regions[1], incoming_values[1].node); - return res; - case_end; - - case_ast_node(te, TernaryWhenExpr, expr); - TypeAndValue tav = type_and_value_of_expr(te->cond); - GB_ASSERT(tav.mode == Addressing_Constant); - GB_ASSERT(tav.value.kind == ExactValue_Bool); - if (tav.value.value_bool) { - return cg_build_expr(p, te->x); - } else { - return cg_build_expr(p, te->y); - } - case_end; - - case_ast_node(tc, TypeCast, expr); - cgValue e = cg_build_expr(p, tc->expr); - switch (tc->token.kind) { - case Token_cast: - return cg_emit_conv(p, e, type); - case Token_transmute: - return cg_emit_transmute(p, e, type); - } - GB_PANIC("Invalid AST TypeCast"); - case_end; - - case_ast_node(ac, AutoCast, expr); - cgValue value = cg_build_expr(p, ac->expr); - return cg_emit_conv(p, value, type); - case_end; - - case_ast_node(se, SliceExpr, expr); - if (is_type_slice(type_of_expr(se->expr))) { - // NOTE(bill): Quick optimization - if (se->high == nullptr && - (se->low == nullptr || cg_is_expr_constant_zero(se->low))) { - return cg_build_expr(p, se->expr); - } - } - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - case_ast_node(ie, IndexExpr, expr); - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - case_ast_node(ie, MatrixIndexExpr, expr); - return cg_addr_load(p, cg_build_addr(p, expr)); - case_end; - - case_ast_node(ue, UnaryExpr, expr); - if (ue->op.kind == Token_And) { - return cg_build_unary_and(p, expr); - } - cgValue v = cg_build_expr(p, ue->expr); - return cg_emit_unary_arith(p, ue->op.kind, v, type); - case_end; - case_ast_node(be, BinaryExpr, expr); - return cg_build_binary_expr(p, expr); - case_end; - - case_ast_node(oe, OrReturnExpr, expr); - return cg_build_or_return(p, oe->expr, tv.type); - case_end; - - case_ast_node(oe, OrElseExpr, expr); - return cg_build_or_else(p, oe->x, oe->y, tv.type); - case_end; - - case_ast_node(ta, TypeAssertion, expr); - return cg_build_type_assertion(p, expr, tv.type); - case_end; - - case_ast_node(pl, ProcLit, expr); - cgProcedure *anon = cg_procedure_generate_anonymous(p->module, expr, p); - GB_ASSERT(anon != nullptr); - GB_ASSERT(anon->symbol != nullptr); - return cg_value(tb_inst_get_symbol_address(p->func, anon->symbol), type); - case_end; - - } - TokenPos token_pos = ast_token(expr).pos; - GB_PANIC("Unexpected expression\n" - "\tAst: %.*s @ " - "%s\n", - LIT(ast_strings[expr->kind]), - token_pos_to_string(token_pos)); - - return {}; -} - - -gb_internal cgValue cg_map_data_uintptr(cgProcedure *p, cgValue value) { - GB_ASSERT(is_type_map(value.type) || are_types_identical(value.type, t_raw_map)); - cgValue data = cg_emit_struct_ev(p, value, 0); - u64 mask_value = 0; - if (build_context.ptr_size == 4) { - mask_value = 0xfffffffful & ~(MAP_CACHE_LINE_SIZE-1); - } else { - mask_value = 0xffffffffffffffffull & ~(MAP_CACHE_LINE_SIZE-1); - } - cgValue mask = cg_const_int(p, t_uintptr, mask_value); - return cg_emit_arith(p, Token_And, data, mask, t_uintptr); -} - -gb_internal cgValue cg_gen_map_key_hash(cgProcedure *p, cgValue const &map_ptr, cgValue key, cgValue *key_ptr_) { - TEMPORARY_ALLOCATOR_GUARD(); - - cgValue key_ptr = cg_address_from_load_or_generate_local(p, key); - key_ptr = cg_emit_conv(p, key_ptr, t_rawptr); - - if (key_ptr_) *key_ptr_ = key_ptr; - - Type* key_type = base_type(type_deref(map_ptr.type))->Map.key; - - cgValue hasher = cg_hasher_proc_value_for_type(p, key_type); - - Slice args = {}; - args = slice_make(temporary_allocator(), 1); - args[0] = cg_map_data_uintptr(p, cg_emit_load(p, map_ptr)); - cgValue seed = cg_emit_runtime_call(p, "map_seed_from_map_data", args); - - args = slice_make(temporary_allocator(), 2); - args[0] = key_ptr; - args[1] = seed; - return cg_emit_call(p, hasher, args); -} - -gb_internal cgValue cg_internal_dynamic_map_get_ptr(cgProcedure *p, cgValue const &map_ptr, cgValue const &key) { - TEMPORARY_ALLOCATOR_GUARD(); - - Type *map_type = base_type(type_deref(map_ptr.type)); - GB_ASSERT(map_type->kind == Type_Map); - - cgValue ptr = {}; - cgValue key_ptr = {}; - cgValue hash = cg_gen_map_key_hash(p, map_ptr, key, &key_ptr); - - auto args = slice_make(temporary_allocator(), 4); - args[0] = cg_emit_transmute(p, map_ptr, t_raw_map_ptr); - args[1] = cg_builtin_map_info(p, map_type); - args[2] = hash; - args[3] = key_ptr; - - ptr = cg_emit_runtime_call(p, "__dynamic_map_get", args); - - return cg_emit_conv(p, ptr, alloc_type_pointer(map_type->Map.value)); -} - - -gb_internal void cg_internal_dynamic_map_set(cgProcedure *p, cgValue const &map_ptr, Type *map_type, - cgValue const &map_key, cgValue const &map_value, Ast *node) { - TEMPORARY_ALLOCATOR_GUARD(); - - map_type = base_type(map_type); - GB_ASSERT(map_type->kind == Type_Map); - - cgValue key_ptr = {}; - cgValue hash = cg_gen_map_key_hash(p, map_ptr, map_key, &key_ptr); - - cgValue v = cg_emit_conv(p, map_value, map_type->Map.value); - cgValue value_ptr = cg_address_from_load_or_generate_local(p, v); - - auto args = slice_make(temporary_allocator(), 6); - args[0] = cg_emit_conv(p, map_ptr, t_raw_map_ptr); - args[1] = cg_builtin_map_info(p, map_type); - args[2] = hash; - args[3] = cg_emit_conv(p, key_ptr, t_rawptr); - args[4] = cg_emit_conv(p, value_ptr, t_rawptr); - args[5] = cg_emit_source_code_location_as_global(p, node); - cg_emit_runtime_call(p, "__dynamic_map_set", args); -} - - - - -gb_internal cgValue cg_build_addr_ptr(cgProcedure *p, Ast *expr) { - cgAddr addr = cg_build_addr(p, expr); - return cg_addr_get_ptr(p, addr); -} - -gb_internal cgAddr cg_build_addr_internal(cgProcedure *p, Ast *expr); -gb_internal cgAddr cg_build_addr(cgProcedure *p, Ast *expr) { - expr = unparen_expr(expr); - - // IMPORTANT NOTE(bill): - // Selector Call Expressions (foo->bar(...)) - // must only evaluate `foo` once as it gets transformed into - // `foo.bar(foo, ...)` - // And if `foo` is a procedure call or something more complex, storing the value - // once is a very good idea - // If a stored value is found, it must be removed from the cache - if (expr->state_flags & StateFlag_SelectorCallExpr) { - // lbAddr *pp = map_get(&p->selector_addr, expr); - // if (pp != nullptr) { - // lbAddr res = *pp; - // map_remove(&p->selector_addr, expr); - // return res; - // } - } - cgAddr addr = cg_build_addr_internal(p, expr); - if (expr->state_flags & StateFlag_SelectorCallExpr) { - // map_set(&p->selector_addr, expr, addr); - } - return addr; -} - -gb_internal cgAddr cg_build_addr_index_expr(cgProcedure *p, Ast *expr) { - ast_node(ie, IndexExpr, expr); - - Type *t = base_type(type_of_expr(ie->expr)); - - bool deref = is_type_pointer(t); - t = base_type(type_deref(t)); - if (is_type_soa_struct(t)) { - cgValue val = cg_build_addr_ptr(p, ie->expr); - if (deref) { - val = cg_emit_load(p, val); - } - - cgValue index = cg_build_expr(p, ie->index); - return cg_addr_soa_variable(val, index, ie->index); - } - - if (ie->expr->tav.mode == Addressing_SoaVariable) { - GB_PANIC("TODO(bill): #soa"); - // // SOA Structures for slices/dynamic arrays - // GB_ASSERT(is_type_pointer(type_of_expr(ie->expr))); - - // lbValue field = lb_build_expr(p, ie->expr); - // lbValue index = lb_build_expr(p, ie->index); - - - // if (!build_context.no_bounds_check) { - // // TODO HACK(bill): Clean up this hack to get the length for bounds checking - // // GB_ASSERT(LLVMIsALoadInst(field.value)); - - // // lbValue a = {}; - // // a.value = LLVMGetOperand(field.value, 0); - // // a.type = alloc_type_pointer(field.type); - - // // irInstr *b = &a->Instr; - // // GB_ASSERT(b->kind == irInstr_StructElementPtr); - // // lbValue base_struct = b->StructElementPtr.address; - - // // GB_ASSERT(is_type_soa_struct(type_deref(ir_type(base_struct)))); - // // lbValue len = ir_soa_struct_len(p, base_struct); - // // lb_emit_bounds_check(p, ast_token(ie->index), index, len); - // } - // lbValue val = lb_emit_ptr_offset(p, field, index); - // return lb_addr(val); - } - - GB_ASSERT_MSG(is_type_indexable(t), "%s %s", type_to_string(t), expr_to_string(expr)); - - if (is_type_map(t)) { - cgAddr map_addr = cg_build_addr(p, ie->expr); - cgValue key = cg_build_expr(p, ie->index); - key = cg_emit_conv(p, key, t->Map.key); - - Type *result_type = type_of_expr(expr); - cgValue map_ptr = cg_addr_get_ptr(p, map_addr); - if (is_type_pointer(type_deref(map_ptr.type))) { - map_ptr = cg_emit_load(p, map_ptr); - } - return cg_addr_map(map_ptr, key, t, result_type); - } - - switch (t->kind) { - case Type_Array: { - cgValue array = {}; - array = cg_build_addr_ptr(p, ie->expr); - if (deref) { - array = cg_emit_load(p, array); - } - cgValue index = cg_build_expr(p, ie->index); - index = cg_emit_conv(p, index, t_int); - cgValue elem = cg_emit_array_ep(p, array, index); - - auto index_tv = type_and_value_of_expr(ie->index); - if (index_tv.mode != Addressing_Constant) { - // cgValue len = cg_const_int(p->module, t_int, t->Array.count); - // cg_emit_bounds_check(p, ast_token(ie->index), index, len); - } - return cg_addr(elem); - } - - case Type_EnumeratedArray: { - cgValue array = {}; - array = cg_build_addr_ptr(p, ie->expr); - if (deref) { - array = cg_emit_load(p, array); - } - - Type *index_type = t->EnumeratedArray.index; - - auto index_tv = type_and_value_of_expr(ie->index); - - cgValue index = {}; - if (compare_exact_values(Token_NotEq, *t->EnumeratedArray.min_value, exact_value_i64(0))) { - if (index_tv.mode == Addressing_Constant) { - ExactValue idx = exact_value_sub(index_tv.value, *t->EnumeratedArray.min_value); - index = cg_const_value(p, index_type, idx); - } else { - index = cg_emit_arith(p, Token_Sub, - cg_build_expr(p, ie->index), - cg_const_value(p, index_type, *t->EnumeratedArray.min_value), - index_type); - index = cg_emit_conv(p, index, t_int); - } - } else { - index = cg_emit_conv(p, cg_build_expr(p, ie->index), t_int); - } - - cgValue elem = cg_emit_array_ep(p, array, index); - - if (index_tv.mode != Addressing_Constant) { - // cgValue len = cg_const_int(p->module, t_int, t->EnumeratedArray.count); - // cg_emit_bounds_check(p, ast_token(ie->index), index, len); - } - return cg_addr(elem); - } - - case Type_Slice: { - cgValue slice = {}; - slice = cg_build_expr(p, ie->expr); - if (deref) { - slice = cg_emit_load(p, slice); - } - cgValue elem = cg_builtin_raw_data(p, slice); - cgValue index = cg_emit_conv(p, cg_build_expr(p, ie->index), t_int); - // cgValue len = cg_builtin_len(p, slice); - // cg_emit_bounds_check(p, ast_token(ie->index), index, len); - cgValue v = cg_emit_ptr_offset(p, elem, index); - v.type = alloc_type_pointer(type_deref(v.type, true)); - return cg_addr(v); - } - - case Type_MultiPointer: { - cgValue multi_ptr = {}; - multi_ptr = cg_build_expr(p, ie->expr); - if (deref) { - multi_ptr = cg_emit_load(p, multi_ptr); - } - cgValue index = cg_build_expr(p, ie->index); - index = cg_emit_conv(p, index, t_int); - - cgValue v = cg_emit_ptr_offset(p, multi_ptr, index); - v.type = alloc_type_pointer(type_deref(v.type, true)); - return cg_addr(v); - } - - case Type_RelativeMultiPointer: { - cgValue multi_ptr = {}; - multi_ptr = cg_build_expr(p, ie->expr); - if (deref) { - multi_ptr = cg_emit_load(p, multi_ptr); - } - cgValue index = cg_build_expr(p, ie->index); - index = cg_emit_conv(p, index, t_int); - - cgValue v = cg_emit_ptr_offset(p, multi_ptr, index); - v.type = alloc_type_pointer(type_deref(v.type, true)); - return cg_addr(v); - } - - case Type_DynamicArray: { - cgValue dynamic_array = {}; - dynamic_array = cg_build_expr(p, ie->expr); - if (deref) { - dynamic_array = cg_emit_load(p, dynamic_array); - } - cgValue elem = cg_builtin_raw_data(p, dynamic_array); - cgValue index = cg_emit_conv(p, cg_build_expr(p, ie->index), t_int); - // cgValue len = cg_dynamic_array_len(p, dynamic_array); - // cg_emit_bounds_check(p, ast_token(ie->index), index, len); - cgValue v = cg_emit_ptr_offset(p, elem, index); - v.type = alloc_type_pointer(type_deref(v.type, true)); - return cg_addr(v); - } - - case Type_Matrix: { - GB_PANIC("TODO(bill): matrix"); - // lbValue matrix = {}; - // matrix = lb_build_addr_ptr(p, ie->expr); - // if (deref) { - // matrix = lb_emit_load(p, matrix); - // } - // lbValue index = lb_build_expr(p, ie->index); - // index = lb_emit_conv(p, index, t_int); - // lbValue elem = lb_emit_matrix_ep(p, matrix, lb_const_int(p->module, t_int, 0), index); - // elem = lb_emit_conv(p, elem, alloc_type_pointer(type_of_expr(expr))); - - // auto index_tv = type_and_value_of_expr(ie->index); - // if (index_tv.mode != Addressing_Constant) { - // lbValue len = lb_const_int(p->module, t_int, t->Matrix.column_count); - // lb_emit_bounds_check(p, ast_token(ie->index), index, len); - // } - // return lb_addr(elem); - } - - - case Type_Basic: { // Basic_string - cgValue str; - cgValue elem; - cgValue len; - cgValue index; - - str = cg_build_expr(p, ie->expr); - if (deref) { - str = cg_emit_load(p, str); - } - elem = cg_builtin_raw_data(p, str); - len = cg_builtin_len(p, str); - - index = cg_emit_conv(p, cg_build_expr(p, ie->index), t_int); - // cg_emit_bounds_check(p, ast_token(ie->index), index, len); - - cgValue v = cg_emit_ptr_offset(p, elem, index); - v.type = alloc_type_pointer(type_deref(v.type, true)); - return cg_addr(v); - } - } - return {}; -} - -gb_internal cgAddr cg_build_addr_internal(cgProcedure *p, Ast *expr) { - switch (expr->kind) { - case_ast_node(i, Implicit, expr); - cgAddr v = {}; - switch (i->kind) { - case Token_context: - v = cg_find_or_generate_context_ptr(p); - break; - } - - GB_ASSERT(v.addr.node != nullptr); - return v; - case_end; - - case_ast_node(i, Ident, expr); - if (is_blank_ident(expr)) { - cgAddr val = {}; - return val; - } - String name = i->token.string; - Entity *e = entity_of_node(expr); - return cg_build_addr_from_entity(p, e, expr); - case_end; - - case_ast_node(de, DerefExpr, expr); - Type *t = type_of_expr(de->expr); - if (is_type_relative_pointer(t)) { - cgAddr addr = cg_build_addr(p, de->expr); - addr.relative.deref = true; - return addr; - } else if (is_type_soa_pointer(t)) { - cgValue value = cg_build_expr(p, de->expr); - cgValue ptr = cg_emit_struct_ev(p, value, 0); - cgValue idx = cg_emit_struct_ev(p, value, 1); - return cg_addr_soa_variable(ptr, idx, nullptr); - } - cgValue addr = cg_build_expr(p, de->expr); - return cg_addr(addr); - case_end; - - case_ast_node(ie, IndexExpr, expr); - return cg_build_addr_index_expr(p, expr); - case_end; - - case_ast_node(se, SliceExpr, expr); - return cg_build_addr_slice_expr(p, expr); - case_end; - - case_ast_node(se, SelectorExpr, expr); - Ast *sel_node = unparen_expr(se->selector); - if (sel_node->kind != Ast_Ident) { - GB_PANIC("Unsupported selector expression"); - } - String selector = sel_node->Ident.token.string; - TypeAndValue tav = type_and_value_of_expr(se->expr); - - if (tav.mode == Addressing_Invalid) { - // NOTE(bill): Imports - Entity *imp = entity_of_node(se->expr); - if (imp != nullptr) { - GB_ASSERT(imp->kind == Entity_ImportName); - } - return cg_build_addr(p, unparen_expr(se->selector)); - } - - - Type *type = base_type(tav.type); - if (tav.mode == Addressing_Type) { // Addressing_Type - Selection sel = lookup_field(tav.type, selector, true); - if (sel.pseudo_field) { - GB_ASSERT(sel.entity->kind == Entity_Procedure); - return cg_addr(cg_find_value_from_entity(p->module, sel.entity)); - } - GB_PANIC("Unreachable %.*s", LIT(selector)); - } - - if (se->swizzle_count > 0) { - Type *array_type = base_type(type_deref(tav.type)); - GB_ASSERT(array_type->kind == Type_Array); - u8 swizzle_count = se->swizzle_count; - u8 swizzle_indices_raw = se->swizzle_indices; - u8 swizzle_indices[4] = {}; - for (u8 i = 0; i < swizzle_count; i++) { - u8 index = swizzle_indices_raw>>(i*2) & 3; - swizzle_indices[i] = index; - } - cgValue a = {}; - if (is_type_pointer(tav.type)) { - a = cg_build_expr(p, se->expr); - } else { - cgAddr addr = cg_build_addr(p, se->expr); - a = cg_addr_get_ptr(p, addr); - } - - GB_ASSERT(is_type_array(expr->tav.type)); - GB_PANIC("TODO(bill): cg_addr_swizzle"); - // return cg_addr_swizzle(a, expr->tav.type, swizzle_count, swizzle_indices); - } - - Selection sel = lookup_field(type, selector, false); - GB_ASSERT(sel.entity != nullptr); - if (sel.pseudo_field) { - GB_ASSERT(sel.entity->kind == Entity_Procedure); - Entity *e = entity_of_node(sel_node); - return cg_addr(cg_find_value_from_entity(p->module, e)); - } - - { - cgAddr addr = cg_build_addr(p, se->expr); - if (addr.kind == cgAddr_Map) { - cgValue v = cg_addr_load(p, addr); - cgValue a = cg_address_from_load_or_generate_local(p, v); - a = cg_emit_deep_field_gep(p, a, sel); - return cg_addr(a); - } else if (addr.kind == cgAddr_Context) { - GB_ASSERT(sel.index.count > 0); - if (addr.ctx.sel.index.count >= 0) { - sel = selection_combine(addr.ctx.sel, sel); - } - addr.ctx.sel = sel; - addr.kind = cgAddr_Context; - return addr; - } else if (addr.kind == cgAddr_SoaVariable) { - cgValue index = addr.soa.index; - i64 first_index = sel.index[0]; - Selection sub_sel = sel; - sub_sel.index.data += 1; - sub_sel.index.count -= 1; - - cgValue arr = cg_emit_struct_ep(p, addr.addr, first_index); - - Type *t = base_type(type_deref(addr.addr.type)); - GB_ASSERT(is_type_soa_struct(t)); - - // TODO(bill): bounds checking for soa variable - // if (addr.soa.index_expr != nullptr && (!cg_is_const(addr.soa.index) || t->Struct.soa_kind != StructSoa_Fixed)) { - // cgValue len = cg_soa_struct_len(p, addr.addr); - // cg_emit_bounds_check(p, ast_token(addr.soa.index_expr), addr.soa.index, len); - // } - - cgValue item = {}; - - if (t->Struct.soa_kind == StructSoa_Fixed) { - item = cg_emit_array_ep(p, arr, index); - } else { - item = cg_emit_ptr_offset(p, cg_emit_load(p, arr), index); - } - if (sub_sel.index.count > 0) { - item = cg_emit_deep_field_gep(p, item, sub_sel); - } - item.type = alloc_type_pointer(type_deref(item.type, true)); - return cg_addr(item); - } else if (addr.kind == cgAddr_Swizzle) { - GB_ASSERT(sel.index.count > 0); - // NOTE(bill): just patch the index in place - sel.index[0] = addr.swizzle.indices[sel.index[0]]; - } else if (addr.kind == cgAddr_SwizzleLarge) { - GB_ASSERT(sel.index.count > 0); - // NOTE(bill): just patch the index in place - sel.index[0] = addr.swizzle.indices[sel.index[0]]; - } - - cgValue a = cg_addr_get_ptr(p, addr); - a = cg_emit_deep_field_gep(p, a, sel); - return cg_addr(a); - } - case_end; - - case_ast_node(ce, CallExpr, expr); - cgValue res = cg_build_expr(p, expr); - switch (res.kind) { - case cgValue_Value: - return cg_addr(cg_address_from_load_or_generate_local(p, res)); - case cgValue_Addr: - return cg_addr(res); - case cgValue_Multi: - GB_PANIC("cannot address a multi-valued expression"); - break; - } - case_end; - - case_ast_node(cl, CompoundLit, expr); - return cg_build_addr_compound_lit(p, expr); - case_end; - - } - - TokenPos token_pos = ast_token(expr).pos; - GB_PANIC("Unexpected address expression\n" - "\tAst: %.*s @ " - "%s\n", - LIT(ast_strings[expr->kind]), - token_pos_to_string(token_pos)); - - return {}; -} \ No newline at end of file diff --git a/src/tilde_proc.cpp b/src/tilde_proc.cpp deleted file mode 100644 index 8e9b80144..000000000 --- a/src/tilde_proc.cpp +++ /dev/null @@ -1,1327 +0,0 @@ -gb_internal TB_FunctionPrototype *cg_procedure_type_as_prototype(cgModule *m, Type *type) { - GB_ASSERT(is_type_proc(type)); - mutex_lock(&m->proc_proto_mutex); - defer (mutex_unlock(&m->proc_proto_mutex)); - - if (type->kind == Type_Named) { - type = base_type(type); - } - TB_FunctionPrototype **found = map_get(&m->proc_proto_map, type); - if (found) { - return *found; - } - - TB_DebugType *dbg = cg_debug_type_for_proc(m, type); - TB_FunctionPrototype *proto = tb_prototype_from_dbg(m->mod, dbg); - - map_set(&m->proc_proto_map, type, proto); - return proto; -} - -gb_internal cgProcedure *cg_procedure_create(cgModule *m, Entity *entity, bool ignore_body) { - GB_ASSERT(entity != nullptr); - GB_ASSERT(entity->kind == Entity_Procedure); - if (!entity->Procedure.is_foreign) { - if ((entity->flags & EntityFlag_ProcBodyChecked) == 0) { - GB_PANIC("%.*s :: %s (was parapoly: %d %d)", LIT(entity->token.string), type_to_string(entity->type), is_type_polymorphic(entity->type, true), is_type_polymorphic(entity->type, false)); - } - } - - String link_name = cg_get_entity_name(m, entity); - - cgProcedure *p = nullptr; - { - StringHashKey key = string_hash_string(link_name); - cgValue *found = string_map_get(&m->members, key); - if (found) { - cg_add_entity(m, entity, *found); - rw_mutex_lock(&m->values_mutex); - p = string_map_must_get(&m->procedures, key); - rw_mutex_unlock(&m->values_mutex); - if (!ignore_body && p->func != nullptr) { - return nullptr; - } - } - } - - if (p == nullptr) { - p = gb_alloc_item(permanent_allocator(), cgProcedure); - } - - p->module = m; - p->entity = entity; - p->name = link_name; - - DeclInfo *decl = entity->decl_info; - - ast_node(pl, ProcLit, decl->proc_lit); - Type *pt = base_type(entity->type); - GB_ASSERT(pt->kind == Type_Proc); - - p->type = entity->type; - p->type_expr = decl->type_expr; - p->body = pl->body; - p->inlining = pl->inlining; - p->is_foreign = entity->Procedure.is_foreign; - p->is_export = entity->Procedure.is_export; - p->is_entry_point = false; - p->split_returns_index = -1; - - gbAllocator a = heap_allocator(); - p->children.allocator = a; - - p->defer_stack.allocator = a; - p->scope_stack.allocator = a; - p->context_stack.allocator = a; - - p->control_regions.allocator = a; - p->branch_regions.allocator = a; - - map_init(&p->variable_map); - map_init(&p->soa_values_map); - - TB_Linkage linkage = TB_LINKAGE_PRIVATE; - if (p->is_export) { - linkage = TB_LINKAGE_PUBLIC; - } else if (p->is_foreign || ignore_body) { - if (ignore_body) { - linkage = TB_LINKAGE_PUBLIC; - } - p->symbol = cast(TB_Symbol *)tb_extern_create(m->mod, link_name.len, cast(char const *)link_name.text, TB_EXTERNAL_SO_LOCAL); - } - if (p->name == "main") { - // TODO(bill): figure out when this should be public or not - linkage = TB_LINKAGE_PUBLIC; - } - - if (p->symbol == nullptr) { - p->func = tb_function_create(m->mod, link_name.len, cast(char const *)link_name.text, linkage); - - p->debug_type = cg_debug_type_for_proc(m, p->type); - p->proto = tb_prototype_from_dbg(m->mod, p->debug_type); - - p->symbol = cast(TB_Symbol *)p->func; - } - - p->value = cg_value(p->symbol, p->type); - - cg_add_symbol(m, entity, p->symbol); - cg_add_entity(m, entity, p->value); - cg_add_member(m, p->name, p->value); - cg_add_procedure_value(m, p); - - - return p; -} - -gb_internal cgProcedure *cg_procedure_create_dummy(cgModule *m, String const &link_name, Type *type) { - auto *prev_found = string_map_get(&m->members, link_name); - GB_ASSERT_MSG(prev_found == nullptr, "failed to create dummy procedure for: %.*s", LIT(link_name)); - - cgProcedure *p = gb_alloc_item(permanent_allocator(), cgProcedure); - - p->module = m; - p->name = link_name; - - p->type = type; - p->type_expr = nullptr; - p->body = nullptr; - p->tags = 0; - p->inlining = ProcInlining_none; - p->is_foreign = false; - p->is_export = false; - p->is_entry_point = false; - p->split_returns_index = -1; - - gbAllocator a = heap_allocator(); - p->children.allocator = a; - - p->defer_stack.allocator = a; - p->scope_stack.allocator = a; - p->context_stack.allocator = a; - - p->control_regions.allocator = a; - p->branch_regions.allocator = a; - - map_init(&p->variable_map); - map_init(&p->soa_values_map); - - TB_Linkage linkage = TB_LINKAGE_PRIVATE; - - p->func = tb_function_create(m->mod, link_name.len, cast(char const *)link_name.text, linkage); - - p->debug_type = cg_debug_type_for_proc(m, p->type); - p->proto = tb_prototype_from_dbg(m->mod, p->debug_type); - - p->symbol = cast(TB_Symbol *)p->func; - - cgValue proc_value = cg_value(p->symbol, p->type); - cg_add_member(m, p->name, proc_value); - cg_add_procedure_value(m, p); - - return p; -} - -gb_internal cgProcedure *cg_procedure_generate_anonymous(cgModule *m, Ast *expr, cgProcedure *parent) { - expr = unparen_expr(expr); - ast_node(pl, ProcLit, expr); - - mutex_lock(&m->anonymous_proc_lits_mutex); - defer (mutex_unlock(&m->anonymous_proc_lits_mutex)); - - cgProcedure **found = map_get(&m->anonymous_proc_lits_map, expr); - if (found) { - return *found; - } - - TokenPos pos = ast_token(expr).pos; - - // NOTE(bill): Generate a new name - // parent$count - - String prefix_name = str_lit("proc_lit"); - if (parent) { - prefix_name = parent->name; - } - - isize name_len = prefix_name.len + 6 + 11; - char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - - static std::atomic name_id; - name_len = gb_snprintf(name_text, name_len, "%.*s$anon-%d", LIT(prefix_name), 1+name_id.fetch_add(1)); - String name = make_string((u8 *)name_text, name_len-1); - - Type *type = type_of_expr(expr); - - GB_ASSERT(pl->decl->entity == nullptr); - Token token = {}; - token.pos = ast_token(expr).pos; - token.kind = Token_Ident; - token.string = name; - Entity *e = alloc_entity_procedure(nullptr, token, type, pl->tags); - e->file = expr->file(); - - // NOTE(bill): this is to prevent a race condition since these procedure literals can be created anywhere at any time - e->decl_info = pl->decl; - pl->decl->entity = e; - e->flags |= EntityFlag_ProcBodyChecked; - - cgProcedure *p = cg_procedure_create(m, e); - - map_set(&m->anonymous_proc_lits_map, expr, p); - - if (parent != nullptr) { - array_add(&parent->children, p); - } - - cg_add_procedure_to_queue(p); - return p; - -} - -gb_internal void cg_procedure_begin(cgProcedure *p) { - if (p == nullptr || p->func == nullptr) { - return; - } - - TB_ModuleSectionHandle section = tb_module_get_text(p->module->mod); - tb_function_set_prototype(p->func, section, p->proto, cg_arena()); - - if (p->body == nullptr) { - return; - } - - - DeclInfo *decl = decl_info_of_entity(p->entity); - if (decl != nullptr) { - for_array(i, decl->labels) { - BlockLabel bl = decl->labels[i]; - cgBranchRegions bb = {bl.label, nullptr, nullptr}; - array_add(&p->branch_regions, bb); - } - } - - GB_ASSERT(p->type->kind == Type_Proc); - TypeProc *pt = &p->type->Proc; - bool is_odin_like_cc = is_calling_convention_odin(pt->calling_convention); - int param_index = 0; - int param_count = p->proto->param_count; - - if (pt->results) { - Type *result_type = nullptr; - if (is_odin_like_cc) { - result_type = pt->results->Tuple.variables[pt->results->Tuple.variables.count-1]->type; - } else { - result_type = pt->results; - } - TB_DebugType *debug_type = cg_debug_type(p->module, result_type); - TB_PassingRule rule = tb_get_passing_rule_from_dbg(p->module->mod, debug_type, true); - if (rule == TB_PASSING_INDIRECT) { - p->return_by_ptr = true; - param_index++; - } - } - - if (pt->params != nullptr) for (Entity *e : pt->params->Tuple.variables) { - if (e->kind != Entity_Variable) { - continue; - } - - GB_ASSERT_MSG(param_index < param_count, "%d < %d %.*s :: %s", param_index, param_count, LIT(p->name), type_to_string(p->type)); - - TB_Node *param_ptr = nullptr; - - TB_CharUnits size = cast(TB_CharUnits)type_size_of(e->type); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(e->type); - TB_DebugType *debug_type = cg_debug_type(p->module, e->type); - TB_PassingRule rule = tb_get_passing_rule_from_dbg(p->module->mod, debug_type, false); - switch (rule) { - case TB_PASSING_DIRECT: { - TB_Node *param = tb_inst_param(p->func, param_index++); - param_ptr = tb_inst_local(p->func, size, align); - tb_inst_store(p->func, param->dt, param_ptr, param, align, false); - } break; - case TB_PASSING_INDIRECT: - // TODO(bill): does this need a copy? for non-odin calling convention stuff? - param_ptr = tb_inst_param(p->func, param_index++); - break; - case TB_PASSING_IGNORE: - continue; - } - - GB_ASSERT(param_ptr->dt.type == TB_PTR); - - cgValue local = cg_value(param_ptr, alloc_type_pointer(e->type)); - - if (e != nullptr && e->token.string.len > 0 && e->token.string != "_") { - // NOTE(bill): for debugging purposes only - String name = e->token.string; - TB_DebugType *param_debug_type = debug_type; - TB_Node * param_ptr_to_use = param_ptr; - if (rule == TB_PASSING_INDIRECT) { - // HACK TODO(bill): this is just to get the debug information - TB_CharUnits ptr_size = cast(TB_CharUnits)build_context.ptr_size; - TB_Node *dummy_param = tb_inst_local(p->func, ptr_size, ptr_size); - tb_inst_store(p->func, TB_TYPE_PTR, dummy_param, param_ptr, ptr_size, false); - param_ptr_to_use = dummy_param; - param_debug_type = tb_debug_create_ptr(p->module->mod, param_debug_type); - } - tb_function_attrib_variable( - p->func, - param_ptr_to_use, - nullptr, // parent - name.len, cast(char const *)name.text, - param_debug_type - ); - } - cgAddr addr = cg_addr(local); - if (e) { - map_set(&p->variable_map, e, addr); - } - } - - if (is_odin_like_cc) { - p->split_returns_index = param_index; - } - - if (pt->calling_convention == ProcCC_Odin) { - // NOTE(bill): Push context on to stack from implicit parameter - - String name = str_lit("__.context_ptr"); - - Entity *e = alloc_entity_param(nullptr, make_token_ident(name), t_context_ptr, false, false); - e->flags |= EntityFlag_NoAlias; - - TB_Node *param_ptr = tb_inst_param(p->func, param_count-1); - cgValue local = cg_value(param_ptr, t_context_ptr); - cgAddr addr = cg_addr(local); - map_set(&p->variable_map, e, addr); - - - cgContextData *cd = array_add_and_get(&p->context_stack); - cd->ctx = addr; - cd->scope_index = -1; - cd->uses = +1; // make sure it has been used already - } - - if (pt->has_named_results) { - auto const &results = pt->results->Tuple.variables; - for_array(i, results) { - Entity *e = results[i]; - GB_ASSERT(e->kind == Entity_Variable); - - if (e->token.string == "") { - continue; - } - GB_ASSERT(!is_blank_ident(e->token)); - - cgAddr res = cg_add_local(p, e->type, e, true); - - if (e->Variable.param_value.kind != ParameterValue_Invalid) { - cgValue c = cg_handle_param_value(p, e->type, e->Variable.param_value, e->token.pos); - cg_addr_store(p, res, c); - } - } - } -} - - -gb_internal WORKER_TASK_PROC(cg_procedure_compile_worker_proc) { - cgProcedure *p = cast(cgProcedure *)data; - - TB_Passes *opt = tb_pass_enter(p->func, cg_arena()); - defer (tb_pass_exit(opt)); - - // optimization passes - if (false) { - tb_pass_peephole(opt, TB_PEEPHOLE_ALL); - tb_pass_mem2reg(opt); - tb_pass_peephole(opt, TB_PEEPHOLE_ALL); - } - - bool emit_asm = false; - if ( - // string_starts_with(p->name, str_lit("runtime@_windows_default_alloc_or_resize")) || - false - ) { - emit_asm = true; - } - - // emit ir - if ( - // string_starts_with(p->name, str_lit("main@")) || - false - ) { // IR Printing - TB_Arena *arena = cg_arena(); - TB_Passes *passes = tb_pass_enter(p->func, arena); - defer (tb_pass_exit(passes)); - - tb_pass_print(passes); - fprintf(stdout, "\n"); - fflush(stdout); - } - if (false) { // GraphViz printing - tb_pass_print_dot(opt, tb_default_print_callback, stdout); - } - - // compile - TB_FunctionOutput *output = tb_pass_codegen(opt, emit_asm); - if (emit_asm) { - tb_output_print_asm(output, stdout); - fprintf(stdout, "\n"); - fflush(stdout); - } - - return 0; -} - -gb_internal void cg_procedure_end(cgProcedure *p) { - if (p == nullptr || p->func == nullptr) { - return; - } - if (tb_inst_get_control(p->func)) { - if (p->type->Proc.result_count == 0) { - tb_inst_ret(p->func, 0, nullptr); - } else { - tb_inst_unreachable(p->func); - } - } - - if (p->module->do_threading) { - thread_pool_add_task(cg_procedure_compile_worker_proc, p); - } else { - cg_procedure_compile_worker_proc(p); - } -} - -gb_internal void cg_procedure_generate(cgProcedure *p) { - if (p->body == nullptr) { - return; - } - - cg_procedure_begin(p); - cg_build_stmt(p, p->body); - cg_procedure_end(p); -} - -gb_internal void cg_build_nested_proc(cgProcedure *p, AstProcLit *pd, Entity *e) { - GB_ASSERT(pd->body != nullptr); - cgModule *m = p->module; - auto *min_dep_set = &m->info->minimum_dependency_set; - - if (ptr_set_exists(min_dep_set, e) == false) { - // NOTE(bill): Nothing depends upon it so doesn't need to be built - return; - } - - // NOTE(bill): Generate a new name - // parent.name-guid - String original_name = e->token.string; - String pd_name = original_name; - if (e->Procedure.link_name.len > 0) { - pd_name = e->Procedure.link_name; - } - - - isize name_len = p->name.len + 1 + pd_name.len + 1 + 10 + 1; - char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - - i32 guid = cast(i32)p->children.count; - name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d", LIT(p->name), LIT(pd_name), guid); - String name = make_string(cast(u8 *)name_text, name_len-1); - - e->Procedure.link_name = name; - - cgProcedure *nested_proc = cg_procedure_create(p->module, e); - e->cg_procedure = nested_proc; - - cgValue value = nested_proc->value; - - cg_add_entity(m, e, value); - array_add(&p->children, nested_proc); - cg_add_procedure_to_queue(nested_proc); -} - - - - - -gb_internal cgValue cg_find_procedure_value_from_entity(cgModule *m, Entity *e) { - GB_ASSERT(is_type_proc(e->type)); - e = strip_entity_wrapping(e); - GB_ASSERT(e != nullptr); - GB_ASSERT(e->kind == Entity_Procedure); - - cgValue *found = nullptr; - rw_mutex_shared_lock(&m->values_mutex); - found = map_get(&m->values, e); - rw_mutex_shared_unlock(&m->values_mutex); - if (found) { - GB_ASSERT(found->node != nullptr); - return *found; - } - - GB_PANIC("Error in: %s, missing procedure %.*s\n", token_pos_to_string(e->token.pos), LIT(e->token.string)); - return {}; -} - - - -gb_internal cgValue cg_build_call_expr_internal(cgProcedure *p, Ast *expr); -gb_internal cgValue cg_build_call_expr(cgProcedure *p, Ast *expr) { - expr = unparen_expr(expr); - ast_node(ce, CallExpr, expr); - - cgValue res = cg_build_call_expr_internal(p, expr); - - if (ce->optional_ok_one) { // TODO(bill): Minor hack for #optional_ok procedures - GB_ASSERT(res.kind == cgValue_Multi); - GB_ASSERT(res.multi->values.count == 2); - return res.multi->values[0]; - } - return res; -} - -gb_internal cgValue cg_emit_call(cgProcedure * p, cgValue value, Slice const &args) { - if (value.kind == cgValue_Symbol) { - value = cg_value(tb_inst_get_symbol_address(p->func, value.symbol), value.type); - } - GB_ASSERT(value.kind == cgValue_Value); - TEMPORARY_ALLOCATOR_GUARD(); - - TB_Module *m = p->module->mod; - - - Type *type = base_type(value.type); - GB_ASSERT(type->kind == Type_Proc); - TypeProc *pt = &type->Proc; - gb_unused(pt); - - TB_FunctionPrototype *proto = cg_procedure_type_as_prototype(p->module, type); - TB_Node *target = value.node; - auto params = slice_make(temporary_allocator(), proto->param_count); - - - GB_ASSERT(build_context.metrics.os == TargetOs_windows); - // TODO(bill): Support more than Win64 ABI - - bool is_odin_like_cc = is_calling_convention_odin(pt->calling_convention); - - bool return_is_indirect = false; - - Slice result_entities = {}; - Slice param_entities = {}; - if (pt->results) { - result_entities = pt->results->Tuple.variables; - } - if (pt->params) { - param_entities = pt->params->Tuple.variables; - } - - isize param_index = 0; - if (pt->result_count != 0) { - Type *return_type = nullptr; - if (is_odin_like_cc) { - return_type = result_entities[result_entities.count-1]->type; - } else { - return_type = pt->results; - } - TB_DebugType *dbg = cg_debug_type(p->module, return_type); - TB_PassingRule rule = tb_get_passing_rule_from_dbg(m, dbg, true); - if (rule == TB_PASSING_INDIRECT) { - return_is_indirect = true; - TB_CharUnits size = cast(TB_CharUnits)type_size_of(return_type); - TB_CharUnits align = cast(TB_CharUnits)gb_max(type_align_of(return_type), 16); - TB_Node *local = tb_inst_local(p->func, size, align); - tb_inst_memzero(p->func, local, tb_inst_uint(p->func, TB_TYPE_INT, size), align); - params[param_index++] = local; - } - } - isize param_entity_index = 0; - for_array(i, args) { - Entity *param_entity = nullptr; - do { - param_entity = param_entities[param_entity_index++]; - } while (param_entity->kind != Entity_Variable); - Type *param_type = param_entity->type; - cgValue arg = args[i]; - arg = cg_emit_conv(p, arg, param_type); - arg = cg_flatten_value(p, arg); - - TB_Node *param = nullptr; - - TB_DebugType *dbg = cg_debug_type(p->module, param_type); - TB_PassingRule rule = tb_get_passing_rule_from_dbg(m, dbg, false); - switch (rule) { - case TB_PASSING_DIRECT: - GB_ASSERT(arg.kind == cgValue_Value); - param = arg.node; - break; - case TB_PASSING_INDIRECT: - { - cgValue arg_ptr = {}; - // indirect - if (is_odin_like_cc) { - arg_ptr = cg_address_from_load_or_generate_local(p, arg); - } else { - arg_ptr = cg_copy_value_to_ptr(p, arg, param_type, 16); - } - GB_ASSERT(arg_ptr.kind == cgValue_Value); - param = arg_ptr.node; - } - break; - case TB_PASSING_IGNORE: - continue; - } - - params[param_index++] = param; - } - - // Split returns - isize split_offset = -1; - if (is_odin_like_cc) { - split_offset = param_index; - for (isize i = 0; i < pt->result_count-1; i++) { - Type *result = result_entities[i]->type; - TB_CharUnits size = cast(TB_CharUnits)type_size_of(result); - TB_CharUnits align = cast(TB_CharUnits)gb_max(type_align_of(result), 16); - TB_Node *local = tb_inst_local(p->func, size, align); - // TODO(bill): Should this need to be zeroed any way? - tb_inst_memzero(p->func, local, tb_inst_uint(p->func, TB_TYPE_INT, size), align); - params[param_index++] = local; - } - } - - if (pt->calling_convention == ProcCC_Odin) { - cgValue ctx_ptr = cg_find_or_generate_context_ptr(p).addr; - GB_ASSERT(ctx_ptr.kind == cgValue_Value); - params[param_index++] = ctx_ptr.node; - } - GB_ASSERT_MSG(param_index == params.count, "%td vs %td\n %s %u %u", - param_index, params.count, - type_to_string(type), - proto->return_count, - proto->param_count); - - for (TB_Node *param : params) { - GB_ASSERT(param != nullptr); - } - - GB_ASSERT(target != nullptr); - TB_MultiOutput multi_output = tb_inst_call(p->func, proto, target, params.count, params.data); - gb_unused(multi_output); - - switch (pt->result_count) { - case 0: - return {}; - case 1: - if (return_is_indirect) { - return cg_lvalue_addr(params[0], pt->results->Tuple.variables[0]->type); - } else { - GB_ASSERT(multi_output.count == 1); - TB_Node *node = multi_output.single; - return cg_value(node, pt->results->Tuple.variables[0]->type); - } - } - - cgValueMulti *multi = gb_alloc_item(permanent_allocator(), cgValueMulti); - multi->values = slice_make(permanent_allocator(), pt->result_count); - - if (is_odin_like_cc) { - GB_ASSERT(split_offset >= 0); - for (isize i = 0; i < pt->result_count-1; i++) { - multi->values[i] = cg_lvalue_addr(params[split_offset+i], result_entities[i]->type); - } - - Type *end_type = result_entities[pt->result_count-1]->type; - if (return_is_indirect) { - multi->values[pt->result_count-1] = cg_lvalue_addr(params[0], end_type); - } else { - GB_ASSERT(multi_output.count == 1); - TB_DataType dt = cg_data_type(end_type); - TB_Node *res = multi_output.single; - if (res->dt.raw != dt.raw) { - // struct-like returns passed in registers - TB_CharUnits size = cast(TB_CharUnits)type_size_of(end_type); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(end_type); - TB_Node *addr = tb_inst_local(p->func, size, align); - tb_inst_store(p->func, res->dt, addr, res, align, false); - multi->values[pt->result_count-1] = cg_lvalue_addr(addr, end_type); - } else { - multi->values[pt->result_count-1] = cg_value(res, end_type); - } - } - } else { - TB_Node *the_tuple = {}; - if (return_is_indirect) { - the_tuple = params[0]; - } else { - GB_ASSERT(multi_output.count == 1); - TB_Node *res = multi_output.single; - - // struct-like returns passed in registers - TB_CharUnits size = cast(TB_CharUnits)type_size_of(pt->results); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(pt->results); - the_tuple = tb_inst_local(p->func, size, align); - tb_inst_store(p->func, res->dt, the_tuple, res, align, false); - } - for (isize i = 0; i < pt->result_count; i++) { - i64 offset = type_offset_of(pt->results, i, nullptr); - TB_Node *ptr = tb_inst_member_access(p->func, the_tuple, offset); - multi->values[i] = cg_lvalue_addr(ptr, result_entities[i]->type); - } - } - - return cg_value_multi(multi, pt->results); -} - -gb_internal cgValue cg_emit_runtime_call(cgProcedure *p, char const *name, Slice const &args) { - AstPackage *pkg = p->module->info->runtime_package; - Entity *e = scope_lookup_current(pkg->scope, make_string_c(name)); - cgValue value = cg_find_procedure_value_from_entity(p->module, e); - return cg_emit_call(p, value, args); -} - -gb_internal cgValue cg_handle_param_value(cgProcedure *p, Type *parameter_type, ParameterValue const ¶m_value, TokenPos const &pos) { - switch (param_value.kind) { - case ParameterValue_Constant: - if (is_type_constant_type(parameter_type)) { - auto res = cg_const_value(p, parameter_type, param_value.value); - return res; - } else { - ExactValue ev = param_value.value; - cgValue arg = {}; - Type *type = type_of_expr(param_value.original_ast_expr); - if (type != nullptr) { - arg = cg_const_value(p, type, ev); - } else { - arg = cg_const_value(p, parameter_type, param_value.value); - } - return cg_emit_conv(p, arg, parameter_type); - } - - case ParameterValue_Nil: - return cg_const_nil(p, parameter_type); - case ParameterValue_Location: - { - String proc_name = {}; - if (p->entity != nullptr) { - proc_name = p->entity->token.string; - } - return cg_emit_source_code_location_as_global(p, proc_name, pos); - } - case ParameterValue_Value: - return cg_build_expr(p, param_value.ast_value); - } - return cg_const_nil(p, parameter_type); -} - -gb_internal cgValue cg_build_call_expr_internal(cgProcedure *p, Ast *expr) { - ast_node(ce, CallExpr, expr); - - TypeAndValue tv = type_and_value_of_expr(expr); - - TypeAndValue proc_tv = type_and_value_of_expr(ce->proc); - AddressingMode proc_mode = proc_tv.mode; - if (proc_mode == Addressing_Type) { - GB_ASSERT(ce->args.count == 1); - cgValue x = cg_build_expr(p, ce->args[0]); - return cg_emit_conv(p, x, tv.type); - } - - Ast *proc_expr = unparen_expr(ce->proc); - if (proc_mode == Addressing_Builtin) { - Entity *e = entity_of_node(proc_expr); - BuiltinProcId id = BuiltinProc_Invalid; - if (e != nullptr) { - id = cast(BuiltinProcId)e->Builtin.id; - } else { - id = BuiltinProc_DIRECTIVE; - } - if (id == BuiltinProc___entry_point) { - if (p->module->info->entry_point) { - cgValue entry_point = cg_find_procedure_value_from_entity(p->module, p->module->info->entry_point); - GB_ASSERT(entry_point.node != nullptr); - cg_emit_call(p, entry_point, {}); - } - return {}; - } - - return cg_build_builtin(p, id, expr); - } - - // NOTE(bill): Regular call - cgValue value = {}; - - Entity *proc_entity = entity_of_node(proc_expr); - if (proc_entity != nullptr) { - if (proc_entity->flags & EntityFlag_Disabled) { - GB_ASSERT(tv.type == nullptr); - return {}; - } - } - - if (proc_expr->tav.mode == Addressing_Constant) { - ExactValue v = proc_expr->tav.value; - switch (v.kind) { - case ExactValue_Integer: - { - u64 u = big_int_to_u64(&v.value_integer); - cgValue x = cg_value(tb_inst_uint(p->func, TB_TYPE_PTR, u), t_rawptr); - value = cg_emit_conv(p, x, proc_expr->tav.type); - break; - } - case ExactValue_Pointer: - { - u64 u = cast(u64)v.value_pointer; - cgValue x = cg_value(tb_inst_uint(p->func, TB_TYPE_PTR, u), t_rawptr); - value = cg_emit_conv(p, x, proc_expr->tav.type); - break; - } - } - } - - if (value.node == nullptr) { - value = cg_build_expr(p, proc_expr); - } - if (value.kind == cgValue_Addr) { - value = cg_emit_load(p, value); - } - GB_ASSERT(value.kind == cgValue_Value); - GB_ASSERT(value.node != nullptr); - GB_ASSERT(is_type_proc(value.type)); - - TEMPORARY_ALLOCATOR_GUARD(); - - Type *proc_type_ = base_type(value.type); - GB_ASSERT(proc_type_->kind == Type_Proc); - TypeProc *pt = &proc_type_->Proc; - - GB_ASSERT(ce->split_args != nullptr); - - isize internal_param_count = 0; - if (pt->params) for (Entity *e : pt->params->Tuple.variables) { - if (e->kind == Entity_Variable) { - internal_param_count += 1; - } - } - GB_ASSERT(internal_param_count <= pt->param_count); - - auto args = array_make(temporary_allocator(), 0, internal_param_count); - - bool vari_expand = (ce->ellipsis.pos.line != 0); - bool is_c_vararg = pt->c_vararg; - - for_array(i, ce->split_args->positional) { - Entity *e = pt->params->Tuple.variables[i]; - if (e->kind == Entity_TypeName) { - continue; - } else if (e->kind == Entity_Constant) { - continue; - } - - GB_ASSERT(e->kind == Entity_Variable); - if (pt->variadic && pt->variadic_index == i) { - cgValue variadic_args = cg_const_nil(p, e->type); - auto variadic = slice(ce->split_args->positional, pt->variadic_index, ce->split_args->positional.count); - if (variadic.count != 0) { - // variadic call argument generation - Type *slice_type = e->type; - GB_ASSERT(slice_type->kind == Type_Slice); - - if (is_c_vararg) { - GB_ASSERT(!vari_expand); - - Type *elem_type = slice_type->Slice.elem; - - for (Ast *var_arg : variadic) { - cgValue arg = cg_build_expr(p, var_arg); - if (is_type_any(elem_type)) { - array_add(&args, cg_emit_conv(p, arg, default_type(arg.type))); - } else { - array_add(&args, cg_emit_conv(p, arg, elem_type)); - } - } - break; - } else if (vari_expand) { - GB_ASSERT(variadic.count == 1); - variadic_args = cg_build_expr(p, variadic[0]); - variadic_args = cg_emit_conv(p, variadic_args, slice_type); - } else { - Type *elem_type = slice_type->Slice.elem; - - auto var_args = array_make(temporary_allocator(), 0, variadic.count); - for (Ast *var_arg : variadic) { - cgValue v = cg_build_expr(p, var_arg); - cg_append_tuple_values(p, &var_args, v); - } - isize slice_len = var_args.count; - if (slice_len > 0) { - cgAddr slice = cg_add_local(p, slice_type, nullptr, true); - cgAddr base_array = cg_add_local(p, alloc_type_array(elem_type, slice_len), nullptr, true); - - for (isize i = 0; i < var_args.count; i++) { - cgValue addr = cg_emit_array_epi(p, base_array.addr, cast(i32)i); - cgValue var_arg = var_args[i]; - var_arg = cg_emit_conv(p, var_arg, elem_type); - cg_emit_store(p, addr, var_arg); - } - - cgValue base_elem = cg_emit_array_epi(p, base_array.addr, 0); - cgValue len = cg_const_int(p, t_int, slice_len); - cg_fill_slice(p, slice, base_elem, len); - - variadic_args = cg_addr_load(p, slice); - } - } - } - array_add(&args, variadic_args); - - break; - } else { - cgValue value = cg_build_expr(p, ce->split_args->positional[i]); - cg_append_tuple_values(p, &args, value); - } - } - - if (!is_c_vararg) { - array_resize(&args, internal_param_count); - } - - for (Ast *arg : ce->split_args->named) { - ast_node(fv, FieldValue, arg); - GB_ASSERT(fv->field->kind == Ast_Ident); - String name = fv->field->Ident.token.string; - gb_unused(name); - isize param_index = lookup_procedure_parameter(pt, name); - GB_ASSERT(param_index >= 0); - - cgValue value = cg_build_expr(p, fv->value); - GB_ASSERT(!is_type_tuple(value.type)); - args[param_index] = value; - } - - TokenPos pos = ast_token(ce->proc).pos; - - - if (pt->params != nullptr) { - isize min_count = internal_param_count; - if (is_c_vararg) { - min_count -= 1; - } - GB_ASSERT_MSG(args.count >= min_count, "in %.*s", LIT(p->name)); - isize arg_index = 0; - for_array(param_index, pt->params->Tuple.variables) { - Entity *e = pt->params->Tuple.variables[param_index]; - if (e->kind == Entity_TypeName) { - continue; - } else if (e->kind == Entity_Constant) { - continue; - } - GB_ASSERT(e->kind == Entity_Variable); - - if (pt->variadic && param_index == pt->variadic_index) { - if (!is_c_vararg && args[arg_index].node == nullptr) { - args[arg_index++] = cg_const_nil(p, e->type); - continue; - } - } - - cgValue arg = args[arg_index]; - if (arg.node == nullptr) { - GB_ASSERT(e->kind == Entity_Variable); - args[arg_index++] = cg_handle_param_value(p, e->type, e->Variable.param_value, pos); - } else { - args[arg_index++] = cg_emit_conv(p, arg, e->type); - } - } - } - - isize final_count = is_c_vararg ? args.count : internal_param_count; - auto call_args = slice(args, 0, final_count); - - return cg_emit_call(p, value, call_args); -} - - - -gb_internal cgValue cg_hasher_proc_value_for_type(cgProcedure *p, Type *type) { - cgProcedure *found = cg_hasher_proc_for_type(p->module, type); - return cg_value(tb_inst_get_symbol_address(p->func, found->symbol), found->type); -} - -gb_internal cgValue cg_equal_proc_value_for_type(cgProcedure *p, Type *type) { - cgProcedure *found = cg_equal_proc_for_type(p->module, type); - return cg_value(tb_inst_get_symbol_address(p->func, found->symbol), found->type); -} - - - -gb_internal cgProcedure *cg_equal_proc_for_type(cgModule *m, Type *type) { - type = base_type(type); - GB_ASSERT(is_type_comparable(type)); - - mutex_lock(&m->generated_procs_mutex); - defer (mutex_unlock(&m->generated_procs_mutex)); - - cgProcedure **found = map_get(&m->equal_procs, type); - if (found) { - return *found; - } - - static std::atomic proc_index; - - char buf[32] = {}; - isize n = gb_snprintf(buf, 32, "__$equal%u", 1+proc_index.fetch_add(1)); - char *str = gb_alloc_str_len(permanent_allocator(), buf, n-1); - String proc_name = make_string_c(str); - - - cgProcedure *p = cg_procedure_create_dummy(m, proc_name, t_equal_proc); - map_set(&m->equal_procs, type, p); - p->split_returns_index = 2; - - cg_procedure_begin(p); - - TB_Node *x = tb_inst_param(p->func, 0); - TB_Node *y = tb_inst_param(p->func, 1); - GB_ASSERT(x->dt.type == TB_PTR); - GB_ASSERT(y->dt.type == TB_PTR); - - TB_DataType ret_dt = TB_PROTOTYPE_RETURNS(p->proto)->dt; - - TB_Node *node_true = tb_inst_uint(p->func, ret_dt, true); - TB_Node *node_false = tb_inst_uint(p->func, ret_dt, false); - - TB_Node *same_ptr_region = cg_control_region(p, "same_ptr"); - TB_Node *diff_ptr_region = cg_control_region(p, "diff_ptr"); - - TB_Node *is_same_ptr = tb_inst_cmp_eq(p->func, x, y); - tb_inst_if(p->func, is_same_ptr, same_ptr_region, diff_ptr_region); - - tb_inst_set_control(p->func, same_ptr_region); - tb_inst_ret(p->func, 1, &node_true); - - tb_inst_set_control(p->func, diff_ptr_region); - - Type *pt = alloc_type_pointer(type); - cgValue lhs = cg_value(x, pt); - cgValue rhs = cg_value(y, pt); - - if (type->kind == Type_Struct) { - type_set_offsets(type); - - TB_Node *false_region = cg_control_region(p, "bfalse"); - cgValue res = cg_const_bool(p, t_bool, true); - - for_array(i, type->Struct.fields) { - TB_Node *next_region = cg_control_region(p, "btrue"); - - cgValue plhs = cg_emit_struct_ep(p, lhs, i); - cgValue prhs = cg_emit_struct_ep(p, rhs, i); - cgValue left = cg_emit_load(p, plhs); - cgValue right = cg_emit_load(p, prhs); - cgValue ok = cg_emit_comp(p, Token_CmpEq, left, right); - - cg_emit_if(p, ok, next_region, false_region); - - cg_emit_goto(p, next_region); - tb_inst_set_control(p->func, next_region); - } - - tb_inst_ret(p->func, 1, &node_true); - tb_inst_set_control(p->func, false_region); - tb_inst_ret(p->func, 1, &node_false); - - } else if (type->kind == Type_Union) { - if (type_size_of(type) == 0) { - tb_inst_ret(p->func, 1, &node_true); - } else if (is_type_union_maybe_pointer(type)) { - Type *v = type->Union.variants[0]; - Type *pv = alloc_type_pointer(v); - - cgValue left = cg_emit_load(p, cg_emit_conv(p, lhs, pv)); - cgValue right = cg_emit_load(p, cg_emit_conv(p, rhs, pv)); - cgValue ok = cg_emit_comp(p, Token_CmpEq, left, right); - cg_build_return_stmt_internal_single(p, ok); - } else { - TB_Node *false_region = cg_control_region(p, "bfalse"); - TB_Node *switch_region = cg_control_region(p, "bswitch"); - - cgValue lhs_tag = cg_emit_load(p, cg_emit_union_tag_ptr(p, lhs)); - cgValue rhs_tag = cg_emit_load(p, cg_emit_union_tag_ptr(p, rhs)); - - cgValue tag_eq = cg_emit_comp(p, Token_CmpEq, lhs_tag, rhs_tag); - cg_emit_if(p, tag_eq, switch_region, false_region); - - size_t entry_count = type->Union.variants.count; - if (type->Union.kind != UnionType_no_nil) { - entry_count += 1; - } - - size_t entry_offset = 0; - - TB_SwitchEntry *keys = gb_alloc_array(temporary_allocator(), TB_SwitchEntry, entry_count); - if (type->Union.kind != UnionType_no_nil) { - TB_Node *region = cg_control_region(p, "bcase"); - keys[entry_offset].key = 0; - keys[entry_offset].value = region; - entry_offset += 1; - - tb_inst_set_control(p->func, region); - cgValue ok = cg_const_bool(p, t_bool, true); - cg_build_return_stmt_internal_single(p, ok); - } - - for (isize i = 0; i < type->Union.variants.count; i++) { - TB_Node *region = cg_control_region(p, "bcase"); - Type *variant = type->Union.variants[i]; - keys[entry_offset+i].key = union_variant_index(type, variant); - keys[entry_offset+i].value = region; - - tb_inst_set_control(p->func, region); - Type *vp = alloc_type_pointer(variant); - cgValue left = cg_emit_load(p, cg_emit_conv(p, lhs, vp)); - cgValue right = cg_emit_load(p, cg_emit_conv(p, rhs, vp)); - cgValue ok = cg_emit_comp(p, Token_CmpEq, left, right); - cg_build_return_stmt_internal_single(p, ok); - } - - - tb_inst_set_control(p->func, switch_region); - TB_DataType tag_dt = cg_data_type(lhs_tag.type); - GB_ASSERT(lhs_tag.kind == cgValue_Value); - tb_inst_branch(p->func, tag_dt, lhs_tag.node, false_region, entry_count, keys); - - tb_inst_set_control(p->func, false_region); - tb_inst_ret(p->func, 1, &node_false); - } - } else { - cgValue left = cg_lvalue_addr(x, type); - cgValue right = cg_lvalue_addr(y, type); - cgValue ok = cg_emit_comp(p, Token_CmpEq, left, right); - cg_build_return_stmt_internal_single(p, ok); - } - - cg_procedure_end(p); - - return p; -} - - -gb_internal cgValue cg_simple_compare_hash(cgProcedure *p, Type *type, cgValue data, cgValue seed) { - TEMPORARY_ALLOCATOR_GUARD(); - - GB_ASSERT_MSG(is_type_simple_compare(type), "%s", type_to_string(type)); - - auto args = slice_make(temporary_allocator(), 3); - args[0] = data; - args[1] = seed; - args[2] = cg_const_int(p, t_int, type_size_of(type)); - return cg_emit_runtime_call(p, "default_hasher", args); -} - - - - - -gb_internal cgProcedure *cg_hasher_proc_for_type(cgModule *m, Type *type) { - type = base_type(type); - GB_ASSERT(is_type_valid_for_keys(type)); - - mutex_lock(&m->generated_procs_mutex); - defer (mutex_unlock(&m->generated_procs_mutex)); - - cgProcedure **found = map_get(&m->hasher_procs, type); - if (found) { - return *found; - } - - static std::atomic proc_index; - - char buf[32] = {}; - isize n = gb_snprintf(buf, 32, "__$hasher%u", 1+proc_index.fetch_add(1)); - char *str = gb_alloc_str_len(permanent_allocator(), buf, n-1); - String proc_name = make_string_c(str); - - - cgProcedure *p = cg_procedure_create_dummy(m, proc_name, t_hasher_proc); - map_set(&m->hasher_procs, type, p); - p->split_returns_index = 2; - - cg_procedure_begin(p); - defer (cg_procedure_end(p)); - - TB_Node *x = tb_inst_param(p->func, 0); // data - TB_Node *y = tb_inst_param(p->func, 1); // seed - - cgValue data = cg_value(x, t_rawptr); - cgValue seed = cg_value(y, t_uintptr); - - if (is_type_simple_compare(type)) { - cgValue res = cg_simple_compare_hash(p, type, data, seed); - cg_build_return_stmt_internal_single(p, res); - return p; - } - - TEMPORARY_ALLOCATOR_GUARD(); - - auto args = slice_make(temporary_allocator(), 2); - - if (type->kind == Type_Struct) { - type_set_offsets(type); - for_array(i, type->Struct.fields) { - i64 offset = type->Struct.offsets[i]; - Entity *field = type->Struct.fields[i]; - cgValue field_hasher = cg_hasher_proc_value_for_type(p, field->type); - - TB_Node *ptr = tb_inst_member_access(p->func, data.node, offset); - - args[0] = cg_value(ptr, alloc_type_pointer(field->type)); - args[1] = seed; - seed = cg_emit_call(p, field_hasher, args); - } - - cg_build_return_stmt_internal_single(p, seed); - } else if (type->kind == Type_Union) { - if (type_size_of(type) == 0) { - cg_build_return_stmt_internal_single(p, seed); - } else if (is_type_union_maybe_pointer(type)) { - Type *v = type->Union.variants[0]; - cgValue variant_hasher = cg_hasher_proc_value_for_type(p, v); - - args[0] = data; - args[1] = seed; - cgValue res = cg_emit_call(p, variant_hasher, args); - cg_build_return_stmt_internal_single(p, seed); - } else { - TB_Node *end_region = cg_control_region(p, "bend"); - TB_Node *switch_region = cg_control_region(p, "bswitch"); - - cg_emit_goto(p, switch_region); - - size_t entry_count = type->Union.variants.count; - TB_SwitchEntry *keys = gb_alloc_array(temporary_allocator(), TB_SwitchEntry, entry_count); - for (size_t i = 0; i < entry_count; i++) { - TB_Node *region = cg_control_region(p, "bcase"); - Type *variant = type->Union.variants[i]; - keys[i].key = union_variant_index(type, variant); - keys[i].value = region; - - tb_inst_set_control(p->func, region); - - cgValue variant_hasher = cg_hasher_proc_value_for_type(p, variant); - - args[0] = data; - args[1] = seed; - cgValue res = cg_emit_call(p, variant_hasher, args); - cg_build_return_stmt_internal_single(p, res); - } - - tb_inst_set_control(p->func, switch_region); - - cgValue tag_ptr = cg_emit_union_tag_ptr(p, data); - cgValue tag = cg_emit_load(p, tag_ptr); - - TB_DataType tag_dt = cg_data_type(tag.type); - GB_ASSERT(tag.kind == cgValue_Value); - tb_inst_branch(p->func, tag_dt, tag.node, end_region, entry_count, keys); - - tb_inst_set_control(p->func, end_region); - cg_build_return_stmt_internal_single(p, seed); - } - } else if (type->kind == Type_Array) { - cgAddr pres = cg_add_local(p, t_uintptr, nullptr, false); - cg_addr_store(p, pres, seed); - - cgValue elem_hasher = cg_hasher_proc_value_for_type(p, type->Array.elem); - - auto loop_data = cg_loop_start(p, type->Array.count, t_int); - - i64 stride = type_size_of(type->Array.elem); - TB_Node *ptr = tb_inst_array_access(p->func, data.node, loop_data.index.node, stride); - args[0] = cg_value(ptr, alloc_type_pointer(type->Array.elem)); - args[1] = cg_addr_load(p, pres); - - cgValue new_seed = cg_emit_call(p, elem_hasher, args); - cg_addr_store(p, pres, new_seed); - - cg_loop_end(p, loop_data); - - cgValue res = cg_addr_load(p, pres); - cg_build_return_stmt_internal_single(p, res); - } else if (type->kind == Type_EnumeratedArray) { - cgAddr pres = cg_add_local(p, t_uintptr, nullptr, false); - cg_addr_store(p, pres, seed); - - cgValue elem_hasher = cg_hasher_proc_value_for_type(p, type->EnumeratedArray.elem); - - auto loop_data = cg_loop_start(p, type->EnumeratedArray.count, t_int); - - i64 stride = type_size_of(type->EnumeratedArray.elem); - TB_Node *ptr = tb_inst_array_access(p->func, data.node, loop_data.index.node, stride); - args[0] = cg_value(ptr, alloc_type_pointer(type->EnumeratedArray.elem)); - args[1] = cg_addr_load(p, pres); - - cgValue new_seed = cg_emit_call(p, elem_hasher, args); - cg_addr_store(p, pres, new_seed); - - cg_loop_end(p, loop_data); - - cgValue res = cg_addr_load(p, pres); - cg_build_return_stmt_internal_single(p, res); - } else if (is_type_cstring(type)) { - args[0] = data; - args[1] = seed; - cgValue res = cg_emit_runtime_call(p, "default_hasher_cstring", args); - cg_build_return_stmt_internal_single(p, seed); - } else if (is_type_string(type)) { - args[0] = data; - args[1] = seed; - cgValue res = cg_emit_runtime_call(p, "default_hasher_string", args); - cg_build_return_stmt_internal_single(p, seed); - } else { - GB_PANIC("Unhandled type for hasher: %s", type_to_string(type)); - } - return p; -} \ No newline at end of file diff --git a/src/tilde_stmt.cpp b/src/tilde_stmt.cpp deleted file mode 100644 index 597a4262c..000000000 --- a/src/tilde_stmt.cpp +++ /dev/null @@ -1,2889 +0,0 @@ -gb_internal bool cg_emit_goto(cgProcedure *p, TB_Node *control_region) { - if (tb_inst_get_control(p->func)) { - tb_inst_goto(p->func, control_region); - return true; - } - return false; -} - -gb_internal TB_Node *cg_control_region(cgProcedure *p, char const *name) { - TEMPORARY_ALLOCATOR_GUARD(); - - isize n = gb_strlen(name); - - char *new_name = gb_alloc_array(temporary_allocator(), char, n+12); - n = -1 + gb_snprintf(new_name, n+11, "%.*s_%u", cast(int)n, name, p->control_regions.count); - - TB_Node *region = tb_inst_region(p->func); - tb_inst_set_region_name(p->func, region, n, new_name); - - GB_ASSERT(p->scope_index >= 0); - array_add(&p->control_regions, cgControlRegion{region, p->scope_index}); - - return region; -} - -gb_internal cgValue cg_emit_load(cgProcedure *p, cgValue const &ptr, bool is_volatile) { - GB_ASSERT_MSG(is_type_pointer(ptr.type), "%s", type_to_string(ptr.type)); - Type *type = type_deref(ptr.type); - TB_DataType dt = cg_data_type(type); - - if (TB_IS_VOID_TYPE(dt)) { - switch (ptr.kind) { - case cgValue_Value: - return cg_lvalue_addr(ptr.node, type); - case cgValue_Addr: - GB_PANIC("NOT POSSIBLE - Cannot load an lvalue to begin with"); - break; - case cgValue_Multi: - GB_PANIC("NOT POSSIBLE - Cannot load multiple values at once"); - break; - case cgValue_Symbol: - return cg_lvalue_addr(tb_inst_get_symbol_address(p->func, ptr.symbol), type); - } - } - GB_ASSERT(dt.type != TB_MEMORY); - GB_ASSERT(dt.type != TB_TUPLE); - - // use the natural alignment - // if people need a special alignment, they can use `intrinsics.unaligned_load` - TB_CharUnits alignment = cast(TB_CharUnits)type_align_of(type); - - TB_Node *the_ptr = nullptr; - switch (ptr.kind) { - case cgValue_Value: - the_ptr = ptr.node; - break; - case cgValue_Addr: - the_ptr = tb_inst_load(p->func, TB_TYPE_PTR, ptr.node, alignment, is_volatile); - break; - case cgValue_Multi: - GB_PANIC("NOT POSSIBLE - Cannot load multiple values at once"); - break; - case cgValue_Symbol: - the_ptr = tb_inst_get_symbol_address(p->func, ptr.symbol); - break; - } - return cg_value(tb_inst_load(p->func, dt, the_ptr, alignment, is_volatile), type); -} - -gb_internal void cg_emit_store(cgProcedure *p, cgValue dst, cgValue src, bool is_volatile) { - GB_ASSERT_MSG(dst.kind != cgValue_Multi, "cannot store to multiple values at once"); - - if (dst.kind == cgValue_Addr) { - dst = cg_emit_load(p, dst, is_volatile); - } else if (dst.kind == cgValue_Symbol) { - dst = cg_value(tb_inst_get_symbol_address(p->func, dst.symbol), dst.type); - } - - GB_ASSERT(is_type_pointer(dst.type)); - Type *dst_type = type_deref(dst.type); - - GB_ASSERT_MSG(are_types_identical(core_type(dst_type), core_type(src.type)), "%s vs %s", type_to_string(dst_type), type_to_string(src.type)); - - TB_DataType dt = cg_data_type(dst_type); - TB_DataType st = cg_data_type(src.type); - GB_ASSERT(dt.raw == st.raw); - - // use the natural alignment - // if people need a special alignment, they can use `intrinsics.unaligned_store` - TB_CharUnits alignment = cast(TB_CharUnits)type_align_of(dst_type); - - if (TB_IS_VOID_TYPE(dt)) { - TB_Node *dst_ptr = nullptr; - TB_Node *src_ptr = nullptr; - - switch (dst.kind) { - case cgValue_Value: - dst_ptr = dst.node; - break; - case cgValue_Addr: - GB_PANIC("DST cgValue_Addr should be handled above"); - break; - case cgValue_Symbol: - dst_ptr = tb_inst_get_symbol_address(p->func, dst.symbol); - break; - } - - switch (src.kind) { - case cgValue_Value: - GB_PANIC("SRC cgValue_Value should be handled above"); - break; - case cgValue_Symbol: - GB_PANIC("SRC cgValue_Symbol should be handled above"); - break; - case cgValue_Addr: - src_ptr = src.node; - break; - } - - // IMPORTANT TODO(bill): needs to be memmove - i64 sz = type_size_of(dst_type); - TB_Node *count = tb_inst_uint(p->func, TB_TYPE_INT, cast(u64)sz); - tb_inst_memcpy(p->func, dst_ptr, src_ptr, count, alignment/*, is_volatile*/); - return; - } - - - switch (dst.kind) { - case cgValue_Value: - switch (src.kind) { - case cgValue_Value: - if (src.node->dt.type == TB_INT && src.node->dt.data == 1) { - src.node = tb_inst_zxt(p->func, src.node, dt); - } - tb_inst_store(p->func, dt, dst.node, src.node, alignment, is_volatile); - return; - case cgValue_Addr: - tb_inst_store(p->func, dt, dst.node, - tb_inst_load(p->func, st, src.node, alignment, is_volatile), - alignment, is_volatile); - return; - case cgValue_Symbol: - tb_inst_store(p->func, dt, dst.node, - tb_inst_get_symbol_address(p->func, src.symbol), - alignment, is_volatile); - return; - } - case cgValue_Addr: - GB_PANIC("cgValue_Addr should be handled above"); - break; - case cgValue_Symbol: - GB_PANIC(" cgValue_Symbol should be handled above"); - break; - } -} - - -gb_internal cgValue cg_address_from_load(cgProcedure *p, cgValue value) { - switch (value.kind) { - case cgValue_Value: - { - TB_Node *load_inst = value.node; - GB_ASSERT_MSG(load_inst->type == TB_LOAD, "expected a load instruction"); - TB_Node *ptr = load_inst->inputs[2]; - return cg_value(ptr, alloc_type_pointer(value.type)); - } - case cgValue_Addr: - return cg_value(value.node, alloc_type_pointer(value.type)); - case cgValue_Symbol: - GB_PANIC("Symbol is an invalid use case for cg_address_from_load"); - return {}; - case cgValue_Multi: - GB_PANIC("Multi is an invalid use case for cg_address_from_load"); - break; - } - GB_PANIC("Invalid cgValue for cg_address_from_load"); - return {}; - -} - -gb_internal bool cg_addr_is_empty(cgAddr const &addr) { - switch (addr.kind) { - case cgValue_Value: - case cgValue_Addr: - return addr.addr.node == nullptr; - case cgValue_Symbol: - return addr.addr.symbol == nullptr; - case cgValue_Multi: - return addr.addr.multi == nullptr; - } - return true; -} - -gb_internal Type *cg_addr_type(cgAddr const &addr) { - if (cg_addr_is_empty(addr)) { - return nullptr; - } - switch (addr.kind) { - case cgAddr_Map: - { - Type *t = base_type(addr.map.type); - GB_ASSERT(is_type_map(t)); - return t->Map.value; - } - case cgAddr_Swizzle: - return addr.swizzle.type; - case cgAddr_SwizzleLarge: - return addr.swizzle_large.type; - case cgAddr_Context: - if (addr.ctx.sel.index.count > 0) { - Type *t = t_context; - for_array(i, addr.ctx.sel.index) { - GB_ASSERT(is_type_struct(t)); - t = base_type(t)->Struct.fields[addr.ctx.sel.index[i]]->type; - } - return t; - } - break; - } - return type_deref(addr.addr.type); -} - -gb_internal cgValue cg_addr_load(cgProcedure *p, cgAddr addr) { - if (addr.addr.node == nullptr) { - return {}; - } - switch (addr.kind) { - case cgAddr_Default: - return cg_emit_load(p, addr.addr); - - case cgAddr_Map: - { - Type *map_type = base_type(type_deref(addr.addr.type)); - GB_ASSERT(map_type->kind == Type_Map); - cgAddr v_addr = cg_add_local(p, map_type->Map.value, nullptr, true); - - cgValue ptr = cg_internal_dynamic_map_get_ptr(p, addr.addr, addr.map.key); - cgValue ok = cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_NotEq, ptr), t_bool); - - TB_Node *then = cg_control_region(p, "map.get.then"); - TB_Node *done = cg_control_region(p, "map.get.done"); - cg_emit_if(p, ok, then, done); - tb_inst_set_control(p->func, then); - { - cgValue value = cg_emit_conv(p, ptr, alloc_type_pointer(map_type->Map.value)); - value = cg_emit_load(p, value); - cg_addr_store(p, v_addr, value); - } - cg_emit_goto(p, done); - tb_inst_set_control(p->func, done); - - cgValue v = cg_addr_load(p, v_addr); - if (is_type_tuple(addr.map.result)) { - return cg_value_multi2(v, ok, addr.map.result); - } else { - return v; - } - } - - case cgAddr_SoaVariable: - { - Type *t = type_deref(addr.addr.type); - t = base_type(t); - GB_ASSERT(t->kind == Type_Struct && t->Struct.soa_kind != StructSoa_None); - Type *elem = t->Struct.soa_elem; - - cgValue len = {}; - if (t->Struct.soa_kind == StructSoa_Fixed) { - len = cg_const_int(p, t_int, t->Struct.soa_count); - } else { - cgValue v = cg_emit_load(p, addr.addr); - len = cg_builtin_len(p, v); - } - - cgAddr res = cg_add_local(p, elem, nullptr, true); - - // if (addr.soa.index_expr != nullptr && (!cg_is_const(addr.soa.index) || t->Struct.soa_kind != StructSoa_Fixed)) { - // cg_emit_bounds_check(p, ast_token(addr.soa.index_expr), addr.soa.index, len); - // } - - if (t->Struct.soa_kind == StructSoa_Fixed) { - for_array(i, t->Struct.fields) { - Entity *field = t->Struct.fields[i]; - Type *base_type = field->type; - GB_ASSERT(base_type->kind == Type_Array); - - cgValue dst = cg_emit_struct_ep(p, res.addr, cast(i32)i); - cgValue src_ptr = cg_emit_struct_ep(p, addr.addr, cast(i32)i); - src_ptr = cg_emit_array_ep(p, src_ptr, addr.soa.index); - cgValue src = cg_emit_load(p, src_ptr); - cg_emit_store(p, dst, src); - } - } else { - isize field_count = t->Struct.fields.count; - if (t->Struct.soa_kind == StructSoa_Slice) { - field_count -= 1; - } else if (t->Struct.soa_kind == StructSoa_Dynamic) { - field_count -= 3; - } - for (isize i = 0; i < field_count; i++) { - Entity *field = t->Struct.fields[i]; - Type *base_type = field->type; - GB_ASSERT(base_type->kind == Type_Pointer); - - cgValue dst = cg_emit_struct_ep(p, res.addr, cast(i32)i); - cgValue src_ptr = cg_emit_struct_ep(p, addr.addr, cast(i32)i); - cgValue src = cg_emit_load(p, src_ptr); - src = cg_emit_ptr_offset(p, src, addr.soa.index); - src = cg_emit_load(p, src); - cg_emit_store(p, dst, src); - } - } - - return cg_addr_load(p, res); - } - } - GB_PANIC("TODO(bill): cg_addr_load %p", addr.addr.node); - return {}; -} - - -gb_internal void cg_addr_store(cgProcedure *p, cgAddr addr, cgValue value) { - if (cg_addr_is_empty(addr)) { - return; - } - GB_ASSERT(value.type != nullptr); - if (is_type_untyped_uninit(value.type)) { - Type *t = cg_addr_type(addr); - value = cg_value(tb_inst_poison(p->func, cg_data_type(t)), t); - // TODO(bill): IS THIS EVEN A GOOD IDEA? - } else if (is_type_untyped_nil(value.type)) { - Type *t = cg_addr_type(addr); - value = cg_const_nil(p, t); - } - - if (addr.kind == cgAddr_RelativePointer && addr.relative.deref) { - addr = cg_addr(cg_address_from_load(p, cg_addr_load(p, addr))); - } - - if (addr.kind == cgAddr_RelativePointer) { - GB_PANIC("TODO(bill): cgAddr_RelativePointer"); - } else if (addr.kind == cgAddr_RelativeSlice) { - GB_PANIC("TODO(bill): cgAddr_RelativeSlice"); - } else if (addr.kind == cgAddr_Map) { - cg_internal_dynamic_map_set(p, addr.addr, addr.map.type, addr.map.key, value, p->curr_stmt); - return; - } else if (addr.kind == cgAddr_Context) { - cgAddr old_addr = cg_find_or_generate_context_ptr(p); - - bool create_new = true; - for_array(i, p->context_stack) { - cgContextData *ctx_data = &p->context_stack[i]; - if (ctx_data->ctx.addr.node == old_addr.addr.node) { - if (ctx_data->uses > 0) { - create_new = true; - } else if (p->scope_index > ctx_data->scope_index) { - create_new = true; - } else { - // gb_printf_err("%.*s (curr:%td) (ctx:%td) (uses:%td)\n", LIT(p->name), p->scope_index, ctx_data->scope_index, ctx_data->uses); - create_new = false; - } - break; - } - } - - cgValue next = {}; - if (create_new) { - cgValue old = cg_addr_load(p, old_addr); - cgAddr next_addr = cg_add_local(p, t_context, nullptr, true); - cg_addr_store(p, next_addr, old); - cg_push_context_onto_stack(p, next_addr); - next = next_addr.addr; - } else { - next = old_addr.addr; - } - - if (addr.ctx.sel.index.count > 0) { - cgValue lhs = cg_emit_deep_field_gep(p, next, addr.ctx.sel); - cgValue rhs = cg_emit_conv(p, value, type_deref(lhs.type)); - cg_emit_store(p, lhs, rhs); - } else { - cgValue lhs = next; - cgValue rhs = cg_emit_conv(p, value, cg_addr_type(addr)); - cg_emit_store(p, lhs, rhs); - } - return; - } else if (addr.kind == cgAddr_SoaVariable) { - GB_PANIC("TODO(bill): cgAddr_SoaVariable"); - } else if (addr.kind == cgAddr_Swizzle) { - GB_ASSERT(addr.swizzle.count <= 4); - GB_PANIC("TODO(bill): cgAddr_Swizzle"); - } else if (addr.kind == cgAddr_SwizzleLarge) { - GB_PANIC("TODO(bill): cgAddr_SwizzleLarge"); - } - - value = cg_emit_conv(p, value, cg_addr_type(addr)); - cg_emit_store(p, addr.addr, value); -} - -gb_internal cgValue cg_addr_get_ptr(cgProcedure *p, cgAddr const &addr) { - if (cg_addr_is_empty(addr)) { - GB_PANIC("Illegal addr -> nullptr"); - return {}; - } - - switch (addr.kind) { - case cgAddr_Map: - GB_PANIC("TODO(bill): cg_addr_get_ptr cgAddr_Map"); - // return cg_internal_dynamic_map_get_ptr(p, addr.addr, addr.map.key); - break; - - case cgAddr_RelativePointer: { - Type *rel_ptr = base_type(cg_addr_type(addr)); - GB_ASSERT(rel_ptr->kind == Type_RelativePointer); - - cgValue ptr = cg_emit_conv(p, addr.addr, t_uintptr); - cgValue offset = cg_emit_conv(p, ptr, alloc_type_pointer(rel_ptr->RelativePointer.base_integer)); - offset = cg_emit_load(p, offset); - - if (!is_type_unsigned(rel_ptr->RelativePointer.base_integer)) { - offset = cg_emit_conv(p, offset, t_i64); - } - offset = cg_emit_conv(p, offset, t_uintptr); - - cgValue absolute_ptr = cg_emit_arith(p, Token_Add, ptr, offset, t_uintptr); - absolute_ptr = cg_emit_conv(p, absolute_ptr, rel_ptr->RelativePointer.pointer_type); - - GB_PANIC("TODO(bill): cg_addr_get_ptr cgAddr_RelativePointer"); - // cgValue cond = cg_emit_comp(p, Token_CmpEq, offset, cg_const_nil(p->module, rel_ptr->RelativePointer.base_integer)); - - // NOTE(bill): nil check - // cgValue nil_ptr = cg_const_nil(p->module, rel_ptr->RelativePointer.pointer_type); - // cgValue final_ptr = cg_emit_select(p, cond, nil_ptr, absolute_ptr); - // return final_ptr; - break; - } - - case cgAddr_SoaVariable: - // TODO(bill): FIX THIS HACK - return cg_address_from_load(p, cg_addr_load(p, addr)); - - case cgAddr_Context: - GB_PANIC("cgAddr_Context should be handled elsewhere"); - break; - - case cgAddr_Swizzle: - case cgAddr_SwizzleLarge: - // TOOD(bill): is this good enough logic? - break; - } - - return addr.addr; -} - -gb_internal cgValue cg_emit_ptr_offset(cgProcedure *p, cgValue ptr, cgValue index) { - GB_ASSERT(ptr.kind == cgValue_Value); - GB_ASSERT(index.kind == cgValue_Value); - GB_ASSERT(is_type_pointer(ptr.type) || is_type_multi_pointer(ptr.type)); - GB_ASSERT(is_type_integer(index.type)); - - Type *elem = type_deref(ptr.type, true); - i64 stride = type_size_of(elem); - return cg_value(tb_inst_array_access(p->func, ptr.node, index.node, stride), alloc_type_pointer(elem)); -} -gb_internal cgValue cg_emit_array_ep(cgProcedure *p, cgValue s, cgValue index) { - GB_ASSERT(s.kind == cgValue_Value); - GB_ASSERT(index.kind == cgValue_Value); - - Type *t = s.type; - GB_ASSERT_MSG(is_type_pointer(t), "%s", type_to_string(t)); - Type *st = base_type(type_deref(t)); - GB_ASSERT_MSG(is_type_array(st) || is_type_enumerated_array(st) || is_type_matrix(st), "%s", type_to_string(st)); - GB_ASSERT_MSG(is_type_integer(core_type(index.type)), "%s", type_to_string(index.type)); - - - Type *elem = base_array_type(st); - i64 stride = type_size_of(elem); - return cg_value(tb_inst_array_access(p->func, s.node, index.node, stride), alloc_type_pointer(elem)); -} -gb_internal cgValue cg_emit_array_epi(cgProcedure *p, cgValue s, i64 index) { - return cg_emit_array_ep(p, s, cg_const_int(p, t_int, index)); -} - - -gb_internal cgValue cg_emit_struct_ep(cgProcedure *p, cgValue s, i64 index) { - s = cg_flatten_value(p, s); - - GB_ASSERT(is_type_pointer(s.type)); - Type *t = base_type(type_deref(s.type)); - Type *result_type = nullptr; - - if (is_type_relative_pointer(t)) { - s = cg_addr_get_ptr(p, cg_addr(s)); - } - i64 offset = -1; - i64 int_size = build_context.int_size; - i64 ptr_size = build_context.ptr_size; - - switch (t->kind) { - case Type_Struct: - type_set_offsets(t); - result_type = t->Struct.fields[index]->type; - offset = t->Struct.offsets[index]; - break; - case Type_Union: - GB_ASSERT(index == -1); - GB_PANIC("TODO(bill): cg_emit_union_tag_ptr"); - break; - // return cg_emit_union_tag_ptr(p, s); - case Type_Tuple: - type_set_offsets(t); - result_type = t->Tuple.variables[index]->type; - offset = t->Tuple.offsets[index]; - GB_PANIC("TODO(bill): cg_emit_tuple_ep %d", s.kind); - break; - // return cg_emit_tuple_ep(p, s, index); - case Type_Slice: - switch (index) { - case 0: - result_type = alloc_type_multi_pointer(t->Slice.elem); - offset = 0; - break; - case 1: - result_type = t_int; - offset = int_size; - break; - } - break; - case Type_Basic: - switch (t->Basic.kind) { - case Basic_string: - switch (index) { - case 0: - result_type = t_u8_multi_ptr; - offset = 0; - break; - case 1: - result_type = t_int; - offset = int_size; - break; - } - break; - case Basic_any: - switch (index) { - case 0: - result_type = t_rawptr; - offset = 0; - break; - case 1: - result_type = t_typeid; - offset = ptr_size; - break; - } - break; - - case Basic_complex32: - case Basic_complex64: - case Basic_complex128: - { - Type *ft = base_complex_elem_type(t); - i64 sz = type_size_of(ft); - switch (index) { - case 0: case 1: - result_type = ft; offset = sz * index; break; - default: goto error_case; - } - break; - } - case Basic_quaternion64: - case Basic_quaternion128: - case Basic_quaternion256: - { - Type *ft = base_complex_elem_type(t); - i64 sz = type_size_of(ft); - switch (index) { - case 0: case 1: case 2: case 3: - result_type = ft; offset = sz * index; break; - default: goto error_case; - } - } - break; - default: - goto error_case; - } - break; - case Type_DynamicArray: - switch (index) { - case 0: - result_type = alloc_type_multi_pointer(t->DynamicArray.elem); - offset = index*int_size; - break; - case 1: case 2: - result_type = t_int; - offset = index*int_size; - break; - case 3: - result_type = t_allocator; - offset = index*int_size; - break; - default: goto error_case; - } - break; - case Type_Map: - { - init_map_internal_types(t); - Type *itp = alloc_type_pointer(t_raw_map); - s = cg_emit_transmute(p, s, itp); - - Type *rms = base_type(t_raw_map); - GB_ASSERT(rms->kind == Type_Struct); - - if (0 <= index && index < 3) { - result_type = rms->Struct.fields[index]->type; - offset = rms->Struct.offsets[index]; - } else { - goto error_case; - } - break; - } - case Type_Array: - return cg_emit_array_epi(p, s, index); - case Type_SoaPointer: - switch (index) { - case 0: - result_type = alloc_type_pointer(t->SoaPointer.elem); - offset = 0; - break; - case 1: - result_type = t_int; - offset = int_size; - break; - } - break; - default: - error_case:; - GB_PANIC("TODO(bill): struct_gep type: %s, %lld", type_to_string(s.type), cast(long long)index); - break; - } - - GB_ASSERT_MSG(result_type != nullptr, "%s %lld", type_to_string(t), cast(long long)index); - GB_ASSERT_MSG(offset >= 0, "%s %lld", type_to_string(t), cast(long long)offset); - - GB_ASSERT(s.kind == cgValue_Value); - return cg_value( - tb_inst_member_access(p->func, s.node, offset), - alloc_type_pointer(result_type) - ); -} - - -gb_internal cgValue cg_emit_struct_ev(cgProcedure *p, cgValue s, i64 index) { - s = cg_address_from_load_or_generate_local(p, s); - cgValue ptr = cg_emit_struct_ep(p, s, index); - return cg_flatten_value(p, cg_emit_load(p, ptr)); -} - - -gb_internal cgValue cg_emit_deep_field_gep(cgProcedure *p, cgValue e, Selection const &sel) { - GB_ASSERT(sel.index.count > 0); - Type *type = type_deref(e.type); - - for_array(i, sel.index) { - i64 index = sel.index[i]; - if (is_type_pointer(type)) { - type = type_deref(type); - e = cg_emit_load(p, e); - } - type = core_type(type); - - switch (type->kind) { - case Type_SoaPointer: { - cgValue addr = cg_emit_struct_ep(p, e, 0); - cgValue index = cg_emit_struct_ep(p, e, 1); - addr = cg_emit_load(p, addr); - index = cg_emit_load(p, index); - - i64 first_index = sel.index[0]; - Selection sub_sel = sel; - sub_sel.index.data += 1; - sub_sel.index.count -= 1; - - cgValue arr = cg_emit_struct_ep(p, addr, first_index); - - Type *t = base_type(type_deref(addr.type)); - GB_ASSERT(is_type_soa_struct(t)); - - if (t->Struct.soa_kind == StructSoa_Fixed) { - e = cg_emit_array_ep(p, arr, index); - } else { - e = cg_emit_ptr_offset(p, cg_emit_load(p, arr), index); - } - break; - } - case Type_Basic: - switch (type->Basic.kind) { - case Basic_any: - if (index == 0) { - type = t_rawptr; - } else if (index == 1) { - type = t_type_info_ptr; - } - e = cg_emit_struct_ep(p, e, index); - break; - default: - e = cg_emit_struct_ep(p, e, index); - break; - } - break; - case Type_Struct: - if (type->Struct.is_raw_union) { - type = get_struct_field_type(type, index); - GB_ASSERT(is_type_pointer(e.type)); - e = cg_emit_transmute(p, e, alloc_type_pointer(type)); - } else { - type = get_struct_field_type(type, index); - e = cg_emit_struct_ep(p, e, index); - } - break; - case Type_Union: - GB_ASSERT(index == -1); - type = t_type_info_ptr; - e = cg_emit_struct_ep(p, e, index); - break; - case Type_Tuple: - type = type->Tuple.variables[index]->type; - e = cg_emit_struct_ep(p, e, index); - break; - case Type_Slice: - case Type_DynamicArray: - case Type_Map: - case Type_RelativePointer: - e = cg_emit_struct_ep(p, e, index); - break; - case Type_Array: - e = cg_emit_array_epi(p, e, index); - break; - default: - GB_PANIC("un-gep-able type %s", type_to_string(type)); - break; - } - } - - return e; -} - - - - - - - - -gb_internal cgBranchRegions cg_lookup_branch_regions(cgProcedure *p, Ast *ident) { - GB_ASSERT(ident->kind == Ast_Ident); - Entity *e = entity_of_node(ident); - GB_ASSERT(e->kind == Entity_Label); - for (cgBranchRegions const &b : p->branch_regions) { - if (b.label == e->Label.node) { - return b; - } - } - - GB_PANIC("Unreachable"); - cgBranchRegions empty = {}; - return empty; -} - -gb_internal cgTargetList *cg_push_target_list(cgProcedure *p, Ast *label, TB_Node *break_, TB_Node *continue_, TB_Node *fallthrough_) { - cgTargetList *tl = gb_alloc_item(permanent_allocator(), cgTargetList); - tl->prev = p->target_list; - tl->break_ = break_; - tl->continue_ = continue_; - tl->fallthrough_ = fallthrough_; - p->target_list = tl; - - if (label != nullptr) { // Set label blocks - GB_ASSERT(label->kind == Ast_Label); - - for (cgBranchRegions &b : p->branch_regions) { - GB_ASSERT(b.label != nullptr && label != nullptr); - GB_ASSERT(b.label->kind == Ast_Label); - if (b.label == label) { - b.break_ = break_; - b.continue_ = continue_; - return tl; - } - } - - GB_PANIC("Unreachable"); - } - - return tl; -} - -gb_internal void cg_pop_target_list(cgProcedure *p) { - p->target_list = p->target_list->prev; -} -gb_internal cgAddr cg_add_local(cgProcedure *p, Type *type, Entity *e, bool zero_init) { - GB_ASSERT(type != nullptr); - - isize size = type_size_of(type); - TB_CharUnits alignment = cast(TB_CharUnits)type_align_of(type); - if (is_type_matrix(type)) { - alignment *= 2; // NOTE(bill): Just in case - } - - TB_Node *local = tb_inst_local(p->func, cast(u32)size, alignment); - - if (e != nullptr && e->token.string.len > 0 && e->token.string != "_") { - // NOTE(bill): for debugging purposes only - String name = e->token.string; - TB_DebugType *debug_type = cg_debug_type(p->module, type); - tb_function_attrib_variable(p->func, local, nullptr, name.len, cast(char const *)name.text, debug_type); - } - - if (zero_init) { - bool is_volatile = false; - gb_unused(is_volatile); - TB_Node *zero = tb_inst_uint(p->func, TB_TYPE_I8, 0); - TB_Node *count = tb_inst_uint(p->func, TB_TYPE_I32, cast(u64)size); - tb_inst_memset(p->func, local, zero, count, alignment/*, is_volatile*/); - } - - cgAddr addr = cg_addr(cg_value(local, alloc_type_pointer(type))); - if (e) { - map_set(&p->variable_map, e, addr); - } - return addr; -} - -gb_internal cgAddr cg_add_global(cgProcedure *p, Type *type, Entity *e) { - GB_ASSERT(type != nullptr); - - isize size = type_size_of(type); - TB_CharUnits alignment = cast(TB_CharUnits)type_align_of(type); - if (is_type_matrix(type)) { - alignment *= 2; // NOTE(bill): Just in case - } - - TB_Global *global = tb_global_create(p->module->mod, 0, "", nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(p->module->mod, tb_module_get_data(p->module->mod), global, size, alignment, 0); - TB_Node *local = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)global); - - if (e != nullptr && e->token.string.len > 0 && e->token.string != "_") { - // NOTE(bill): for debugging purposes only - String name = e->token.string; - TB_DebugType *debug_type = cg_debug_type(p->module, type); - tb_function_attrib_variable(p->func, local, nullptr, name.len, cast(char const *)name.text, debug_type); - } - - cgAddr addr = cg_addr(cg_value(local, alloc_type_pointer(type))); - if (e) { - map_set(&p->variable_map, e, addr); - } - return addr; -} - - -gb_internal cgValue cg_copy_value_to_ptr(cgProcedure *p, cgValue value, Type *original_type, isize min_alignment) { - TB_CharUnits size = cast(TB_CharUnits)type_size_of(original_type); - TB_CharUnits align = cast(TB_CharUnits)gb_max(type_align_of(original_type), min_alignment); - TB_Node *copy = tb_inst_local(p->func, size, align); - if (value.kind == cgValue_Value) { - tb_inst_store(p->func, cg_data_type(original_type), copy, value.node, align, false); - } else { - GB_ASSERT(value.kind == cgValue_Addr); - tb_inst_memcpy(p->func, copy, value.node, tb_inst_uint(p->func, TB_TYPE_INT, size), align); - } - - return cg_value(copy, alloc_type_pointer(original_type)); -} - -gb_internal cgValue cg_address_from_load_or_generate_local(cgProcedure *p, cgValue value) { - switch (value.kind) { - case cgValue_Value: - if (value.node->type == TB_LOAD) { - TB_Node *ptr = value.node->inputs[2]; - return cg_value(ptr, alloc_type_pointer(value.type)); - } - break; - case cgValue_Addr: - return cg_value(value.node, alloc_type_pointer(value.type)); - case cgValue_Multi: - GB_PANIC("cgValue_Multi not allowed"); - } - - cgAddr res = cg_add_local(p, value.type, nullptr, false); - cg_addr_store(p, res, value); - return res.addr; -} - - -gb_internal void cg_build_defer_stmt(cgProcedure *p, cgDefer const &d) { - TB_Node *curr_region = tb_inst_get_control(p->func); - if (curr_region == nullptr) { - return; - } - - // NOTE(bill): The prev block may defer injection before it's terminator - TB_Node *last_inst = nullptr; - // if (curr_region->input_count) { - // last_inst = *(curr_region->inputs + curr_region->input_count); - // } - // if (last_inst && TB_IS_NODE_TERMINATOR(last_inst->type)) { - // // NOTE(bill): ReturnStmt defer stuff will be handled previously - // return; - // } - - isize prev_context_stack_count = p->context_stack.count; - GB_ASSERT(prev_context_stack_count <= p->context_stack.capacity); - defer (p->context_stack.count = prev_context_stack_count); - p->context_stack.count = d.context_stack_count; - - TB_Node *b = cg_control_region(p, "defer"); - if (last_inst == nullptr) { - cg_emit_goto(p, b); - } - - tb_inst_set_control(p->func, b); - if (d.kind == cgDefer_Node) { - cg_build_stmt(p, d.stmt); - } else if (d.kind == cgDefer_Proc) { - cg_emit_call(p, d.proc.deferred, d.proc.result_as_args); - } -} - - -gb_internal void cg_emit_defer_stmts(cgProcedure *p, cgDeferExitKind kind, TB_Node *control_region) { - isize count = p->defer_stack.count; - isize i = count; - while (i --> 0) { - cgDefer const &d = p->defer_stack[i]; - - if (kind == cgDeferExit_Default) { - if (p->scope_index == d.scope_index && - d.scope_index > 0) { - cg_build_defer_stmt(p, d); - array_pop(&p->defer_stack); - continue; - } else { - break; - } - } else if (kind == cgDeferExit_Return) { - cg_build_defer_stmt(p, d); - } else if (kind == cgDeferExit_Branch) { - GB_ASSERT(control_region != nullptr); - isize lower_limit = -1; - for (auto const &cr : p->control_regions) { - if (cr.control_region == control_region) { - lower_limit = cr.scope_index; - break; - } - } - GB_ASSERT(lower_limit >= 0); - if (lower_limit < d.scope_index) { - cg_build_defer_stmt(p, d); - } - } - } -} - -gb_internal void cg_scope_open(cgProcedure *p, Scope *scope) { - // TODO(bill): debug scope information - p->scope_index += 1; - array_add(&p->scope_stack, scope); -} - -gb_internal void cg_scope_close(cgProcedure *p, cgDeferExitKind kind, TB_Node *control_region) { - cg_emit_defer_stmts(p, kind, control_region); - GB_ASSERT(p->scope_index > 0); - - while (p->context_stack.count > 0) { - auto *ctx = &p->context_stack[p->context_stack.count-1]; - if (ctx->scope_index < p->scope_index) { - break; - } - array_pop(&p->context_stack); - } - - p->scope_index -= 1; - array_pop(&p->scope_stack); -} - - -gb_internal isize cg_append_tuple_values(cgProcedure *p, Array *dst_values, cgValue src_value) { - isize init_count = dst_values->count; - Type *t = src_value.type; - if (t && t->kind == Type_Tuple) { - GB_ASSERT(src_value.kind == cgValue_Multi); - GB_ASSERT(src_value.multi != nullptr); - GB_ASSERT(src_value.multi->values.count == t->Tuple.variables.count); - for (cgValue const &value : src_value.multi->values) { - array_add(dst_values, value); - } - } else { - array_add(dst_values, src_value); - } - return dst_values->count - init_count; -} -gb_internal void cg_build_assignment(cgProcedure *p, Array const &lvals, Slice const &values) { - if (values.count == 0) { - return; - } - - auto inits = array_make(permanent_allocator(), 0, lvals.count); - - for (Ast *rhs : values) { - cgValue init = cg_build_expr(p, rhs); - cg_append_tuple_values(p, &inits, init); - } - - bool prev_in_assignment = p->in_multi_assignment; - - isize lval_count = 0; - for (cgAddr const &lval : lvals) { - if (!cg_addr_is_empty(lval)) { - // check if it is not a blank identifier - lval_count += 1; - } - } - p->in_multi_assignment = lval_count > 1; - - GB_ASSERT(lvals.count == inits.count); - - - if (inits.count > 1) for_array(i, inits) { - cgAddr lval = lvals[i]; - cgValue init = cg_flatten_value(p, inits[i]); - - GB_ASSERT(init.kind != cgValue_Multi); - if (init.type == nullptr) { - continue; - } - - Type *type = cg_addr_type(lval); - if (!cg_addr_is_empty(lval)) { - GB_ASSERT_MSG(are_types_identical(init.type, type), "%s = %s", type_to_string(init.type), type_to_string(type)); - } - - if (init.kind == cgValue_Addr && - !cg_addr_is_empty(lval)) { - // NOTE(bill): This is needed for certain constructs such as this: - // a, b = b, a - // NOTE(bill): This is a bodge and not necessarily a good way of doing things whatsoever - TB_CharUnits size = cast(TB_CharUnits)type_size_of(type); - TB_CharUnits align = cast(TB_CharUnits)type_align_of(type); - TB_Node *copy = tb_inst_local(p->func, size, align); - tb_inst_memcpy(p->func, copy, init.node, tb_inst_uint(p->func, TB_TYPE_INT, size), align); - // use the copy instead - init.node = copy; - } - inits[i] = init; - } - - for_array(i, inits) { - cgAddr lval = lvals[i]; - cgValue init = inits[i]; - GB_ASSERT(init.kind != cgValue_Multi); - if (init.type == nullptr) { - continue; - } - cg_addr_store(p, lval, init); - } - - p->in_multi_assignment = prev_in_assignment; -} - -gb_internal void cg_build_assign_stmt(cgProcedure *p, AstAssignStmt *as) { - if (as->op.kind == Token_Eq) { - auto lvals = array_make(permanent_allocator(), 0, as->lhs.count); - - for (Ast *lhs : as->lhs) { - cgAddr lval = {}; - if (!is_blank_ident(lhs)) { - lval = cg_build_addr(p, lhs); - } - array_add(&lvals, lval); - } - cg_build_assignment(p, lvals, as->rhs); - return; - } - - GB_ASSERT(as->lhs.count == 1); - GB_ASSERT(as->rhs.count == 1); - // NOTE(bill): Only 1 += 1 is allowed, no tuples - // +=, -=, etc - - i32 op_ = cast(i32)as->op.kind; - op_ += Token_Add - Token_AddEq; // Convert += to + - TokenKind op = cast(TokenKind)op_; - - if (op == Token_CmpAnd || op == Token_CmpOr) { - GB_PANIC("TODO(bill): cg_emit_logical_binary_expr"); - // Type *type = as->lhs[0]->tav.type; - // cgValue new_value = cg_emit_logical_binary_expr(p, op, as->lhs[0], as->rhs[0], type); - - // cgAddr lhs = cg_build_addr(p, as->lhs[0]); - // cg_addr_store(p, lhs, new_value); - } else { - cgAddr lhs = cg_build_addr(p, as->lhs[0]); - cgValue value = cg_build_expr(p, as->rhs[0]); - Type *lhs_type = cg_addr_type(lhs); - - // NOTE(bill): Allow for the weird edge case of: - // array *= matrix - if (op == Token_Mul && is_type_matrix(value.type) && is_type_array(lhs_type)) { - GB_PANIC("TODO(bill): array *= matrix"); - // cgValue old_value = cg_addr_load(p, lhs); - // Type *type = old_value.type; - // cgValue new_value = cg_emit_vector_mul_matrix(p, old_value, value, type); - // cg_addr_store(p, lhs, new_value); - // return; - } - - if (is_type_array(lhs_type)) { - GB_PANIC("TODO(bill): cg_build_assign_stmt_array"); - // cg_build_assign_stmt_array(p, op, lhs, value); - // return; - } else { - cgValue old_value = cg_addr_load(p, lhs); - Type *type = old_value.type; - - cgValue change = cg_emit_conv(p, value, type); - cgValue new_value = cg_emit_arith(p, op, old_value, change, type); - cg_addr_store(p, lhs, new_value); - } - } -} - -gb_internal void cg_build_return_stmt_internal_single(cgProcedure *p, cgValue result) { - Slice results = {}; - results.data = &result; - results.count = 1; - cg_build_return_stmt_internal(p, results); -} - - -gb_internal void cg_build_return_stmt_internal(cgProcedure *p, Slice const &results) { - TypeTuple *tuple = &p->type->Proc.results->Tuple; - isize return_count = p->type->Proc.result_count; - - if (return_count == 0) { - tb_inst_ret(p->func, 0, nullptr); - return; - } - - if (p->split_returns_index >= 0) { - GB_ASSERT(is_calling_convention_odin(p->type->Proc.calling_convention)); - - for (isize i = 0; i < return_count-1; i++) { - Entity *e = tuple->variables[i]; - TB_Node *ret_ptr = tb_inst_param(p->func, cast(int)(p->split_returns_index+i)); - cgValue ptr = cg_value(ret_ptr, alloc_type_pointer(e->type)); - cg_emit_store(p, ptr, results[i]); - } - - if (p->return_by_ptr) { - Entity *e = tuple->variables[return_count-1]; - TB_Node *ret_ptr = tb_inst_param(p->func, 0); - cgValue ptr = cg_value(ret_ptr, alloc_type_pointer(e->type)); - cg_emit_store(p, ptr, results[return_count-1]); - - tb_inst_ret(p->func, 0, nullptr); - return; - } else { - GB_ASSERT(p->proto->return_count == 1); - TB_DataType dt = TB_PROTOTYPE_RETURNS(p->proto)->dt; - - cgValue result = results[return_count-1]; - result = cg_flatten_value(p, result); - TB_Node *final_res = nullptr; - if (result.kind == cgValue_Addr) { - TB_CharUnits align = cast(TB_CharUnits)type_align_of(result.type); - final_res = tb_inst_load(p->func, dt, result.node, align, false); - } else { - GB_ASSERT(result.kind == cgValue_Value); - TB_DataType st = result.node->dt; - GB_ASSERT(st.type == dt.type); - if (st.raw == dt.raw) { - final_res = result.node; - } else if (st.type == TB_INT && st.data == 1) { - final_res = tb_inst_zxt(p->func, result.node, dt); - } else { - final_res = tb_inst_bitcast(p->func, result.node, dt); - } - } - GB_ASSERT(final_res != nullptr); - - tb_inst_ret(p->func, 1, &final_res); - return; - } - - } else { - GB_ASSERT_MSG(!is_calling_convention_odin(p->type->Proc.calling_convention), "missing %s", proc_calling_convention_strings[p->type->Proc.calling_convention]); - - if (p->return_by_ptr) { - Entity *e = tuple->variables[return_count-1]; - TB_Node *ret_ptr = tb_inst_param(p->func, 0); - cgValue ptr = cg_value(ret_ptr, alloc_type_pointer(e->type)); - cg_emit_store(p, ptr, results[return_count-1]); - - tb_inst_ret(p->func, 0, nullptr); - return; - } else { - GB_ASSERT(p->proto->return_count == 1); - TB_DataType dt = TB_PROTOTYPE_RETURNS(p->proto)->dt; - if (results.count == 1) { - cgValue result = results[0]; - result = cg_flatten_value(p, result); - - TB_Node *final_res = nullptr; - if (result.kind == cgValue_Addr) { - TB_CharUnits align = cast(TB_CharUnits)type_align_of(result.type); - final_res = tb_inst_load(p->func, dt, result.node, align, false); - } else { - GB_ASSERT(result.kind == cgValue_Value); - TB_DataType st = result.node->dt; - GB_ASSERT(st.type == dt.type); - if (st.raw == dt.raw) { - final_res = result.node; - } else if (st.type == TB_INT && st.data == 1) { - final_res = tb_inst_zxt(p->func, result.node, dt); - } else { - final_res = tb_inst_bitcast(p->func, result.node, dt); - } - } - - GB_ASSERT(final_res != nullptr); - - tb_inst_ret(p->func, 1, &final_res); - return; - } else { - GB_ASSERT_MSG(results.count == 1, "TODO(bill): multi-return values for the return"); - return; - } - } - - } -} - - -gb_internal void cg_build_return_stmt(cgProcedure *p, Slice const &return_results) { - TypeTuple *tuple = &p->type->Proc.results->Tuple; - isize return_count = p->type->Proc.result_count; - - if (return_count == 0) { - tb_inst_ret(p->func, 0, nullptr); - return; - } - TEMPORARY_ALLOCATOR_GUARD(); - - auto results = array_make(temporary_allocator(), 0, return_count); - - if (return_results.count != 0) { - for (isize i = 0; i < return_results.count; i++) { - cgValue res = cg_build_expr(p, return_results[i]); - cg_append_tuple_values(p, &results, res); - } - } else { - for_array(i, tuple->variables) { - Entity *e = tuple->variables[i]; - cgAddr addr = map_must_get(&p->variable_map, e); - cgValue res = cg_addr_load(p, addr); - array_add(&results, res); - } - } - GB_ASSERT(results.count == return_count); - - if (return_results.count != 0 && p->type->Proc.has_named_results) { - // NOTE(bill): store the named values before returning - for_array(i, tuple->variables) { - Entity *e = tuple->variables[i]; - cgAddr addr = map_must_get(&p->variable_map, e); - cg_addr_store(p, addr, results[i]); - } - } - for_array(i, tuple->variables) { - Entity *e = tuple->variables[i]; - results[i] = cg_emit_conv(p, results[i], e->type); - } - - cg_build_return_stmt_internal(p, slice_from_array(results)); -} - -gb_internal void cg_build_if_stmt(cgProcedure *p, Ast *node) { - ast_node(is, IfStmt, node); - cg_scope_open(p, is->scope); // Scope #1 - defer (cg_scope_close(p, cgDeferExit_Default, nullptr)); - - if (is->init != nullptr) { - TB_Node *init = cg_control_region(p, "if_init"); - cg_emit_goto(p, init); - tb_inst_set_control(p->func, init); - cg_build_stmt(p, is->init); - } - - TB_Node *then = cg_control_region(p, "if_then"); - TB_Node *done = cg_control_region(p, "if_done"); - TB_Node *else_ = done; - if (is->else_stmt != nullptr) { - else_ = cg_control_region(p, "if_else"); - } - - cgValue cond = cg_build_cond(p, is->cond, then, else_); - gb_unused(cond); - - if (is->label != nullptr) { - cgTargetList *tl = cg_push_target_list(p, is->label, done, nullptr, nullptr); - tl->is_block = true; - } - - // TODO(bill): should we do a constant check? - // Which philosophy are we following? - // - IR represents what the code represents (probably this) - // - IR represents what the code executes - - tb_inst_set_control(p->func, then); - - cg_build_stmt(p, is->body); - - cg_emit_goto(p, done); - - if (is->else_stmt != nullptr) { - tb_inst_set_control(p->func, else_); - - cg_scope_open(p, scope_of_node(is->else_stmt)); - cg_build_stmt(p, is->else_stmt); - cg_scope_close(p, cgDeferExit_Default, nullptr); - - cg_emit_goto(p, done); - } - - tb_inst_set_control(p->func, done); -} - -gb_internal void cg_build_for_stmt(cgProcedure *p, Ast *node) { - ast_node(fs, ForStmt, node); - - cg_scope_open(p, fs->scope); - defer (cg_scope_close(p, cgDeferExit_Default, nullptr)); - - if (fs->init != nullptr) { - TB_Node *init = cg_control_region(p, "for_init"); - cg_emit_goto(p, init); - tb_inst_set_control(p->func, init); - cg_build_stmt(p, fs->init); - } - TB_Node *body = cg_control_region(p, "for_body"); - TB_Node *done = cg_control_region(p, "for_done"); - TB_Node *loop = body; - if (fs->cond != nullptr) { - loop = cg_control_region(p, "for_loop"); - } - TB_Node *post = loop; - if (fs->post != nullptr) { - post = cg_control_region(p, "for_post"); - } - - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - if (loop != body) { - cg_build_cond(p, fs->cond, body, done); - tb_inst_set_control(p->func, body); - } - - cg_push_target_list(p, fs->label, done, post, nullptr); - cg_build_stmt(p, fs->body); - cg_pop_target_list(p); - - cg_emit_goto(p, post); - - if (fs->post != nullptr) { - tb_inst_set_control(p->func, post); - cg_build_stmt(p, fs->post); - cg_emit_goto(p, loop); - } - tb_inst_set_control(p->func, done); -} - - -gb_internal Ast *cg_strip_and_prefix(Ast *ident) { - if (ident != nullptr) { - if (ident->kind == Ast_UnaryExpr && ident->UnaryExpr.op.kind == Token_And) { - ident = ident->UnaryExpr.expr; - } - GB_ASSERT(ident->kind == Ast_Ident); - } - return ident; -} - -gb_internal void cg_emit_increment(cgProcedure *p, cgValue addr) { - GB_ASSERT(is_type_pointer(addr.type)); - Type *type = type_deref(addr.type); - cgValue v_one = cg_const_value(p, type, exact_value_i64(1)); - cg_emit_store(p, addr, cg_emit_arith(p, Token_Add, cg_emit_load(p, addr), v_one, type)); - -} - -gb_internal void cg_range_stmt_store_val(cgProcedure *p, Ast *stmt_val, cgValue const &value) { - Entity *e = entity_of_node(stmt_val); - if (e == nullptr) { - return; - } - - if (e->flags & EntityFlag_Value) { - if (value.kind == cgValue_Addr) { - cgValue ptr = cg_address_from_load_or_generate_local(p, value); - cg_add_entity(p->module, e, ptr); - return; - } - } - - cgAddr addr = cg_add_local(p, e->type, e, false); - cg_addr_store(p, addr, value); - return; -} - -gb_internal void cg_build_range_stmt_interval(cgProcedure *p, AstBinaryExpr *node, - AstRangeStmt *rs, Scope *scope) { - bool ADD_EXTRA_WRAPPING_CHECK = true; - - cg_scope_open(p, scope); - - Ast *val0 = rs->vals.count > 0 ? cg_strip_and_prefix(rs->vals[0]) : nullptr; - Ast *val1 = rs->vals.count > 1 ? cg_strip_and_prefix(rs->vals[1]) : nullptr; - Type *val0_type = nullptr; - Type *val1_type = nullptr; - if (val0 != nullptr && !is_blank_ident(val0)) { - val0_type = type_of_expr(val0); - } - if (val1 != nullptr && !is_blank_ident(val1)) { - val1_type = type_of_expr(val1); - } - - TokenKind op = Token_Lt; - switch (node->op.kind) { - case Token_Ellipsis: op = Token_LtEq; break; - case Token_RangeFull: op = Token_LtEq; break; - case Token_RangeHalf: op = Token_Lt; break; - default: GB_PANIC("Invalid interval operator"); break; - } - - - cgValue lower = cg_build_expr(p, node->left); - cgValue upper = {}; // initialized each time in the loop - - cgAddr value; - if (val0_type != nullptr) { - value = cg_add_local(p, val0_type, entity_of_node(val0), false); - } else { - value = cg_add_local(p, lower.type, nullptr, false); - } - cg_addr_store(p, value, lower); - - cgAddr index; - if (val1_type != nullptr) { - index = cg_add_local(p, val1_type, entity_of_node(val1), false); - } else { - index = cg_add_local(p, t_int, nullptr, false); - } - cg_addr_store(p, index, cg_const_int(p, t_int, 0)); - - TB_Node *loop = cg_control_region(p, "for_interval_loop"); - TB_Node *body = cg_control_region(p, "for_interval_body"); - TB_Node *done = cg_control_region(p, "for_interval_done"); - - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - upper = cg_build_expr(p, node->right); - cgValue curr_value = cg_addr_load(p, value); - cgValue cond = cg_emit_comp(p, op, curr_value, upper); - cg_emit_if(p, cond, body, done); - tb_inst_set_control(p->func, body); - - cgValue val = cg_addr_load(p, value); - cgValue idx = cg_addr_load(p, index); - - if (val0_type) cg_range_stmt_store_val(p, val0, val); - if (val1_type) cg_range_stmt_store_val(p, val1, idx); - - - { - // NOTE: this check block will most likely be optimized out, and is here - // to make this code easier to read - TB_Node *check = nullptr; - TB_Node *post = cg_control_region(p, "for_interval_post"); - - TB_Node *continue_block = post; - - if (ADD_EXTRA_WRAPPING_CHECK && - op == Token_LtEq) { - check = cg_control_region(p, "for_interval_check"); - continue_block = check; - } - - cg_push_target_list(p, rs->label, done, continue_block, nullptr); - - cg_build_stmt(p, rs->body); - - cg_scope_close(p, cgDeferExit_Default, nullptr); - cg_pop_target_list(p); - - if (check != nullptr) { - cg_emit_goto(p, check); - tb_inst_set_control(p->func, check); - - cgValue check_cond = cg_emit_comp(p, Token_NotEq, curr_value, upper); - cg_emit_if(p, check_cond, post, done); - } else { - cg_emit_goto(p, post); - } - - tb_inst_set_control(p->func, post); - cg_emit_increment(p, value.addr); - cg_emit_increment(p, index.addr); - cg_emit_goto(p, loop); - } - - tb_inst_set_control(p->func, done); -} - -gb_internal void cg_build_range_stmt_indexed(cgProcedure *p, cgValue expr, Type *val_type, cgValue count_ptr, - cgValue *val_, cgValue *idx_, TB_Node **loop_, TB_Node **done_, - bool is_reverse) { - cgValue count = {}; - Type *expr_type = base_type(type_deref(expr.type)); - switch (expr_type->kind) { - case Type_Array: - count = cg_const_int(p, t_int, expr_type->Array.count); - break; - } - - cgValue val = {}; - cgValue idx = {}; - TB_Node *loop = nullptr; - TB_Node *done = nullptr; - TB_Node *body = nullptr; - - loop = cg_control_region(p, "for_index_loop"); - body = cg_control_region(p, "for_index_body"); - done = cg_control_region(p, "for_index_done"); - - cgAddr index = cg_add_local(p, t_int, nullptr, false); - - if (!is_reverse) { - /* - for x, i in array { - ... - } - - i := -1 - for { - i += 1 - if !(i < len(array)) { - break - } - #no_bounds_check x := array[i] - ... - } - */ - - cg_addr_store(p, index, cg_const_int(p, t_int, cast(u64)-1)); - - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - cgValue incr = cg_emit_arith(p, Token_Add, cg_addr_load(p, index), cg_const_int(p, t_int, 1), t_int); - cg_addr_store(p, index, incr); - - if (count.node == nullptr) { - GB_ASSERT(count_ptr.node != nullptr); - count = cg_emit_load(p, count_ptr); - } - cgValue cond = cg_emit_comp(p, Token_Lt, incr, count); - cg_emit_if(p, cond, body, done); - } else { - // NOTE(bill): REVERSED LOGIC - /* - #reverse for x, i in array { - ... - } - - i := len(array) - for { - i -= 1 - if i < 0 { - break - } - #no_bounds_check x := array[i] - ... - } - */ - - if (count.node == nullptr) { - GB_ASSERT(count_ptr.node != nullptr); - count = cg_emit_load(p, count_ptr); - } - count = cg_emit_conv(p, count, t_int); - cg_addr_store(p, index, count); - - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - cgValue incr = cg_emit_arith(p, Token_Sub, cg_addr_load(p, index), cg_const_int(p, t_int, 1), t_int); - cg_addr_store(p, index, incr); - - cgValue anti_cond = cg_emit_comp(p, Token_Lt, incr, cg_const_int(p, t_int, 0)); - cg_emit_if(p, anti_cond, done, body); - } - - tb_inst_set_control(p->func, body); - - idx = cg_addr_load(p, index); - switch (expr_type->kind) { - case Type_Array: { - if (val_type != nullptr) { - val = cg_emit_load(p, cg_emit_array_ep(p, expr, idx)); - } - break; - } - case Type_EnumeratedArray: { - if (val_type != nullptr) { - val = cg_emit_load(p, cg_emit_array_ep(p, expr, idx)); - // NOTE(bill): Override the idx value for the enumeration - Type *index_type = expr_type->EnumeratedArray.index; - if (compare_exact_values(Token_NotEq, *expr_type->EnumeratedArray.min_value, exact_value_u64(0))) { - idx = cg_emit_arith(p, Token_Add, idx, cg_const_value(p, index_type, *expr_type->EnumeratedArray.min_value), index_type); - } - } - break; - } - case Type_Slice: { - if (val_type != nullptr) { - cgValue elem = cg_builtin_raw_data(p, expr); - val = cg_emit_load(p, cg_emit_ptr_offset(p, elem, idx)); - } - break; - } - case Type_DynamicArray: { - if (val_type != nullptr) { - cgValue elem = cg_emit_struct_ep(p, expr, 0); - elem = cg_emit_load(p, elem); - val = cg_emit_load(p, cg_emit_ptr_offset(p, elem, idx)); - } - break; - } - case Type_Struct: { - GB_ASSERT(is_type_soa_struct(expr_type)); - break; - } - - default: - GB_PANIC("Cannot do range_indexed of %s", type_to_string(expr_type)); - break; - } - - if (val_) *val_ = val; - if (idx_) *idx_ = idx; - if (loop_) *loop_ = loop; - if (done_) *done_ = done; - -} - -gb_internal void cg_build_range_stmt_enum(cgProcedure *p, Type *enum_type, Type *val_type, cgValue *val_, cgValue *idx_, TB_Node **loop_, TB_Node **done_) { - Type *t = enum_type; - GB_ASSERT(is_type_enum(t)); - t = base_type(t); - Type *core_elem = core_type(t); - GB_ASSERT(t->kind == Type_Enum); - i64 enum_count = t->Enum.fields.count; - cgValue max_count = cg_const_int(p, t_int, enum_count); - - cgValue ti = cg_type_info(p, t); - cgValue variant = cg_emit_struct_ep(p, ti, 4); - cgValue eti_ptr = cg_emit_conv(p, variant, t_type_info_enum_ptr); - cgValue values = cg_emit_load(p, cg_emit_struct_ep(p, eti_ptr, 2)); - cgValue values_data = cg_builtin_raw_data(p, values); - - cgAddr offset_ = cg_add_local(p, t_int, nullptr, false); - cg_addr_store(p, offset_, cg_const_int(p, t_int, 0)); - - TB_Node *loop = cg_control_region(p, "for_enum_loop"); - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - TB_Node *body = cg_control_region(p, "for_enum_body"); - TB_Node *done = cg_control_region(p, "for_enum_done"); - - cgValue offset = cg_addr_load(p, offset_); - cgValue cond = cg_emit_comp(p, Token_Lt, offset, max_count); - cg_emit_if(p, cond, body, done); - tb_inst_set_control(p->func, body); - - cgValue val_ptr = cg_emit_ptr_offset(p, values_data, offset); - cg_emit_increment(p, offset_.addr); - - cgValue val = {}; - if (val_type != nullptr) { - GB_ASSERT(are_types_identical(enum_type, val_type)); - - if (is_type_integer(core_elem)) { - cgValue i = cg_emit_load(p, cg_emit_conv(p, val_ptr, t_i64_ptr)); - val = cg_emit_conv(p, i, t); - } else { - GB_PANIC("TODO(bill): enum core type %s", type_to_string(core_elem)); - } - } - - if (val_) *val_ = val; - if (idx_) *idx_ = offset; - if (loop_) *loop_ = loop; - if (done_) *done_ = done; -} - -gb_internal void cg_build_range_stmt_struct_soa(cgProcedure *p, AstRangeStmt *rs, Scope *scope) { - Ast *expr = unparen_expr(rs->expr); - TypeAndValue tav = type_and_value_of_expr(expr); - - TB_Node *loop = nullptr; - TB_Node *body = nullptr; - TB_Node *done = nullptr; - - bool is_reverse = rs->reverse; - - cg_scope_open(p, scope); - - Ast *val0 = rs->vals.count > 0 ? cg_strip_and_prefix(rs->vals[0]) : nullptr; - Ast *val1 = rs->vals.count > 1 ? cg_strip_and_prefix(rs->vals[1]) : nullptr; - Type *val_types[2] = {}; - if (val0 != nullptr && !is_blank_ident(val0)) { - val_types[0] = type_of_expr(val0); - } - if (val1 != nullptr && !is_blank_ident(val1)) { - val_types[1] = type_of_expr(val1); - } - - cgAddr array = cg_build_addr(p, expr); - if (is_type_pointer(cg_addr_type(array))) { - array = cg_addr(cg_addr_load(p, array)); - } - cgValue count = cg_builtin_len(p, cg_addr_load(p, array)); - - - cgAddr index = cg_add_local(p, t_int, nullptr, false); - - if (!is_reverse) { - /* - for x, i in array { - ... - } - - i := -1 - for { - i += 1 - if !(i < len(array)) { - break - } - x := array[i] // but #soa-ified - ... - } - */ - - cg_addr_store(p, index, cg_const_int(p, t_int, cast(u64)-1)); - - loop = cg_control_region(p, "for_soa_loop"); - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - cgValue incr = cg_emit_arith(p, Token_Add, cg_addr_load(p, index), cg_const_int(p, t_int, 1), t_int); - cg_addr_store(p, index, incr); - - body = cg_control_region(p, "for_soa_body"); - done = cg_control_region(p, "for_soa_done"); - - cgValue cond = cg_emit_comp(p, Token_Lt, incr, count); - cg_emit_if(p, cond, body, done); - } else { - // NOTE(bill): REVERSED LOGIC - /* - #reverse for x, i in array { - ... - } - - i := len(array) - for { - i -= 1 - if i < 0 { - break - } - #no_bounds_check x := array[i] // but #soa-ified - ... - } - */ - cg_addr_store(p, index, count); - - loop = cg_control_region(p, "for_soa_loop"); - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, loop); - - cgValue incr = cg_emit_arith(p, Token_Sub, cg_addr_load(p, index), cg_const_int(p, t_int, 1), t_int); - cg_addr_store(p, index, incr); - - body = cg_control_region(p, "for_soa_body"); - done = cg_control_region(p, "for_soa_done"); - - cgValue cond = cg_emit_comp(p, Token_Lt, incr, cg_const_int(p, t_int, 0)); - cg_emit_if(p, cond, done, body); - } - tb_inst_set_control(p->func, body); - - - if (val_types[0]) { - Entity *e = entity_of_node(val0); - if (e != nullptr) { - cgAddr soa_val = cg_addr_soa_variable(array.addr, cg_addr_load(p, index), nullptr); - map_set(&p->soa_values_map, e, soa_val); - } - } - if (val_types[1]) { - cg_range_stmt_store_val(p, val1, cg_addr_load(p, index)); - } - - - cg_push_target_list(p, rs->label, done, loop, nullptr); - - cg_build_stmt(p, rs->body); - - cg_scope_close(p, cgDeferExit_Default, nullptr); - cg_pop_target_list(p); - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, done); - -} - - -gb_internal void cg_build_range_stmt(cgProcedure *p, Ast *node) { - ast_node(rs, RangeStmt, node); - - Ast *expr = unparen_expr(rs->expr); - - if (is_ast_range(expr)) { - cg_build_range_stmt_interval(p, &expr->BinaryExpr, rs, rs->scope); - return; - } - - Type *expr_type = type_of_expr(expr); - if (expr_type != nullptr) { - Type *et = base_type(type_deref(expr_type)); - if (is_type_soa_struct(et)) { - cg_build_range_stmt_struct_soa(p, rs, rs->scope); - return; - } - } - - cg_scope_open(p, rs->scope); - - - Ast *val0 = rs->vals.count > 0 ? cg_strip_and_prefix(rs->vals[0]) : nullptr; - Ast *val1 = rs->vals.count > 1 ? cg_strip_and_prefix(rs->vals[1]) : nullptr; - Type *val0_type = nullptr; - Type *val1_type = nullptr; - if (val0 != nullptr && !is_blank_ident(val0)) { - val0_type = type_of_expr(val0); - } - if (val1 != nullptr && !is_blank_ident(val1)) { - val1_type = type_of_expr(val1); - } - - cgValue val = {}; - cgValue key = {}; - TB_Node *loop = nullptr; - TB_Node *done = nullptr; - bool is_map = false; - TypeAndValue tav = type_and_value_of_expr(expr); - - if (tav.mode == Addressing_Type) { - cg_build_range_stmt_enum(p, type_deref(tav.type), val0_type, &val, &key, &loop, &done); - } else { - Type *expr_type = type_of_expr(expr); - Type *et = base_type(type_deref(expr_type)); - switch (et->kind) { - case Type_Map: { - is_map = true; - cgValue map = cg_build_addr_ptr(p, expr); - if (is_type_pointer(type_deref(map.type))) { - map = cg_emit_load(p, map); - } - GB_PANIC("TODO(bill): cg_build_range_map"); - // cg_build_range_map(p, map, val1_type, &val, &key, &loop, &done); - break; - } - case Type_Array: { - cgValue array = cg_build_addr_ptr(p, expr); - if (is_type_pointer(type_deref(array.type))) { - array = cg_emit_load(p, array); - } - cgAddr count_ptr = cg_add_local(p, t_int, nullptr, false); - cg_addr_store(p, count_ptr, cg_const_int(p, t_int, et->Array.count)); - cg_build_range_stmt_indexed(p, array, val0_type, count_ptr.addr, &val, &key, &loop, &done, rs->reverse); - break; - } - case Type_EnumeratedArray: { - cgValue array = cg_build_addr_ptr(p, expr); - if (is_type_pointer(type_deref(array.type))) { - array = cg_emit_load(p, array); - } - cgAddr count_ptr = cg_add_local(p, t_int, nullptr, false); - cg_addr_store(p, count_ptr, cg_const_int(p, t_int, et->EnumeratedArray.count)); - cg_build_range_stmt_indexed(p, array, val0_type, count_ptr.addr, &val, &key, &loop, &done, rs->reverse); - break; - } - case Type_DynamicArray: { - cgValue count_ptr = {}; - cgValue array = cg_build_addr_ptr(p, expr); - if (is_type_pointer(type_deref(array.type))) { - array = cg_emit_load(p, array); - } - count_ptr = cg_emit_struct_ep(p, array, 1); - cg_build_range_stmt_indexed(p, array, val0_type, count_ptr, &val, &key, &loop, &done, rs->reverse); - break; - } - case Type_Slice: { - cgValue count_ptr = {}; - cgValue slice = cg_build_expr(p, expr); - if (is_type_pointer(slice.type)) { - count_ptr = cg_emit_struct_ep(p, slice, 1); - slice = cg_emit_load(p, slice); - } else { - count_ptr = cg_add_local(p, t_int, nullptr, false).addr; - cg_emit_store(p, count_ptr, cg_builtin_len(p, slice)); - } - cg_build_range_stmt_indexed(p, slice, val0_type, count_ptr, &val, &key, &loop, &done, rs->reverse); - break; - } - case Type_Basic: { - cgValue string = cg_build_expr(p, expr); - if (is_type_pointer(string.type)) { - string = cg_emit_load(p, string); - } - if (is_type_untyped(expr_type)) { - cgAddr s = cg_add_local(p, default_type(string.type), nullptr, false); - cg_addr_store(p, s, string); - string = cg_addr_load(p, s); - } - Type *t = base_type(string.type); - GB_ASSERT(!is_type_cstring(t)); - GB_PANIC("TODO(bill): cg_build_range_string"); - // cg_build_range_string(p, string, val0_type, &val, &key, &loop, &done, rs->reverse); - break; - } - case Type_Tuple: - GB_PANIC("TODO(bill): cg_build_range_tuple"); - // cg_build_range_tuple(p, expr, val0_type, val1_type, &val, &key, &loop, &done); - break; - default: - GB_PANIC("Cannot range over %s", type_to_string(expr_type)); - break; - } - } - - if (is_map) { - if (val0_type) cg_range_stmt_store_val(p, val0, key); - if (val1_type) cg_range_stmt_store_val(p, val1, val); - } else { - if (val0_type) cg_range_stmt_store_val(p, val0, val); - if (val1_type) cg_range_stmt_store_val(p, val1, key); - } - - cg_push_target_list(p, rs->label, done, loop, nullptr); - - cg_build_stmt(p, rs->body); - - cg_scope_close(p, cgDeferExit_Default, nullptr); - cg_pop_target_list(p); - cg_emit_goto(p, loop); - tb_inst_set_control(p->func, done); -} - -gb_internal bool cg_switch_stmt_can_be_trivial_jump_table(AstSwitchStmt *ss) { - if (ss->tag == nullptr) { - return false; - } - enum { DISALLOW_64_SWITCH = true }; - - bool is_typeid = false; - TypeAndValue tv = type_and_value_of_expr(ss->tag); - if (is_type_integer(core_type(tv.type))) { - i64 sz = type_size_of(tv.type); - if (sz > 8) { - return false; - } - if (DISALLOW_64_SWITCH && sz == 8) { - return false; - } - // okay - } else if (is_type_typeid(tv.type)) { - // okay - is_typeid = true; - if (DISALLOW_64_SWITCH && build_context.ptr_size == 8) { - return false; - } - } else { - return false; - } - - ast_node(body, BlockStmt, ss->body); - for (Ast *clause : body->stmts) { - ast_node(cc, CaseClause, clause); - - if (cc->list.count == 0) { - continue; - } - - for (Ast *expr : cc->list) { - expr = unparen_expr(expr); - if (is_ast_range(expr)) { - return false; - } - if (expr->tav.mode == Addressing_Type) { - GB_ASSERT(is_typeid); - continue; - } - tv = type_and_value_of_expr(expr); - if (tv.mode != Addressing_Constant) { - return false; - } - if (!is_type_integer(core_type(tv.type))) { - return false; - } - } - - } - - return true; -} - - -gb_internal void cg_build_switch_stmt(cgProcedure *p, Ast *node) { - ast_node(ss, SwitchStmt, node); - cg_scope_open(p, ss->scope); - - if (ss->init != nullptr) { - cg_build_stmt(p, ss->init); - } - cgValue tag = {}; - if (ss->tag != nullptr) { - tag = cg_build_expr(p, ss->tag); - } else { - tag = cg_const_bool(p, t_bool, true); - } - - TB_Node *done = cg_control_region(p, "switch_done"); - - ast_node(body, BlockStmt, ss->body); - - isize case_count = body->stmts.count; - Slice default_stmts = {}; - TB_Node *default_fall = nullptr; - TB_Node *default_block = nullptr; - Scope * default_scope = nullptr; - TB_Node *fall = nullptr; - - - auto body_regions = slice_make(permanent_allocator(), body->stmts.count); - auto body_scopes = slice_make(permanent_allocator(), body->stmts.count); - for_array(i, body->stmts) { - Ast *clause = body->stmts[i]; - ast_node(cc, CaseClause, clause); - - body_regions[i] = cg_control_region(p, cc->list.count == 0 ? "switch_default_body" : "switch_case_body"); - body_scopes[i] = cc->scope; - if (cc->list.count == 0) { - default_block = body_regions[i]; - default_scope = cc->scope; - } - } - - bool is_trivial = cg_switch_stmt_can_be_trivial_jump_table(ss); - if (is_trivial) { - isize key_count = 0; - for (Ast *clause : body->stmts) { - ast_node(cc, CaseClause, clause); - key_count += cc->list.count; - } - TB_SwitchEntry *keys = gb_alloc_array(temporary_allocator(), TB_SwitchEntry, key_count); - isize key_index = 0; - for_array(i, body->stmts) { - Ast *clause = body->stmts[i]; - ast_node(cc, CaseClause, clause); - - TB_Node *region = body_regions[i]; - for (Ast *expr : cc->list) { - i64 key = 0; - expr = unparen_expr(expr); - GB_ASSERT(!is_ast_range(expr)); - if (expr->tav.mode == Addressing_Type) { - Type *type = expr->tav.value.value_typeid; - if (type == nullptr || type == t_invalid) { - type = expr->tav.type; - } - key = cg_typeid_as_u64(p->module, type); - } else { - auto tv = type_and_value_of_expr(expr); - GB_ASSERT(tv.mode == Addressing_Constant); - key = exact_value_to_i64(tv.value); - } - keys[key_index++] = {key, region}; - } - } - GB_ASSERT(key_index == key_count); - - TB_Node *end_block = done; - if (default_block) { - end_block = default_block; - } - - TB_DataType dt = cg_data_type(tag.type); - GB_ASSERT(tag.kind == cgValue_Value); - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - - tb_inst_branch(p->func, dt, tag.node, end_block, key_count, keys); - } - - for_array(i, body->stmts) { - Ast *clause = body->stmts[i]; - ast_node(cc, CaseClause, clause); - - TB_Node *body_region = body_regions[i]; - Scope *body_scope = body_scopes[i]; - fall = done; - if (i+1 < case_count) { - fall = body_regions[i+1]; - } - - if (cc->list.count == 0) { - // default case - default_stmts = cc->stmts; - default_fall = fall; - GB_ASSERT(default_block == body_region); - continue; - } - - TB_Node *next_cond = nullptr; - if (!is_trivial) for (Ast *expr : cc->list) { - expr = unparen_expr(expr); - - next_cond = cg_control_region(p, "switch_case_next"); - - cgValue cond = {}; - if (is_ast_range(expr)) { - ast_node(ie, BinaryExpr, expr); - TokenKind op = Token_Invalid; - switch (ie->op.kind) { - case Token_Ellipsis: op = Token_LtEq; break; - case Token_RangeFull: op = Token_LtEq; break; - case Token_RangeHalf: op = Token_Lt; break; - default: GB_PANIC("Invalid interval operator"); break; - } - cgValue lhs = cg_build_expr(p, ie->left); - cgValue rhs = cg_build_expr(p, ie->right); - - cgValue cond_lhs = cg_emit_comp(p, Token_LtEq, lhs, tag); - cgValue cond_rhs = cg_emit_comp(p, op, tag, rhs); - cond = cg_emit_arith(p, Token_And, cond_lhs, cond_rhs, t_bool); - } else { - if (expr->tav.mode == Addressing_Type) { - GB_ASSERT(is_type_typeid(tag.type)); - cgValue e = cg_typeid(p, expr->tav.type); - e = cg_emit_conv(p, e, tag.type); - cond = cg_emit_comp(p, Token_CmpEq, tag, e); - } else { - cond = cg_emit_comp(p, Token_CmpEq, tag, cg_build_expr(p, expr)); - } - } - - GB_ASSERT(cond.kind == cgValue_Value); - tb_inst_if(p->func, cond.node, body_region, next_cond); - tb_inst_set_control(p->func, next_cond); - } - - tb_inst_set_control(p->func, body_region); - - cg_push_target_list(p, ss->label, done, nullptr, fall); - cg_scope_open(p, body_scope); - cg_build_stmt_list(p, cc->stmts); - cg_scope_close(p, cgDeferExit_Default, body_region); - cg_pop_target_list(p); - - cg_emit_goto(p, done); - tb_inst_set_control(p->func, next_cond); - } - - if (default_block != nullptr) { - if (!is_trivial) { - cg_emit_goto(p, default_block); - } - tb_inst_set_control(p->func, default_block); - - cg_push_target_list(p, ss->label, done, nullptr, default_fall); - cg_scope_open(p, default_scope); - cg_build_stmt_list(p, default_stmts); - cg_scope_close(p, cgDeferExit_Default, default_block); - cg_pop_target_list(p); - } - - - cg_emit_goto(p, done); - tb_inst_set_control(p->func, done); - - cg_scope_close(p, cgDeferExit_Default, done); -} - -gb_internal void cg_build_type_switch_stmt(cgProcedure *p, Ast *node) { - ast_node(ss, TypeSwitchStmt, node); - - TB_Node *done_region = cg_control_region(p, "typeswitch_done"); - TB_Node *else_region = done_region; - TB_Node *default_region = nullptr; - isize num_cases = 0; - - cg_scope_open(p, ss->scope); - defer (cg_scope_close(p, cgDeferExit_Default, done_region)); - - ast_node(as, AssignStmt, ss->tag); - GB_ASSERT(as->lhs.count == 1); - GB_ASSERT(as->rhs.count == 1); - - cgValue parent = cg_build_expr(p, as->rhs[0]); - bool is_parent_ptr = is_type_pointer(parent.type); - Type *parent_base_type = type_deref(parent.type); - gb_unused(parent_base_type); - - TypeSwitchKind switch_kind = check_valid_type_switch_type(parent.type); - GB_ASSERT(switch_kind != TypeSwitch_Invalid); - - - cgValue parent_value = parent; - - cgValue parent_ptr = parent; - if (!is_parent_ptr) { - parent_ptr = cg_address_from_load_or_generate_local(p, parent); - } - - cgValue tag = {}; - cgValue union_data = {}; - if (switch_kind == TypeSwitch_Union) { - union_data = cg_emit_conv(p, parent_ptr, t_rawptr); - Type *union_type = type_deref(parent_ptr.type); - if (is_type_union_maybe_pointer(union_type)) { - tag = cg_emit_conv(p, cg_emit_comp_against_nil(p, Token_NotEq, union_data), t_int); - } else if (union_tag_size(union_type) == 0) { - tag = {}; // there is no tag for a zero sized union - } else { - cgValue tag_ptr = cg_emit_union_tag_ptr(p, parent_ptr); - tag = cg_emit_load(p, tag_ptr); - } - } else if (switch_kind == TypeSwitch_Any) { - tag = cg_emit_load(p, cg_emit_struct_ep(p, parent_ptr, 1)); - } else { - GB_PANIC("Unknown switch kind"); - } - - ast_node(body, BlockStmt, ss->body); - - for (Ast *clause : body->stmts) { - ast_node(cc, CaseClause, clause); - num_cases += cc->list.count; - if (cc->list.count == 0) { - GB_ASSERT(default_region == nullptr); - default_region = cg_control_region(p, "typeswitch_default_body"); - else_region = default_region; - } - } - - bool all_by_reference = false; - for (Ast *clause : body->stmts) { - ast_node(cc, CaseClause, clause); - if (cc->list.count != 1) { - continue; - } - Entity *case_entity = implicit_entity_of_node(clause); - all_by_reference |= (case_entity->flags & EntityFlag_Value) == 0; - break; - } - - TB_Node *backing_ptr = nullptr; - if (!all_by_reference) { - bool variants_found = false; - i64 max_size = 0; - i64 max_align = 1; - for (Ast *clause : body->stmts) { - ast_node(cc, CaseClause, clause); - if (cc->list.count != 1) { - continue; - } - Entity *case_entity = implicit_entity_of_node(clause); - if (!is_type_untyped_nil(case_entity->type)) { - max_size = gb_max(max_size, type_size_of(case_entity->type)); - max_align = gb_max(max_align, type_align_of(case_entity->type)); - variants_found = true; - } - } - if (variants_found) { - backing_ptr = tb_inst_local(p->func, cast(TB_CharUnits)max_size, cast(TB_CharUnits)max_align); - } - } - - TEMPORARY_ALLOCATOR_GUARD(); - TB_Node **control_regions = gb_alloc_array(temporary_allocator(), TB_Node *, body->stmts.count); - TB_SwitchEntry *switch_entries = gb_alloc_array(temporary_allocator(), TB_SwitchEntry, num_cases); - - isize case_index = 0; - for_array(i, body->stmts) { - Ast *clause = body->stmts[i]; - ast_node(cc, CaseClause, clause); - if (cc->list.count == 0) { - control_regions[i] = default_region; - continue; - } - - TB_Node *region = cg_control_region(p, "typeswitch_body"); - control_regions[i] = region; - - for (Ast *type_expr : cc->list) { - Type *case_type = type_of_expr(type_expr); - i64 key = -1; - if (switch_kind == TypeSwitch_Union) { - Type *ut = base_type(type_deref(parent.type)); - if (is_type_untyped_nil(case_type)) { - key = 0; - } else { - key = union_variant_index(ut, case_type); - } - } else if (switch_kind == TypeSwitch_Any) { - if (is_type_untyped_nil(case_type)) { - key = 0; - } else { - key = cast(i64)cg_typeid_as_u64(p->module, case_type); - } - } - GB_ASSERT(key >= 0); - - switch_entries[case_index++] = TB_SwitchEntry{key, region}; - } - } - - GB_ASSERT(case_index == num_cases); - - { - TB_DataType dt = {}; - TB_Node *key = nullptr; - if (type_size_of(parent_base_type) == 0) { - GB_ASSERT(tag.node == nullptr); - key = tb_inst_bool(p->func, false); - dt = cg_data_type(t_bool); - } else { - GB_ASSERT(tag.kind == cgValue_Value && tag.node != nullptr); - dt = cg_data_type(tag.type); - key = tag.node; - } - - GB_ASSERT(!TB_IS_VOID_TYPE(dt)); - tb_inst_branch(p->func, dt, key, else_region, num_cases, switch_entries); - } - - - for_array(i, body->stmts) { - Ast *clause = body->stmts[i]; - ast_node(cc, CaseClause, clause); - - bool saw_nil = false; - for (Ast *type_expr : cc->list) { - Type *case_type = type_of_expr(type_expr); - if (is_type_untyped_nil(case_type)) { - saw_nil = true; - } - } - - Entity *case_entity = implicit_entity_of_node(clause); - bool by_reference = (case_entity->flags & EntityFlag_Value) == 0; - - cg_scope_open(p, cc->scope); - - TB_Node *body_region = control_regions[i]; - tb_inst_set_control(p->func, body_region); - - if (cc->list.count == 1 && !saw_nil) { - cgValue data = {}; - if (switch_kind == TypeSwitch_Union) { - data = union_data; - } else if (switch_kind == TypeSwitch_Any) { - data = cg_emit_load(p, cg_emit_struct_ep(p, parent_ptr, 0)); - } - GB_ASSERT(data.kind == cgValue_Value); - - Type *ct = case_entity->type; - Type *ct_ptr = alloc_type_pointer(ct); - - cgValue ptr = {}; - - if (backing_ptr) { // by value - GB_ASSERT(!by_reference); - - i64 size = type_size_of(case_entity->type); - i64 align = type_align_of(case_entity->type); - - // make a copy of the case value - tb_inst_memcpy(p->func, - backing_ptr, // dst - data.node, // src - tb_inst_uint(p->func, TB_TYPE_INT, size), - cast(TB_CharUnits)align - ); - - ptr = cg_value(backing_ptr, ct_ptr); - - } else { // by reference - GB_ASSERT(by_reference); - ptr = cg_emit_conv(p, data, ct_ptr); - } - GB_ASSERT(are_types_identical(case_entity->type, type_deref(ptr.type))); - - cg_add_entity(p->module, case_entity, ptr); - String name = case_entity->token.string; - tb_function_attrib_variable(p->func, ptr.node, nullptr, name.len, cast(char const *)name.text, cg_debug_type(p->module, ct)); - } else { - if (case_entity->flags & EntityFlag_Value) { - // by value - cgAddr x = cg_add_local(p, case_entity->type, case_entity, false); - cg_addr_store(p, x, parent_value); - } else { - // by reference - cg_add_entity(p->module, case_entity, parent_value); - } - } - - cg_push_target_list(p, ss->label, done_region, nullptr, nullptr); - cg_build_stmt_list(p, cc->stmts); - cg_scope_close(p, cgDeferExit_Default, body_region); - cg_pop_target_list(p); - - cg_emit_goto(p, done_region); - } - - cg_emit_goto(p, done_region); - tb_inst_set_control(p->func, done_region); -} - - -gb_internal void cg_build_mutable_value_decl(cgProcedure *p, Ast *node) { - ast_node(vd, ValueDecl, node); - if (!vd->is_mutable) { - return; - } - - bool is_static = false; - for (Ast *name : vd->names) if (!is_blank_ident(name)) { - // NOTE(bill): Sanity check to check for the existence of the variable's Entity - GB_ASSERT(name->kind == Ast_Ident); - Entity *e = entity_of_node(name); - TokenPos pos = ast_token(name).pos; - GB_ASSERT_MSG(e != nullptr, "\n%s missing entity for %.*s", token_pos_to_string(pos), LIT(name->Ident.token.string)); - if (e->flags & EntityFlag_Static) { - // NOTE(bill): If one of the entities is static, they all are - is_static = true; - } - } - - if (is_static) { - for_array(i, vd->names) { - Ast *ident = vd->names[i]; - GB_ASSERT(!is_blank_ident(ident)); - Entity *e = entity_of_node(ident); - GB_ASSERT(e->flags & EntityFlag_Static); - String name = e->token.string; - - String mangled_name = {}; - { - gbString str = gb_string_make_length(permanent_allocator(), p->name.text, p->name.len); - str = gb_string_appendc(str, "-"); - str = gb_string_append_fmt(str, ".%.*s-%llu", LIT(name), cast(long long)e->id); - mangled_name.text = cast(u8 *)str; - mangled_name.len = gb_string_length(str); - } - - cgModule *m = p->module; - - TB_DebugType *debug_type = cg_debug_type(m, e->type); - TB_Global *global = tb_global_create(m->mod, mangled_name.len, cast(char const *)mangled_name.text, debug_type, TB_LINKAGE_PRIVATE); - - TB_ModuleSectionHandle section = tb_module_get_data(m->mod); - if (e->Variable.thread_local_model != "") { - section = tb_module_get_tls(m->mod); - String model = e->Variable.thread_local_model; - if (model == "default") { - // TODO(bill): Thread Local Storage models - } else if (model == "localdynamic") { - // TODO(bill): Thread Local Storage models - } else if (model == "initialexec") { - // TODO(bill): Thread Local Storage models - } else if (model == "localexec") { - // TODO(bill): Thread Local Storage models - } else { - GB_PANIC("Unhandled thread local mode %.*s", LIT(model)); - } - } - - i64 max_objects = 0; - ExactValue value = {}; - - if (vd->values.count > 0) { - GB_ASSERT(vd->names.count == vd->values.count); - Ast *ast_value = vd->values[i]; - GB_ASSERT(ast_value->tav.mode == Addressing_Constant || - ast_value->tav.mode == Addressing_Invalid); - - value = ast_value->tav.value; - max_objects = cg_global_const_calculate_region_count(value, e->type); - } - tb_global_set_storage(m->mod, section, global, type_size_of(e->type), type_align_of(e->type), max_objects); - - cg_global_const_add_region(m, value, e->type, global, 0); - - TB_Node *node = tb_inst_get_symbol_address(p->func, cast(TB_Symbol *)global); - cgValue global_val = cg_value(node, alloc_type_pointer(e->type)); - cg_add_entity(p->module, e, global_val); - cg_add_member(p->module, mangled_name, global_val); - } - return; - } - - TEMPORARY_ALLOCATOR_GUARD(); - - - - auto inits = array_make(temporary_allocator(), 0, vd->values.count != 0 ? vd->names.count : 0); - for (Ast *rhs : vd->values) { - cgValue init = cg_build_expr(p, rhs); - cg_append_tuple_values(p, &inits, init); - } - - - auto lvals = slice_make(temporary_allocator(), vd->names.count); - for_array(i, vd->names) { - Ast *name = vd->names[i]; - if (!is_blank_ident(name)) { - Entity *e = entity_of_node(name); - bool zero_init = vd->values.count == 0; - if (vd->names.count == vd->values.count) { - Ast *expr = unparen_expr(vd->values[i]); - if (expr->kind == Ast_CompoundLit && - inits[i].kind == cgValue_Addr) { - TB_Node *ptr = inits[i].node; - - if (e != nullptr && e->token.string.len > 0 && e->token.string != "_") { - // NOTE(bill): for debugging purposes only - String name = e->token.string; - TB_DebugType *debug_type = cg_debug_type(p->module, e->type); - tb_function_attrib_variable(p->func, ptr, nullptr, name.len, cast(char const *)name.text, debug_type); - } - - cgAddr addr = cg_addr(inits[i]); - map_set(&p->variable_map, e, addr); - continue; - } - } - - lvals[i] = cg_add_local(p, e->type, e, zero_init); - } - } - - - GB_ASSERT(vd->values.count == 0 || lvals.count == inits.count); - for_array(i, inits) { - cgAddr lval = lvals[i]; - cgValue init = inits[i]; - cg_addr_store(p, lval, init); - } -} - - -gb_internal void cg_build_stmt(cgProcedure *p, Ast *node) { - Ast *prev_stmt = p->curr_stmt; - defer (p->curr_stmt = prev_stmt); - p->curr_stmt = node; - - // TODO(bill): check if last instruction was a terminating one or not - - cg_set_debug_pos_from_node(p, node); - - u16 prev_state_flags = p->state_flags; - defer (p->state_flags = prev_state_flags); - - if (node->state_flags != 0) { - u16 in = node->state_flags; - u16 out = p->state_flags; - - if (in & StateFlag_bounds_check) { - out |= StateFlag_bounds_check; - out &= ~StateFlag_no_bounds_check; - } else if (in & StateFlag_no_bounds_check) { - out |= StateFlag_no_bounds_check; - out &= ~StateFlag_bounds_check; - } - if (in & StateFlag_no_type_assert) { - out |= StateFlag_no_type_assert; - out &= ~StateFlag_type_assert; - } else if (in & StateFlag_type_assert) { - out |= StateFlag_type_assert; - out &= ~StateFlag_no_type_assert; - } - - p->state_flags = out; - } - - switch (node->kind) { - case_ast_node(bs, EmptyStmt, node); - case_end; - - case_ast_node(us, UsingStmt, node); - case_end; - - case_ast_node(ws, WhenStmt, node); - cg_build_when_stmt(p, ws); - case_end; - - case_ast_node(bs, BlockStmt, node); - TB_Node *done = nullptr; - if (bs->label != nullptr) { - done = cg_control_region(p, "block_done"); - cgTargetList *tl = cg_push_target_list(p, bs->label, done, nullptr, nullptr); - tl->is_block = true; - } - - cg_scope_open(p, bs->scope); - cg_build_stmt_list(p, bs->stmts); - cg_scope_close(p, cgDeferExit_Default, nullptr); - - if (done != nullptr) { - cg_emit_goto(p, done); - tb_inst_set_control(p->func, done); - } - - if (bs->label != nullptr) { - cg_pop_target_list(p); - } - case_end; - - case_ast_node(vd, ValueDecl, node); - cg_build_mutable_value_decl(p, node); - case_end; - - case_ast_node(bs, BranchStmt, node); - TB_Node *block = nullptr; - - if (bs->label != nullptr) { - cgBranchRegions bb = cg_lookup_branch_regions(p, bs->label); - switch (bs->token.kind) { - case Token_break: block = bb.break_; break; - case Token_continue: block = bb.continue_; break; - case Token_fallthrough: - GB_PANIC("fallthrough cannot have a label"); - break; - } - } else { - for (cgTargetList *t = p->target_list; t != nullptr && block == nullptr; t = t->prev) { - if (t->is_block) { - continue; - } - - switch (bs->token.kind) { - case Token_break: block = t->break_; break; - case Token_continue: block = t->continue_; break; - case Token_fallthrough: block = t->fallthrough_; break; - } - } - } - GB_ASSERT(block != nullptr); - - cg_emit_defer_stmts(p, cgDeferExit_Branch, block); - cg_emit_goto(p, block); - case_end; - - case_ast_node(es, ExprStmt, node); - cg_build_expr(p, es->expr); - case_end; - - case_ast_node(as, AssignStmt, node); - cg_build_assign_stmt(p, as); - case_end; - - case_ast_node(rs, ReturnStmt, node); - cg_build_return_stmt(p, rs->results); - case_end; - - case_ast_node(is, IfStmt, node); - cg_build_if_stmt(p, node); - case_end; - - case_ast_node(fs, ForStmt, node); - cg_build_for_stmt(p, node); - case_end; - - case_ast_node(rs, RangeStmt, node); - cg_build_range_stmt(p, node); - case_end; - - case_ast_node(rs, UnrollRangeStmt, node); - GB_PANIC("TODO(bill): lb_build_unroll_range_stmt"); - // cg_build_range_stmt(p, rs, rs->scope); - case_end; - - case_ast_node(fs, SwitchStmt, node); - cg_build_switch_stmt(p, node); - case_end; - - case_ast_node(ts, TypeSwitchStmt, node); - cg_build_type_switch_stmt(p, node); - case_end; - - case_ast_node(ds, DeferStmt, node); - Type *pt = base_type(p->type); - GB_ASSERT(pt->kind == Type_Proc); - if (pt->Proc.calling_convention == ProcCC_Odin) { - GB_ASSERT(p->context_stack.count != 0); - } - - cgDefer *d = array_add_and_get(&p->defer_stack); - d->kind = cgDefer_Node; - d->scope_index = p->scope_index; - d->context_stack_count = p->context_stack.count; - d->control_region = tb_inst_get_control(p->func); - GB_ASSERT(d->control_region != nullptr); - d->stmt = ds->stmt; - case_end; - - - - default: - GB_PANIC("TODO cg_build_stmt %.*s", LIT(ast_strings[node->kind])); - break; - } -} - -gb_internal void cg_build_constant_value_decl(cgProcedure *p, AstValueDecl *vd) { - if (vd == nullptr || vd->is_mutable) { - return; - } - - auto *min_dep_set = &p->module->info->minimum_dependency_set; - - static i32 global_guid = 0; - - for (Ast *ident : vd->names) { - GB_ASSERT(ident->kind == Ast_Ident); - Entity *e = entity_of_node(ident); - GB_ASSERT(e != nullptr); - if (e->kind != Entity_TypeName) { - continue; - } - - bool polymorphic_struct = false; - if (e->type != nullptr && e->kind == Entity_TypeName) { - Type *bt = base_type(e->type); - if (bt->kind == Type_Struct) { - polymorphic_struct = bt->Struct.is_polymorphic; - } - } - - if (!polymorphic_struct && !ptr_set_exists(min_dep_set, e)) { - continue; - } - - if (e->TypeName.ir_mangled_name.len != 0) { - // NOTE(bill): Already set - continue; - } - - cg_set_nested_type_name_ir_mangled_name(e, p); - } - - for_array(i, vd->names) { - Ast *ident = vd->names[i]; - GB_ASSERT(ident->kind == Ast_Ident); - Entity *e = entity_of_node(ident); - GB_ASSERT(e != nullptr); - if (e->kind != Entity_Procedure) { - continue; - } - GB_ASSERT (vd->values[i] != nullptr); - - Ast *value = unparen_expr(vd->values[i]); - if (value->kind != Ast_ProcLit) { - continue; // It's an alias - } - - DeclInfo *decl = decl_info_of_entity(e); - ast_node(pl, ProcLit, decl->proc_lit); - if (pl->body != nullptr) { - GenProcsData *gpd = e->Procedure.gen_procs; - if (gpd) { - rw_mutex_shared_lock(&gpd->mutex); - for (Entity *e : gpd->procs) { - if (!ptr_set_exists(min_dep_set, e)) { - continue; - } - DeclInfo *d = decl_info_of_entity(e); - cg_build_nested_proc(p, &d->proc_lit->ProcLit, e); - } - rw_mutex_shared_unlock(&gpd->mutex); - } else { - cg_build_nested_proc(p, pl, e); - } - } else { - - // FFI - Foreign function interace - String original_name = e->token.string; - String name = original_name; - - if (e->Procedure.is_foreign) { - GB_PANIC("cg_add_foreign_library_path"); - // cg_add_foreign_library_path(p->module, e->Procedure.foreign_library); - } - - if (e->Procedure.link_name.len > 0) { - name = e->Procedure.link_name; - } - - cgValue *prev_value = string_map_get(&p->module->members, name); - if (prev_value != nullptr) { - // NOTE(bill): Don't do mutliple declarations in the IR - return; - } - - e->Procedure.link_name = name; - - cgProcedure *nested_proc = cg_procedure_create(p->module, e); - - cgValue value = p->value; - - array_add(&p->children, nested_proc); - string_map_set(&p->module->members, name, value); - cg_add_procedure_to_queue(nested_proc); - } - } -} - - -gb_internal void cg_build_stmt_list(cgProcedure *p, Slice const &stmts) { - for (Ast *stmt : stmts) { - switch (stmt->kind) { - case_ast_node(vd, ValueDecl, stmt); - cg_build_constant_value_decl(p, vd); - case_end; - case_ast_node(fb, ForeignBlockDecl, stmt); - ast_node(block, BlockStmt, fb->body); - cg_build_stmt_list(p, block->stmts); - case_end; - } - } - for (Ast *stmt : stmts) { - cg_build_stmt(p, stmt); - } -} - - -gb_internal void cg_build_when_stmt(cgProcedure *p, AstWhenStmt *ws) { - TypeAndValue tv = type_and_value_of_expr(ws->cond); - GB_ASSERT(is_type_boolean(tv.type)); - GB_ASSERT(tv.value.kind == ExactValue_Bool); - if (tv.value.value_bool) { - cg_build_stmt_list(p, ws->body->BlockStmt.stmts); - } else if (ws->else_stmt) { - switch (ws->else_stmt->kind) { - case Ast_BlockStmt: - cg_build_stmt_list(p, ws->else_stmt->BlockStmt.stmts); - break; - case Ast_WhenStmt: - cg_build_when_stmt(p, &ws->else_stmt->WhenStmt); - break; - default: - GB_PANIC("Invalid 'else' statement in 'when' statement"); - break; - } - } -} - diff --git a/src/tilde_type_info.cpp b/src/tilde_type_info.cpp deleted file mode 100644 index 96a101376..000000000 --- a/src/tilde_type_info.cpp +++ /dev/null @@ -1,985 +0,0 @@ -gb_internal void cg_global_const_type_info_ptr(cgModule *m, Type *type, TB_Global *global, i64 offset) { - GB_ASSERT(type != nullptr); - TB_Symbol *type_table_array = cg_find_symbol_from_entity(m, cg_global_type_info_data_entity); - - - i64 index_in_bytes = cast(i64)cg_type_info_index(m->info, type); - index_in_bytes *= type_size_of(t_type_info); - - void *ti_ptr_ptr = tb_global_add_region(m->mod, global, offset, build_context.ptr_size); - // NOTE(bill): define the byte offset for the pointer - cg_write_int_at_ptr(ti_ptr_ptr, index_in_bytes, t_uintptr); - - // NOTE(bill): this will add to the byte offset set previously - tb_global_add_symbol_reloc(m->mod, global, offset, type_table_array); -} - -gb_internal cgValue cg_global_type_info_data_ptr(cgProcedure *p) { - cgValue v = cg_find_value_from_entity(p->module, cg_global_type_info_data_entity); - return cg_flatten_value(p, v); -} - -gb_internal isize cg_type_info_index(CheckerInfo *info, Type *type, bool err_on_not_found) { - auto *set = &info->minimum_dependency_type_info_set; - isize index = type_info_index(info, type, err_on_not_found); - if (index >= 0) { - auto *found = map_get(set, index); - if (found) { - GB_ASSERT(*found >= 0); - return *found + 1; - } - } - if (err_on_not_found) { - GB_PANIC("NOT FOUND lb_type_info_index '%s' @ index %td", type_to_string(type), index); - } - return -1; -} - -gb_internal cgValue cg_type_info(cgProcedure *p, Type *type) { - GB_ASSERT(!build_context.no_rtti); - - type = default_type(type); - - isize index = cg_type_info_index(p->module->info, type); - GB_ASSERT(index >= 0); - - cgValue data = cg_global_type_info_data_ptr(p); - return cg_emit_array_epi(p, data, index); -} - - -gb_internal u64 cg_typeid_as_u64(cgModule *m, Type *type) { - GB_ASSERT(!build_context.no_rtti); - - type = default_type(type); - - u64 id = cast(u64)cg_type_info_index(m->info, type); - GB_ASSERT(id >= 0); - - u64 kind = Typeid_Invalid; - u64 named = is_type_named(type) && type->kind != Type_Basic; - u64 special = 0; - u64 reserved = 0; - - Type *bt = base_type(type); - TypeKind tk = bt->kind; - switch (tk) { - case Type_Basic: { - u32 flags = bt->Basic.flags; - if (flags & BasicFlag_Boolean) kind = Typeid_Boolean; - if (flags & BasicFlag_Integer) kind = Typeid_Integer; - if (flags & BasicFlag_Unsigned) kind = Typeid_Integer; - if (flags & BasicFlag_Float) kind = Typeid_Float; - if (flags & BasicFlag_Complex) kind = Typeid_Complex; - if (flags & BasicFlag_Pointer) kind = Typeid_Pointer; - if (flags & BasicFlag_String) kind = Typeid_String; - if (flags & BasicFlag_Rune) kind = Typeid_Rune; - } break; - case Type_Pointer: kind = Typeid_Pointer; break; - case Type_MultiPointer: kind = Typeid_Multi_Pointer; break; - case Type_Array: kind = Typeid_Array; break; - case Type_Matrix: kind = Typeid_Matrix; break; - case Type_EnumeratedArray: kind = Typeid_Enumerated_Array; break; - case Type_Slice: kind = Typeid_Slice; break; - case Type_DynamicArray: kind = Typeid_Dynamic_Array; break; - case Type_Map: kind = Typeid_Map; break; - case Type_Struct: kind = Typeid_Struct; break; - case Type_Enum: kind = Typeid_Enum; break; - case Type_Union: kind = Typeid_Union; break; - case Type_Tuple: kind = Typeid_Tuple; break; - case Type_Proc: kind = Typeid_Procedure; break; - case Type_BitSet: kind = Typeid_Bit_Set; break; - case Type_SimdVector: kind = Typeid_Simd_Vector; break; - case Type_RelativePointer: kind = Typeid_Relative_Pointer; break; - case Type_RelativeMultiPointer: kind = Typeid_Relative_Multi_Pointer; break; - case Type_SoaPointer: kind = Typeid_SoaPointer; break; - } - - if (is_type_cstring(type)) { - special = 1; - } else if (is_type_integer(type) && !is_type_unsigned(type)) { - special = 1; - } - - u64 data = 0; - if (build_context.ptr_size == 4) { - GB_ASSERT(id <= (1u<<24u)); - data |= (id &~ (1u<<24)) << 0u; // index - data |= (kind &~ (1u<<5)) << 24u; // kind - data |= (named &~ (1u<<1)) << 29u; // named - data |= (special &~ (1u<<1)) << 30u; // special - data |= (reserved &~ (1u<<1)) << 31u; // reserved - } else { - GB_ASSERT(build_context.ptr_size == 8); - GB_ASSERT(id <= (1ull<<56u)); - data |= (id &~ (1ull<<56)) << 0ul; // index - data |= (kind &~ (1ull<<5)) << 56ull; // kind - data |= (named &~ (1ull<<1)) << 61ull; // named - data |= (special &~ (1ull<<1)) << 62ull; // special - data |= (reserved &~ (1ull<<1)) << 63ull; // reserved - } - - return data; -} - -gb_internal cgValue cg_typeid(cgProcedure *p, Type *t) { - u64 x = cg_typeid_as_u64(p->module, t); - return cg_value(tb_inst_uint(p->func, cg_data_type(t_typeid), x), t_typeid); -} - - - - -gb_internal void cg_set_type_info_member_types(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, Type *(*type_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_types.index * type_size_of(cg_global_type_info_member_types.elem_type); - cg_global_type_info_member_types.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_types.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_types.elem_type); - Type *type = type_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - cg_global_const_type_info_ptr(m, type, cg_global_type_info_member_types.global, offset_for_elem); - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - - -gb_internal void cg_set_type_info_member_names(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, String (*name_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_names.index * type_size_of(cg_global_type_info_member_names.elem_type); - cg_global_type_info_member_names.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_names.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_names.elem_type); - String name = name_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - cg_global_const_string(m, name, cg_global_type_info_member_names.elem_type, cg_global_type_info_member_names.global, offset_for_elem); - - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - - -gb_internal void cg_set_type_info_member_offsets(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, i64 (*offset_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_offsets.index * type_size_of(cg_global_type_info_member_offsets.elem_type); - cg_global_type_info_member_offsets.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_offsets.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_offsets.elem_type); - i64 the_offset = offset_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - - void *offset_ptr = tb_global_add_region(m->mod, cg_global_type_info_member_offsets.global, offset_for_elem, elem_size); - cg_write_uint_at_ptr(offset_ptr, the_offset, t_uintptr); - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - -gb_internal void cg_set_type_info_member_usings(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, bool (*usings_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_usings.index * type_size_of(cg_global_type_info_member_usings.elem_type); - cg_global_type_info_member_usings.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_usings.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_usings.elem_type); - GB_ASSERT(elem_size == 1); - bool the_usings = usings_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - - bool *usings_ptr = cast(bool *)tb_global_add_region(m->mod, cg_global_type_info_member_usings.global, offset_for_elem, 1); - *usings_ptr = the_usings; - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - - - -gb_internal void cg_set_type_info_member_tags(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, String (*tag_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_tags.index * type_size_of(cg_global_type_info_member_tags.elem_type); - cg_global_type_info_member_tags.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_tags.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_tags.elem_type); - String tag = tag_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - cg_global_const_string(m, tag, cg_global_type_info_member_tags.elem_type, cg_global_type_info_member_tags.global, offset_for_elem); - - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - -gb_internal void cg_set_type_info_member_enum_values(cgModule *m, TB_Global *global, isize offset, isize count, void *userdata, i64 (*value_proc)(isize index, void *userdata)) { - if (count == 0) { - return; - } - void *data_ptr = tb_global_add_region(m->mod, global, offset+0, build_context.ptr_size); - i64 offset_in_bytes = cg_global_type_info_member_enum_values.index * type_size_of(cg_global_type_info_member_enum_values.elem_type); - cg_global_type_info_member_enum_values.index += count; - - cg_write_int_at_ptr(data_ptr, offset_in_bytes, t_uintptr); - tb_global_add_symbol_reloc(m->mod, global, offset+0, cast(TB_Symbol *)cg_global_type_info_member_enum_values.global); - - for (isize i = 0; i < count; i++) { - i64 elem_size = type_size_of(cg_global_type_info_member_enum_values.elem_type); - GB_ASSERT(elem_size == 8); - i64 the_value = value_proc(i, userdata); - i64 offset_for_elem = offset_in_bytes + i*elem_size; - - void *offset_ptr = tb_global_add_region(m->mod, cg_global_type_info_member_enum_values.global, offset_for_elem, elem_size); - cg_write_uint_at_ptr(offset_ptr, the_value, cg_global_type_info_member_enum_values.elem_type); - } - - void *len_ptr = tb_global_add_region(m->mod, global, offset+build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, count, t_int); -} - - - -gb_internal void cg_setup_type_info_data(cgModule *m) { - if (build_context.no_rtti) { - return; - } - - CheckerInfo *info = m->info; - { // Add type info data - isize max_type_info_count = info->minimum_dependency_type_info_set.count+1; - // gb_printf_err("max_type_info_count: %td\n", max_type_info_count); - Type *t = alloc_type_array(t_type_info, max_type_info_count); - - i64 max_objects = cast(i64)max_type_info_count * cg_global_const_calculate_region_count_from_basic_type(t_type_info); - - TB_Global *g = tb_global_create(m->mod, -1, CG_TYPE_INFO_DATA_NAME, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, max_objects); - - cgValue value = cg_value(g, alloc_type_pointer(t)); - cg_global_type_info_data_entity = alloc_entity_variable(nullptr, make_token_ident(CG_TYPE_INFO_DATA_NAME), t, EntityState_Resolved); - cg_add_symbol(m, cg_global_type_info_data_entity, cast(TB_Symbol *)g); - cg_add_entity(m, cg_global_type_info_data_entity, value); - } - - { // Type info member buffer - // NOTE(bill): Removes need for heap allocation by making it global memory - isize count = 0; - isize enum_count = 0; - - for (Type *t : m->info->type_info_types) { - isize index = cg_type_info_index(m->info, t, false); - if (index < 0) { - continue; - } - - switch (t->kind) { - case Type_Union: - count += t->Union.variants.count; - break; - case Type_Struct: - count += t->Struct.fields.count; - break; - case Type_Tuple: - count += t->Tuple.variables.count; - break; - case Type_Enum: - enum_count += t->Enum.fields.count; - break; - } - } - - if (count > 0) { - char const *name = CG_TYPE_INFO_TYPES_NAME; - Type *t = alloc_type_array(t_type_info_ptr, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); - cg_global_type_info_member_types = GlobalTypeInfoData{g, t, t_type_info_ptr, 0}; - } - if (count > 0 || enum_count > 0) { - char const *name = CG_TYPE_INFO_NAMES_NAME; - Type *t = alloc_type_array(t_string, (enum_count+count)); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, (enum_count+count)*3); - cg_global_type_info_member_names = GlobalTypeInfoData{g, t, t_string, 0}; - } - if (count > 0) { - char const *name = CG_TYPE_INFO_OFFSETS_NAME; - Type *t = alloc_type_array(t_uintptr, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); - cg_global_type_info_member_offsets = GlobalTypeInfoData{g, t, t_uintptr, 0}; - } - - if (count > 0) { - char const *name = CG_TYPE_INFO_USINGS_NAME; - Type *t = alloc_type_array(t_bool, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); - cg_global_type_info_member_usings = GlobalTypeInfoData{g, t, t_bool, 0}; - } - - if (count > 0) { - char const *name = CG_TYPE_INFO_TAGS_NAME; - Type *t = alloc_type_array(t_string, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); - cg_global_type_info_member_tags = GlobalTypeInfoData{g, t, t_string, 0}; - } - - if (enum_count > 0) { - char const *name = CG_TYPE_INFO_ENUM_VALUES_NAME; - Type *t = alloc_type_array(t_i64, enum_count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, enum_count); - cg_global_type_info_member_enum_values = GlobalTypeInfoData{g, t, t_i64, 0}; - } - } - gb_unused(info); - - - i64 global_type_info_data_entity_count = 0; - - // NOTE(bill): Set the type_table slice with the global backing array - TB_Global *type_table_slice = cast(TB_Global *)cg_find_symbol_from_entity(m, scope_lookup_current(m->info->runtime_package->scope, str_lit("type_table"))); - GB_ASSERT(type_table_slice != nullptr); - - TB_Global *type_table_array = cast(TB_Global *)cg_find_symbol_from_entity(m, cg_global_type_info_data_entity); - GB_ASSERT(type_table_array != nullptr); - - Type *type = base_type(cg_global_type_info_data_entity->type); - GB_ASSERT(is_type_array(type)); - global_type_info_data_entity_count = type->Array.count; - - tb_global_add_symbol_reloc(m->mod, type_table_slice, 0, cast(TB_Symbol *)type_table_array); - - void *len_ptr = tb_global_add_region(m->mod, type_table_slice, build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(len_ptr, type->Array.count, t_int); - - // Useful types - Entity *type_info_flags_entity = find_core_entity(info->checker, str_lit("Type_Info_Flags")); - Type *t_type_info_flags = type_info_flags_entity->type; - GB_ASSERT(type_size_of(t_type_info_flags) == 4); - - auto entries_handled = slice_make(heap_allocator(), cast(isize)global_type_info_data_entity_count); - defer (gb_free(heap_allocator(), entries_handled.data)); - entries_handled[0] = true; - - - i64 type_info_size = type_size_of(t_type_info); - i64 size_offset = type_offset_of(t_type_info, 0); - i64 align_offset = type_offset_of(t_type_info, 1); - i64 flags_offset = type_offset_of(t_type_info, 2); - i64 id_offset = type_offset_of(t_type_info, 3); - i64 variant_offset = type_offset_of(t_type_info, 4); - - Type *type_info_union = base_type(t_type_info)->Struct.fields[4]->type; - GB_ASSERT(type_info_union->kind == Type_Union); - - i64 union_tag_offset = type_info_union->Union.variant_block_size; - Type *ti_union_tag_type = union_tag_type(type_info_union); - u64 union_tag_type_size = type_size_of(ti_union_tag_type); - - auto const &set_bool = [](cgModule *m, TB_Global *global, i64 offset, bool value) { - bool *ptr = cast(bool *)tb_global_add_region(m->mod, global, offset, 1); - *ptr = value; - }; - - - for_array(type_info_type_index, info->type_info_types) { - Type *t = info->type_info_types[type_info_type_index]; - if (t == nullptr || t == t_invalid) { - continue; - } - - isize entry_index = cg_type_info_index(info, t, false); - if (entry_index <= 0) { - continue; - } - - if (entries_handled[entry_index]) { - continue; - } - entries_handled[entry_index] = true; - - TB_Global *global = type_table_array; - - i64 offset = entry_index * type_info_size; - - i64 size = type_size_of(t); - i64 align = type_align_of(t); - u32 flags = type_info_flags_of_type(t); - u64 id = cg_typeid_as_u64(m, t); - - void *size_ptr = tb_global_add_region(m->mod, global, offset+size_offset, build_context.int_size); - void *align_ptr = tb_global_add_region(m->mod, global, offset+align_offset, build_context.int_size); - void *flags_ptr = tb_global_add_region(m->mod, global, offset+flags_offset, 4); - void *id_ptr = tb_global_add_region(m->mod, global, offset+id_offset, build_context.ptr_size); - cg_write_int_at_ptr (size_ptr, size, t_int); - cg_write_int_at_ptr (align_ptr, align, t_int); - cg_write_int_at_ptr (flags_ptr, flags, t_u32); - cg_write_uint_at_ptr(id_ptr, id, t_typeid); - - - // add data to the offset to make it easier to deal with later on - offset += variant_offset; - - Type *tag_type = nullptr; - - switch (t->kind) { - case Type_Named: { - // Type_Info_Named :: struct { - // name: string, - // base: ^Type_Info, - // pkg: string, - // loc: Source_Code_Location, - // } - tag_type = t_type_info_named; - - i64 name_offset = type_offset_of(tag_type, 0); - String name = t->Named.type_name->token.string; - cg_global_const_string(m, name, t_string, global, offset+name_offset); - - i64 base_offset = type_offset_of(tag_type, 1); - cg_global_const_type_info_ptr(m, t->Named.base, global, offset+base_offset); - - if (t->Named.type_name->pkg) { - i64 pkg_offset = type_offset_of(tag_type, 2); - String pkg_name = t->Named.type_name->pkg->name; - cg_global_const_string(m, pkg_name, t_string, global, offset+pkg_offset); - } - - String proc_name = {}; - if (t->Named.type_name->parent_proc_decl) { - DeclInfo *decl = t->Named.type_name->parent_proc_decl; - if (decl->entity && decl->entity->kind == Entity_Procedure) { - i64 name_offset = type_offset_of(tag_type, 0); - proc_name = decl->entity->token.string; - cg_global_const_string(m, proc_name, t_string, global, offset+name_offset); - } - } - - i64 loc_offset = type_offset_of(tag_type, 3); - TokenPos pos = t->Named.type_name->token.pos; - cg_global_source_code_location_const(m, proc_name, pos, global, offset+loc_offset); - - break; - } - - case Type_Basic: - switch (t->Basic.kind) { - case Basic_bool: - case Basic_b8: - case Basic_b16: - case Basic_b32: - case Basic_b64: - tag_type = t_type_info_boolean; - break; - - case Basic_i8: - case Basic_u8: - case Basic_i16: - case Basic_u16: - case Basic_i32: - case Basic_u32: - case Basic_i64: - case Basic_u64: - case Basic_i128: - case Basic_u128: - - case Basic_i16le: - case Basic_u16le: - case Basic_i32le: - case Basic_u32le: - case Basic_i64le: - case Basic_u64le: - case Basic_i128le: - case Basic_u128le: - case Basic_i16be: - case Basic_u16be: - case Basic_i32be: - case Basic_u32be: - case Basic_i64be: - case Basic_u64be: - case Basic_i128be: - case Basic_u128be: - - case Basic_int: - case Basic_uint: - case Basic_uintptr: { - tag_type = t_type_info_integer; - - bool is_signed = (t->Basic.flags & BasicFlag_Unsigned) == 0; - // NOTE(bill): This is matches the runtime layout - u8 endianness_value = 0; - if (t->Basic.flags & BasicFlag_EndianLittle) { - endianness_value = 1; - } else if (t->Basic.flags & BasicFlag_EndianBig) { - endianness_value = 2; - } - u8 *signed_ptr = cast(u8 *)tb_global_add_region(m->mod, global, offset+0, 1); - u8 *endianness_ptr = cast(u8 *)tb_global_add_region(m->mod, global, offset+1, 1); - *signed_ptr = is_signed; - *endianness_ptr = endianness_value; - break; - } - - case Basic_rune: - tag_type = t_type_info_rune; - break; - - case Basic_f16: - case Basic_f32: - case Basic_f64: - case Basic_f16le: - case Basic_f32le: - case Basic_f64le: - case Basic_f16be: - case Basic_f32be: - case Basic_f64be: - { - tag_type = t_type_info_float; - - // // NOTE(bill): This is matches the runtime layout - u8 endianness_value = 0; - if (t->Basic.flags & BasicFlag_EndianLittle) { - endianness_value = 1; - } else if (t->Basic.flags & BasicFlag_EndianBig) { - endianness_value = 2; - } - - u8 *ptr = cast(u8 *)tb_global_add_region(m->mod, global, offset+0, 1); - *ptr = endianness_value; - } - break; - - case Basic_complex32: - case Basic_complex64: - case Basic_complex128: - tag_type = t_type_info_complex; - break; - - case Basic_quaternion64: - case Basic_quaternion128: - case Basic_quaternion256: - tag_type = t_type_info_quaternion; - break; - - case Basic_rawptr: - tag_type = t_type_info_pointer; - break; - - case Basic_string: - tag_type = t_type_info_string; - break; - - case Basic_cstring: - tag_type = t_type_info_string; - set_bool(m, global, offset+0, true); - break; - - case Basic_any: - tag_type = t_type_info_any; - break; - - case Basic_typeid: - tag_type = t_type_info_typeid; - break; - } - break; - - case Type_Pointer: - tag_type = t_type_info_pointer; - cg_global_const_type_info_ptr(m, t->Pointer.elem, global, offset+0); - break; - case Type_MultiPointer: - tag_type = t_type_info_multi_pointer; - cg_global_const_type_info_ptr(m, t->MultiPointer.elem, global, offset+0); - break; - case Type_SoaPointer: - tag_type = t_type_info_soa_pointer; - cg_global_const_type_info_ptr(m, t->SoaPointer.elem, global, offset+0); - break; - - case Type_Array: - { - tag_type = t_type_info_array; - - cg_global_const_type_info_ptr(m, t->Array.elem, global, offset+0); - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+1*build_context.int_size, build_context.int_size); - void *count_ptr = tb_global_add_region(m->mod, global, offset+2*build_context.int_size, build_context.int_size); - - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->Array.elem), t_int); - cg_write_int_at_ptr(count_ptr, t->Array.count, t_int); - } - break; - - case Type_EnumeratedArray: - { - tag_type = t_type_info_enumerated_array; - - i64 elem_offset = type_offset_of(tag_type, 0); - i64 index_offset = type_offset_of(tag_type, 1); - i64 elem_size_offset = type_offset_of(tag_type, 2); - i64 count_offset = type_offset_of(tag_type, 3); - i64 min_value_offset = type_offset_of(tag_type, 4); - i64 max_value_offset = type_offset_of(tag_type, 5); - i64 is_sparse_offset = type_offset_of(tag_type, 6); - - cg_global_const_type_info_ptr(m, t->EnumeratedArray.elem, global, offset+elem_offset); - cg_global_const_type_info_ptr(m, t->EnumeratedArray.index, global, offset+index_offset); - - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+elem_size_offset, build_context.int_size); - void *count_ptr = tb_global_add_region(m->mod, global, offset+count_offset, build_context.int_size); - - void *min_value_ptr = tb_global_add_region(m->mod, global, offset+min_value_offset, type_size_of(t_type_info_enum_value)); - void *max_value_ptr = tb_global_add_region(m->mod, global, offset+max_value_offset, type_size_of(t_type_info_enum_value)); - - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->EnumeratedArray.elem), t_int); - cg_write_int_at_ptr(count_ptr, t->EnumeratedArray.count, t_int); - - cg_write_int_at_ptr(min_value_ptr, exact_value_to_i64(*t->EnumeratedArray.min_value), t_type_info_enum_value); - cg_write_int_at_ptr(max_value_ptr, exact_value_to_i64(*t->EnumeratedArray.max_value), t_type_info_enum_value); - set_bool(m, global, offset+is_sparse_offset, t->EnumeratedArray.is_sparse); - } - break; - - case Type_DynamicArray: - { - tag_type = t_type_info_dynamic_array; - - cg_global_const_type_info_ptr(m, t->DynamicArray.elem, global, offset+0); - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+1*build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->DynamicArray.elem), t_int); - } - break; - case Type_Slice: - { - tag_type = t_type_info_slice; - - cg_global_const_type_info_ptr(m, t->Slice.elem, global, offset+0); - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+1*build_context.int_size, build_context.int_size); - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->Slice.elem), t_int); - } - break; - - case Type_Proc: - { - tag_type = t_type_info_procedure; - - i64 params_offset = type_offset_of(tag_type, 0); - i64 results_offset = type_offset_of(tag_type, 1); - i64 variadic_offset = type_offset_of(tag_type, 2); - i64 convention_offset = type_offset_of(tag_type, 3); - - if (t->Proc.params) { - cg_global_const_type_info_ptr(m, t->Proc.params, global, offset+params_offset); - } - if (t->Proc.results) { - cg_global_const_type_info_ptr(m, t->Proc.results, global, offset+results_offset); - } - - set_bool(m, global, offset+variadic_offset, t->Proc.variadic); - - u8 *convention_ptr = cast(u8 *)tb_global_add_region(m->mod, global, offset+convention_offset, 1); - *convention_ptr = cast(u8)t->Proc.calling_convention; - } - break; - - case Type_Tuple: - { - tag_type = t_type_info_parameters; - - i64 types_offset = type_offset_of(tag_type, 0); - i64 names_offset = type_offset_of(tag_type, 1); - - i64 count = t->Tuple.variables.count; - - cg_set_type_info_member_types(m, global, offset+types_offset, count, t, [](isize i, void *userdata) -> Type * { - Type *t = cast(Type *)userdata; - return t->Tuple.variables[i]->type; - }); - - cg_set_type_info_member_names(m, global, offset+names_offset, count, t, [](isize i, void *userdata) -> String { - Type *t = cast(Type *)userdata; - return t->Tuple.variables[i]->token.string; - }); - } - break; - - case Type_Enum: - { - tag_type = t_type_info_enum; - - i64 base_offset = type_offset_of(tag_type, 0); - i64 names_offset = type_offset_of(tag_type, 1); - i64 values_offset = type_offset_of(tag_type, 2); - - cg_global_const_type_info_ptr(m, t->Enum.base_type, global, offset+base_offset); - - i64 count = t->Enum.fields.count; - - cg_set_type_info_member_names(m, global, offset+names_offset, count, t, [](isize i, void *userdata) -> String { - Type *t = cast(Type *)userdata; - return t->Enum.fields[i]->token.string; - }); - - cg_set_type_info_member_enum_values(m, global, offset+values_offset, count, t, [](isize i, void *userdata) -> i64 { - Type *t = cast(Type *)userdata; - Entity *e = t->Enum.fields[i]; - GB_ASSERT(e->kind == Entity_Constant); - return exact_value_to_i64(e->Constant.value); - }); - } - break; - case Type_Struct: - { - tag_type = t_type_info_struct; - - i64 types_offset = type_offset_of(tag_type, 0); - i64 names_offset = type_offset_of(tag_type, 1); - i64 offsets_offset = type_offset_of(tag_type, 2); - i64 usings_offset = type_offset_of(tag_type, 3); - i64 tags_offset = type_offset_of(tag_type, 4); - - i64 is_packed_offset = type_offset_of(tag_type, 5); - i64 is_raw_union_offset = type_offset_of(tag_type, 6); - i64 custom_align_offset = type_offset_of(tag_type, 7); - - i64 equal_offset = type_offset_of(tag_type, 8); - - i64 soa_kind_offset = type_offset_of(tag_type, 9); - i64 soa_base_type_offset = type_offset_of(tag_type, 10); - i64 soa_len_offset = type_offset_of(tag_type, 11); - - // TODO(bill): equal proc stuff - gb_unused(equal_offset); - - i64 count = t->Struct.fields.count; - - cg_set_type_info_member_types(m, global, offset+types_offset, count, t, [](isize i, void *userdata) -> Type * { - Type *t = cast(Type *)userdata; - return t->Struct.fields[i]->type; - }); - - cg_set_type_info_member_names(m, global, offset+names_offset, count, t, [](isize i, void *userdata) -> String { - Type *t = cast(Type *)userdata; - return t->Struct.fields[i]->token.string; - }); - - cg_set_type_info_member_offsets(m, global, offset+offsets_offset, count, t, [](isize i, void *userdata) -> i64 { - Type *t = cast(Type *)userdata; - return t->Struct.offsets[i]; - }); - - cg_set_type_info_member_usings(m, global, offset+usings_offset, count, t, [](isize i, void *userdata) -> bool { - Type *t = cast(Type *)userdata; - return (t->Struct.fields[i]->flags & EntityFlag_Using) != 0; - }); - - cg_set_type_info_member_tags(m, global, offset+tags_offset, count, t, [](isize i, void *userdata) -> String { - Type *t = cast(Type *)userdata; - return t->Struct.tags[i]; - }); - - - set_bool(m, global, offset+is_packed_offset, t->Struct.is_packed); - set_bool(m, global, offset+is_raw_union_offset, t->Struct.is_raw_union); - set_bool(m, global, offset+custom_align_offset, t->Struct.custom_align != 0); - - if (t->Struct.soa_kind != StructSoa_None) { - u8 *kind_ptr = cast(u8 *)tb_global_add_region(m->mod, global, offset+soa_kind_offset, 1); - *kind_ptr = cast(u8)t->Struct.soa_kind; - - cg_global_const_type_info_ptr(m, t->Struct.soa_elem, global, offset+soa_base_type_offset); - - void *soa_len_ptr = tb_global_add_region(m->mod, global, offset+soa_len_offset, build_context.int_size); - cg_write_int_at_ptr(soa_len_ptr, t->Struct.soa_count, t_int); - } - } - break; - case Type_Union: - { - tag_type = t_type_info_union; - - i64 variants_offset = type_offset_of(tag_type, 0); - i64 tag_offset_offset = type_offset_of(tag_type, 1); - i64 tag_type_offset = type_offset_of(tag_type, 2); - - i64 equal_offset = type_offset_of(tag_type, 3); - - i64 custom_align_offset = type_offset_of(tag_type, 4); - i64 no_nil_offset = type_offset_of(tag_type, 5); - i64 shared_nil_offset = type_offset_of(tag_type, 6); - - // TODO(bill): equal procs - gb_unused(equal_offset); - - i64 count = t->Union.variants.count; - - cg_set_type_info_member_types(m, global, offset+variants_offset, count, t, [](isize i, void *userdata) -> Type * { - Type *t = cast(Type *)userdata; - return t->Union.variants[i]; - }); - - void *tag_offset_ptr = tb_global_add_region(m->mod, global, offset+tag_offset_offset, build_context.ptr_size); - cg_write_uint_at_ptr(tag_offset_ptr, t->Union.variant_block_size, t_uintptr); - - cg_global_const_type_info_ptr(m, union_tag_type(t), global, offset+tag_type_offset); - - set_bool(m, global, offset+custom_align_offset, t->Union.custom_align != 0); - set_bool(m, global, offset+no_nil_offset, t->Union.kind == UnionType_no_nil); - set_bool(m, global, offset+shared_nil_offset, t->Union.kind == UnionType_shared_nil); - } - break; - case Type_Map: - { - tag_type = t_type_info_map; - - i64 key_offset = type_offset_of(tag_type, 0); - i64 value_offset = type_offset_of(tag_type, 1); - i64 map_info_offset = type_offset_of(tag_type, 2); - - // TODO(bill): map info - gb_unused(map_info_offset); - - cg_global_const_type_info_ptr(m, t->Map.key, global, offset+key_offset); - cg_global_const_type_info_ptr(m, t->Map.value, global, offset+value_offset); - - } - break; - case Type_BitSet: - { - tag_type = t_type_info_bit_set; - - i64 elem_offset = type_offset_of(tag_type, 0); - i64 underlying_offset = type_offset_of(tag_type, 1); - i64 lower_offset = type_offset_of(tag_type, 2); - i64 upper_offset = type_offset_of(tag_type, 3); - - cg_global_const_type_info_ptr(m, t->BitSet.elem, global, offset+elem_offset); - if (t->BitSet.underlying) { - cg_global_const_type_info_ptr(m, t->BitSet.underlying, global, offset+underlying_offset); - } - - void *lower_ptr = tb_global_add_region(m->mod, global, offset+lower_offset, 8); - void *upper_ptr = tb_global_add_region(m->mod, global, offset+upper_offset, 8); - - cg_write_int_at_ptr(lower_ptr, t->BitSet.lower, t_i64); - cg_write_int_at_ptr(upper_ptr, t->BitSet.upper, t_i64); - } - break; - case Type_SimdVector: - { - tag_type = t_type_info_simd_vector; - - i64 elem_offset = type_offset_of(tag_type, 0); - i64 elem_size_offset = type_offset_of(tag_type, 1); - i64 count_offset = type_offset_of(tag_type, 2); - - cg_global_const_type_info_ptr(m, t->SimdVector.elem, global, offset+elem_offset); - - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+elem_size_offset, build_context.int_size); - void *count_ptr = tb_global_add_region(m->mod, global, offset+count_offset, build_context.int_size); - - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->SimdVector.elem), t_int); - cg_write_int_at_ptr(count_ptr, t->SimdVector.count, t_int); - } - break; - - case Type_RelativePointer: - { - tag_type = t_type_info_relative_pointer; - - i64 pointer_offset = type_offset_of(tag_type, 0); - i64 base_integer_offset = type_offset_of(tag_type, 1); - - cg_global_const_type_info_ptr(m, t->RelativePointer.pointer_type, global, offset+pointer_offset); - cg_global_const_type_info_ptr(m, t->RelativePointer.base_integer, global, offset+base_integer_offset); - } - break; - case Type_RelativeMultiPointer: - { - tag_type = t_type_info_relative_multi_pointer; - - i64 pointer_offset = type_offset_of(tag_type, 0); - i64 base_integer_offset = type_offset_of(tag_type, 1); - - cg_global_const_type_info_ptr(m, t->RelativePointer.pointer_type, global, offset+pointer_offset); - cg_global_const_type_info_ptr(m, t->RelativePointer.base_integer, global, offset+base_integer_offset); - } - break; - case Type_Matrix: - { - tag_type = t_type_info_matrix; - - i64 elem_offset = type_offset_of(tag_type, 0); - i64 elem_size_offset = type_offset_of(tag_type, 1); - i64 elem_stride_offset = type_offset_of(tag_type, 2); - i64 row_count_offset = type_offset_of(tag_type, 3); - i64 column_count_offset = type_offset_of(tag_type, 4); - - cg_global_const_type_info_ptr(m, t->Matrix.elem, global, offset+elem_offset); - - void *elem_size_ptr = tb_global_add_region(m->mod, global, offset+elem_size_offset, build_context.int_size); - void *elem_stride_ptr = tb_global_add_region(m->mod, global, offset+elem_stride_offset, build_context.int_size); - void *row_count_ptr = tb_global_add_region(m->mod, global, offset+row_count_offset, build_context.int_size); - void *column_count_ptr = tb_global_add_region(m->mod, global, offset+column_count_offset, build_context.int_size); - - cg_write_int_at_ptr(elem_size_ptr, type_size_of(t->Matrix.elem), t_int); - cg_write_int_at_ptr(elem_stride_ptr, matrix_type_stride_in_elems(t), t_int); - cg_write_int_at_ptr(row_count_ptr, t->Matrix.row_count, t_int); - cg_write_int_at_ptr(column_count_ptr, t->Matrix.column_count, t_int); - - } - break; - } - - if (tag_type != nullptr) { - i64 union_index = union_variant_index(type_info_union, tag_type); - GB_ASSERT(union_index != 0); - void *tag_ptr = tb_global_add_region(m->mod, global, offset+union_tag_offset, union_tag_type_size); - cg_write_int_at_ptr(tag_ptr, union_index, ti_union_tag_type); - } - - } -} \ No newline at end of file