mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Add ODIN_NO_CRT global constant
This commit is contained in:
@@ -24,6 +24,43 @@ when ODIN_ARCH == "wasm32" || ODIN_ARCH == "wasm64" {
|
|||||||
}
|
}
|
||||||
return dst
|
return dst
|
||||||
|
|
||||||
|
}
|
||||||
|
} else when ODIN_NO_CRT {
|
||||||
|
@(link_name="memset")
|
||||||
|
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
||||||
|
if ptr != nil && len != 0 {
|
||||||
|
b := byte(val)
|
||||||
|
p := ([^]byte)(ptr)
|
||||||
|
for i in 0..<len {
|
||||||
|
p[i] = b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ptr
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_name="memmove")
|
||||||
|
memmove :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
|
||||||
|
if dst != src {
|
||||||
|
d, s := ([^]byte)(dst), ([^]byte)(src)
|
||||||
|
d_end, s_end := d[len:], s[len:]
|
||||||
|
for i := len-1; i >= 0; i -= 1 {
|
||||||
|
d[i] = s[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dst
|
||||||
|
|
||||||
|
}
|
||||||
|
@(link_name="memcpy")
|
||||||
|
memcpy :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
|
||||||
|
if dst != src {
|
||||||
|
d, s := ([^]byte)(dst), ([^]byte)(src)
|
||||||
|
d_end, s_end := d[len:], s[len:]
|
||||||
|
for i := len-1; i >= 0; i -= 1 {
|
||||||
|
d[i] = s[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dst
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
||||||
|
|||||||
@@ -19,10 +19,12 @@ windows_trap_type_assertion :: proc "contextless" () -> ! {
|
|||||||
windows_trap_array_bounds()
|
windows_trap_array_bounds()
|
||||||
}
|
}
|
||||||
|
|
||||||
// @private
|
when ODIN_NO_CRT {
|
||||||
// @(link_name="_tls_index")
|
@private
|
||||||
// _tls_index: u32;
|
@(link_name="_tls_index")
|
||||||
|
_tls_index: u32
|
||||||
|
|
||||||
// @private
|
@private
|
||||||
// @(link_name="_fltused")
|
@(link_name="_fltused")
|
||||||
// _fltused: i32 = 0x9875;
|
_fltused: i32 = 0x9875
|
||||||
|
}
|
||||||
+42
-34
@@ -2339,10 +2339,18 @@ matrix_type :: proc() {
|
|||||||
m4 := mat4(m2)
|
m4 := mat4(m2)
|
||||||
assert(m4[2, 2] == 1)
|
assert(m4[2, 2] == 1)
|
||||||
assert(m4[3, 3] == 1)
|
assert(m4[3, 3] == 1)
|
||||||
fmt.println("m2", m2)
|
fmt.printf("m2 %#v\n", m2)
|
||||||
fmt.println("m4", m4)
|
fmt.println("m4", m4)
|
||||||
fmt.println("mat2(m4)", mat2(m4))
|
fmt.println("mat2(m4)", mat2(m4))
|
||||||
assert(mat2(m4) == m2)
|
assert(mat2(m4) == m2)
|
||||||
|
|
||||||
|
b4 := mat4{
|
||||||
|
1, 2, 0, 0,
|
||||||
|
3, 4, 0, 0,
|
||||||
|
5, 0, 6, 0,
|
||||||
|
0, 7, 0, 8,
|
||||||
|
}
|
||||||
|
fmt.println("b4", matrix_flatten(b4))
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // Casting non-square matrices
|
{ // Casting non-square matrices
|
||||||
@@ -2414,39 +2422,39 @@ matrix_type :: proc() {
|
|||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
when true {
|
when true {
|
||||||
the_basics()
|
// the_basics()
|
||||||
control_flow()
|
// control_flow()
|
||||||
named_proc_return_parameters()
|
// named_proc_return_parameters()
|
||||||
explicit_procedure_overloading()
|
// explicit_procedure_overloading()
|
||||||
struct_type()
|
// struct_type()
|
||||||
union_type()
|
// union_type()
|
||||||
using_statement()
|
// using_statement()
|
||||||
implicit_context_system()
|
// implicit_context_system()
|
||||||
parametric_polymorphism()
|
// parametric_polymorphism()
|
||||||
array_programming()
|
// array_programming()
|
||||||
map_type()
|
// map_type()
|
||||||
implicit_selector_expression()
|
// implicit_selector_expression()
|
||||||
partial_switch()
|
// partial_switch()
|
||||||
cstring_example()
|
// cstring_example()
|
||||||
bit_set_type()
|
// bit_set_type()
|
||||||
deferred_procedure_associations()
|
// deferred_procedure_associations()
|
||||||
reflection()
|
// reflection()
|
||||||
quaternions()
|
// quaternions()
|
||||||
unroll_for_statement()
|
// unroll_for_statement()
|
||||||
where_clauses()
|
// where_clauses()
|
||||||
foreign_system()
|
// foreign_system()
|
||||||
ranged_fields_for_array_compound_literals()
|
// ranged_fields_for_array_compound_literals()
|
||||||
deprecated_attribute()
|
// deprecated_attribute()
|
||||||
range_statements_with_multiple_return_values()
|
// range_statements_with_multiple_return_values()
|
||||||
threading_example()
|
// threading_example()
|
||||||
soa_struct_layout()
|
// soa_struct_layout()
|
||||||
constant_literal_expressions()
|
// constant_literal_expressions()
|
||||||
union_maybe()
|
// union_maybe()
|
||||||
explicit_context_definition()
|
// explicit_context_definition()
|
||||||
relative_data_types()
|
// relative_data_types()
|
||||||
or_else_operator()
|
// or_else_operator()
|
||||||
or_return_operator()
|
// or_return_operator()
|
||||||
arbitrary_precision_maths()
|
// arbitrary_precision_maths()
|
||||||
matrix_type()
|
matrix_type()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -782,6 +782,7 @@ void init_universal(void) {
|
|||||||
add_global_bool_constant("ODIN_DISABLE_ASSERT", bc->ODIN_DISABLE_ASSERT);
|
add_global_bool_constant("ODIN_DISABLE_ASSERT", bc->ODIN_DISABLE_ASSERT);
|
||||||
add_global_bool_constant("ODIN_DEFAULT_TO_NIL_ALLOCATOR", bc->ODIN_DEFAULT_TO_NIL_ALLOCATOR);
|
add_global_bool_constant("ODIN_DEFAULT_TO_NIL_ALLOCATOR", bc->ODIN_DEFAULT_TO_NIL_ALLOCATOR);
|
||||||
add_global_bool_constant("ODIN_NO_DYNAMIC_LITERALS", bc->no_dynamic_literals);
|
add_global_bool_constant("ODIN_NO_DYNAMIC_LITERALS", bc->no_dynamic_literals);
|
||||||
|
add_global_bool_constant("ODIN_NO_CRT", bc->no_crt);
|
||||||
add_global_bool_constant("ODIN_TEST", bc->command_kind == Command_test);
|
add_global_bool_constant("ODIN_TEST", bc->command_kind == Command_test);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -785,7 +785,7 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime)
|
|||||||
params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("fdwReason"), t_u32, false, true);
|
params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("fdwReason"), t_u32, false, true);
|
||||||
params->Tuple.variables[2] = alloc_entity_param(nullptr, make_token_ident("lpReserved"), t_rawptr, false, true);
|
params->Tuple.variables[2] = alloc_entity_param(nullptr, make_token_ident("lpReserved"), t_rawptr, false, true);
|
||||||
call_cleanup = false;
|
call_cleanup = false;
|
||||||
} else if (build_context.metrics.os == TargetOs_windows && build_context.metrics.arch == TargetArch_386) {
|
} else if (build_context.metrics.os == TargetOs_windows && (build_context.metrics.arch == TargetArch_386 || build_context.no_crt)) {
|
||||||
name = str_lit("mainCRTStartup");
|
name = str_lit("mainCRTStartup");
|
||||||
} else if (is_arch_wasm()) {
|
} else if (is_arch_wasm()) {
|
||||||
name = str_lit("_start");
|
name = str_lit("_start");
|
||||||
|
|||||||
Reference in New Issue
Block a user