mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
Add require flags to 128-bit integer procedures
This commit is contained in:
+9
-6
@@ -3753,12 +3753,15 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ
|
|||||||
x->mode = Addressing_Invalid;
|
x->mode = Addressing_Invalid;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool REQUIRE = true;
|
||||||
|
|
||||||
Type *bt = base_type(x->type);
|
Type *bt = base_type(x->type);
|
||||||
if (op.kind == Token_Mod || op.kind == Token_ModEq ||
|
if (op.kind == Token_Mod || op.kind == Token_ModEq ||
|
||||||
op.kind == Token_ModMod || op.kind == Token_ModModEq) {
|
op.kind == Token_ModMod || op.kind == Token_ModModEq) {
|
||||||
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
||||||
case Basic_u128: add_package_dependency(c, "runtime", "umodti3"); break;
|
case Basic_u128: add_package_dependency(c, "runtime", "umodti3", REQUIRE); break;
|
||||||
case Basic_i128: add_package_dependency(c, "runtime", "modti3"); break;
|
case Basic_i128: add_package_dependency(c, "runtime", "modti3", REQUIRE); break;
|
||||||
}
|
}
|
||||||
} else if (op.kind == Token_Quo || op.kind == Token_QuoEq) {
|
} else if (op.kind == Token_Quo || op.kind == Token_QuoEq) {
|
||||||
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
||||||
@@ -3769,8 +3772,8 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ
|
|||||||
case Basic_quaternion128: add_package_dependency(c, "runtime", "quo_quaternion128"); break;
|
case Basic_quaternion128: add_package_dependency(c, "runtime", "quo_quaternion128"); break;
|
||||||
case Basic_quaternion256: add_package_dependency(c, "runtime", "quo_quaternion256"); break;
|
case Basic_quaternion256: add_package_dependency(c, "runtime", "quo_quaternion256"); break;
|
||||||
|
|
||||||
case Basic_u128: add_package_dependency(c, "runtime", "udivti3"); break;
|
case Basic_u128: add_package_dependency(c, "runtime", "udivti3", REQUIRE); break;
|
||||||
case Basic_i128: add_package_dependency(c, "runtime", "divti3"); break;
|
case Basic_i128: add_package_dependency(c, "runtime", "divti3", REQUIRE); break;
|
||||||
}
|
}
|
||||||
} else if (op.kind == Token_Mul || op.kind == Token_MulEq) {
|
} else if (op.kind == Token_Mul || op.kind == Token_MulEq) {
|
||||||
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
if (bt->kind == Type_Basic) switch (bt->Basic.kind) {
|
||||||
@@ -3782,7 +3785,7 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ
|
|||||||
case Basic_u128:
|
case Basic_u128:
|
||||||
case Basic_i128:
|
case Basic_i128:
|
||||||
if (is_arch_wasm()) {
|
if (is_arch_wasm()) {
|
||||||
add_package_dependency(c, "runtime", "__multi3");
|
add_package_dependency(c, "runtime", "__multi3", REQUIRE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3791,7 +3794,7 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ
|
|||||||
case Basic_u128:
|
case Basic_u128:
|
||||||
case Basic_i128:
|
case Basic_i128:
|
||||||
if (is_arch_wasm()) {
|
if (is_arch_wasm()) {
|
||||||
add_package_dependency(c, "runtime", "__ashlti3");
|
add_package_dependency(c, "runtime", "__ashlti3", REQUIRE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -810,13 +810,16 @@ gb_internal AstPackage *get_core_package(CheckerInfo *info, String name) {
|
|||||||
return *found;
|
return *found;
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void add_package_dependency(CheckerContext *c, char const *package_name, char const *name) {
|
gb_internal void add_package_dependency(CheckerContext *c, char const *package_name, char const *name, bool required=false) {
|
||||||
String n = make_string_c(name);
|
String n = make_string_c(name);
|
||||||
AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name));
|
AstPackage *p = get_core_package(&c->checker->info, make_string_c(package_name));
|
||||||
Entity *e = scope_lookup(p->scope, n);
|
Entity *e = scope_lookup(p->scope, n);
|
||||||
GB_ASSERT_MSG(e != nullptr, "%s", name);
|
GB_ASSERT_MSG(e != nullptr, "%s", name);
|
||||||
GB_ASSERT(c->decl != nullptr);
|
GB_ASSERT(c->decl != nullptr);
|
||||||
e->flags |= EntityFlag_Used;
|
e->flags |= EntityFlag_Used;
|
||||||
|
if (required) {
|
||||||
|
e->flags |= EntityFlag_Require;
|
||||||
|
}
|
||||||
add_dependency(c->info, c->decl, e);
|
add_dependency(c->info, c->decl, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user