diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-23 10:24:05 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-23 10:24:05 +0200 |
| commit | f10f7ebbf1c9833c74d09db68c0a0f5a149bde8d (patch) | |
| tree | d25d97bafc0f762e537428f99607680aa5e434b3 /src/checker.cpp | |
| parent | 40ed7e48d0e4a1f000efbd03d19a4eebe9b8e2f6 (diff) | |
| parent | 17bbb48d8a04aaf6cc53777fe4da6ba1b7fff61b (diff) | |
Merge remote-tracking branch 'upstream/master' into prototype-fmt
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index e0b303369..f386d6da7 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -783,15 +783,6 @@ void init_universal(void) { } } - // TODO(bill): Set the correct arch for this - if (bc->metrics.arch == TargetArch_amd64 || bc->metrics.arch == TargetArch_386) { - t_vector_x86_mmx = alloc_type(Type_SimdVector); - t_vector_x86_mmx->SimdVector.is_x86_mmx = true; - - Entity *entity = alloc_entity(Entity_TypeName, nullptr, make_token_ident(str_lit("x86_mmx")), t_vector_x86_mmx); - add_global_entity(entity, intrinsics_pkg->scope); - } - bool defined_values_double_declaration = false; for_array(i, bc->defined_values.entries) { char const *name = cast(char const *)cast(uintptr)bc->defined_values.entries[i].key.key; @@ -1782,20 +1773,28 @@ void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("memory_equal"), str_lit("memory_compare"), str_lit("memory_compare_zero"), - - str_lit("bswap_16"), - str_lit("bswap_32"), - str_lit("bswap_64"), - str_lit("bswap_128"), - - str_lit("bswap_f16"), - str_lit("bswap_f32"), - str_lit("bswap_f64"), }; for (isize i = 0; i < gb_count_of(required_runtime_entities); i++) { force_add_dependency_entity(c, c->info.runtime_package->scope, required_runtime_entities[i]); } + if (!build_context.use_llvm_api) { + String other_required_runtime_entities[] = { + str_lit("bswap_16"), + str_lit("bswap_32"), + str_lit("bswap_64"), + str_lit("bswap_128"), + + str_lit("bswap_f16"), + str_lit("bswap_f32"), + str_lit("bswap_f64"), + }; + + for (isize i = 0; i < gb_count_of(other_required_runtime_entities); i++) { + force_add_dependency_entity(c, c->info.runtime_package->scope, other_required_runtime_entities[i]); + } + } + if (build_context.no_crt) { String required_no_crt_entities[] = { // NOTE(bill): Only if these exist @@ -2190,8 +2189,6 @@ Type *check_poly_path_pop(CheckerContext *c) { -void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); - Array<Entity *> proc_group_entities(CheckerContext *c, Operand o) { Array<Entity *> procs = {}; if (o.mode == Addressing_ProcGroup) { @@ -2574,6 +2571,29 @@ DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } } return true; + } else if (name == "optimization_mode") { + ExactValue ev = check_decl_attribute_value(c, value); + if (ev.kind == ExactValue_String) { + String mode = ev.value_string; + if (mode == "none") { + ac->optimization_mode = ProcedureOptimizationMode_None; + } else if (mode == "minimal") { + ac->optimization_mode = ProcedureOptimizationMode_Minimal; + } else if (mode == "size") { + ac->optimization_mode = ProcedureOptimizationMode_Size; + } else if (mode == "speed") { + ac->optimization_mode = ProcedureOptimizationMode_Speed; + } else { + error(elem, "Invalid optimization_mode for '%.*s'. Valid modes:", LIT(name)); + error_line("\tnone\n"); + error_line("\tminimal\n"); + error_line("\tsize\n"); + error_line("\tspeed\n"); + } + } else { + error(elem, "Expected a string for '%.*s'", LIT(name)); + } + return true; } return false; } |