mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Begin work on new pseudo-architecture: wasm64p32
This commit is contained in:
+1
-1
@@ -56,7 +56,7 @@ Allocator :: struct {
|
|||||||
DEFAULT_ALIGNMENT :: 2*align_of(rawptr)
|
DEFAULT_ALIGNMENT :: 2*align_of(rawptr)
|
||||||
|
|
||||||
DEFAULT_PAGE_SIZE ::
|
DEFAULT_PAGE_SIZE ::
|
||||||
64 * 1024 when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64 else
|
64 * 1024 when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 else
|
||||||
16 * 1024 when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 else
|
16 * 1024 when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 else
|
||||||
4 * 1024
|
4 * 1024
|
||||||
|
|
||||||
|
|||||||
@@ -471,7 +471,7 @@ Odin_OS_Type :: type_of(ODIN_OS)
|
|||||||
arm32,
|
arm32,
|
||||||
arm64,
|
arm64,
|
||||||
wasm32,
|
wasm32,
|
||||||
wasm64,
|
wasm64p32,
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
Odin_Arch_Type :: type_of(ODIN_ARCH)
|
Odin_Arch_Type :: type_of(ODIN_ARCH)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//+private
|
//+private
|
||||||
//+build wasm32, wasm64
|
//+build wasm32, wasm64p32
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package runtime
|
|||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
|
|
||||||
@(private="file")
|
@(private="file")
|
||||||
IS_WASM :: ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64
|
IS_WASM :: ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32
|
||||||
|
|
||||||
@(private)
|
@(private)
|
||||||
RUNTIME_LINKAGE :: "strong" when (
|
RUNTIME_LINKAGE :: "strong" when (
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ when ODIN_NO_CRT && ODIN_OS == .Windows {
|
|||||||
RtlMoveMemory(dst, src, len)
|
RtlMoveMemory(dst, src, len)
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
} else when ODIN_NO_CRT || (ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64) {
|
} else when ODIN_NO_CRT || (ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32) {
|
||||||
@(link_name="memset", linkage="strong", require)
|
@(link_name="memset", linkage="strong", require)
|
||||||
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
||||||
if ptr != nil && len != 0 {
|
if ptr != nil && len != 0 {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//+private
|
//+private
|
||||||
//+build wasm32, wasm64
|
//+build wasm32, wasm64p32
|
||||||
package sync
|
package sync
|
||||||
|
|
||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//+private
|
//+private
|
||||||
//+build wasm32, wasm64
|
//+build wasm32, wasm64p32
|
||||||
package sync
|
package sync
|
||||||
|
|
||||||
_current_thread_id :: proc "contextless" () -> int {
|
_current_thread_id :: proc "contextless" () -> int {
|
||||||
|
|||||||
+41
-14
@@ -35,7 +35,7 @@ enum TargetArchKind : u16 {
|
|||||||
TargetArch_arm32,
|
TargetArch_arm32,
|
||||||
TargetArch_arm64,
|
TargetArch_arm64,
|
||||||
TargetArch_wasm32,
|
TargetArch_wasm32,
|
||||||
TargetArch_wasm64,
|
TargetArch_wasm64p32,
|
||||||
|
|
||||||
TargetArch_COUNT,
|
TargetArch_COUNT,
|
||||||
};
|
};
|
||||||
@@ -81,7 +81,7 @@ gb_global String target_arch_names[TargetArch_COUNT] = {
|
|||||||
str_lit("arm32"),
|
str_lit("arm32"),
|
||||||
str_lit("arm64"),
|
str_lit("arm64"),
|
||||||
str_lit("wasm32"),
|
str_lit("wasm32"),
|
||||||
str_lit("wasm64"),
|
str_lit("wasm64p32"),
|
||||||
};
|
};
|
||||||
|
|
||||||
gb_global String target_endian_names[TargetEndian_COUNT] = {
|
gb_global String target_endian_names[TargetEndian_COUNT] = {
|
||||||
@@ -475,14 +475,32 @@ gb_global TargetMetrics target_wasi_wasm32 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
gb_global TargetMetrics target_js_wasm64 = {
|
gb_global TargetMetrics target_freestanding_wasm64p32 = {
|
||||||
TargetOs_js,
|
TargetOs_freestanding,
|
||||||
TargetArch_wasm64,
|
TargetArch_wasm64p32,
|
||||||
8, 8, 8, 16,
|
4, 8, 8, 16,
|
||||||
str_lit("wasm64-js-js"),
|
str_lit("wasm32-freestanding-js"),
|
||||||
str_lit(""),
|
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gb_global TargetMetrics target_js_wasm64p32 = {
|
||||||
|
TargetOs_js,
|
||||||
|
TargetArch_wasm64p32,
|
||||||
|
4, 8, 8, 16,
|
||||||
|
str_lit("wasm32-js-js"),
|
||||||
|
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
|
||||||
|
};
|
||||||
|
|
||||||
|
gb_global TargetMetrics target_wasi_wasm64p32 = {
|
||||||
|
TargetOs_wasi,
|
||||||
|
TargetArch_wasm32,
|
||||||
|
4, 8, 8, 16,
|
||||||
|
str_lit("wasm32-wasi-js"),
|
||||||
|
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gb_global TargetMetrics target_freestanding_amd64_sysv = {
|
gb_global TargetMetrics target_freestanding_amd64_sysv = {
|
||||||
TargetOs_freestanding,
|
TargetOs_freestanding,
|
||||||
TargetArch_amd64,
|
TargetArch_amd64,
|
||||||
@@ -502,20 +520,29 @@ struct NamedTargetMetrics {
|
|||||||
gb_global NamedTargetMetrics named_targets[] = {
|
gb_global NamedTargetMetrics named_targets[] = {
|
||||||
{ str_lit("darwin_amd64"), &target_darwin_amd64 },
|
{ str_lit("darwin_amd64"), &target_darwin_amd64 },
|
||||||
{ str_lit("darwin_arm64"), &target_darwin_arm64 },
|
{ str_lit("darwin_arm64"), &target_darwin_arm64 },
|
||||||
|
|
||||||
{ str_lit("essence_amd64"), &target_essence_amd64 },
|
{ str_lit("essence_amd64"), &target_essence_amd64 },
|
||||||
|
|
||||||
{ str_lit("linux_i386"), &target_linux_i386 },
|
{ str_lit("linux_i386"), &target_linux_i386 },
|
||||||
{ str_lit("linux_amd64"), &target_linux_amd64 },
|
{ str_lit("linux_amd64"), &target_linux_amd64 },
|
||||||
{ str_lit("linux_arm64"), &target_linux_arm64 },
|
{ str_lit("linux_arm64"), &target_linux_arm64 },
|
||||||
{ str_lit("linux_arm32"), &target_linux_arm32 },
|
{ str_lit("linux_arm32"), &target_linux_arm32 },
|
||||||
|
|
||||||
{ str_lit("windows_i386"), &target_windows_i386 },
|
{ str_lit("windows_i386"), &target_windows_i386 },
|
||||||
{ str_lit("windows_amd64"), &target_windows_amd64 },
|
{ str_lit("windows_amd64"), &target_windows_amd64 },
|
||||||
|
|
||||||
{ str_lit("freebsd_i386"), &target_freebsd_i386 },
|
{ str_lit("freebsd_i386"), &target_freebsd_i386 },
|
||||||
{ str_lit("freebsd_amd64"), &target_freebsd_amd64 },
|
{ str_lit("freebsd_amd64"), &target_freebsd_amd64 },
|
||||||
|
|
||||||
{ str_lit("openbsd_amd64"), &target_openbsd_amd64 },
|
{ str_lit("openbsd_amd64"), &target_openbsd_amd64 },
|
||||||
|
|
||||||
{ str_lit("freestanding_wasm32"), &target_freestanding_wasm32 },
|
{ str_lit("freestanding_wasm32"), &target_freestanding_wasm32 },
|
||||||
{ str_lit("wasi_wasm32"), &target_wasi_wasm32 },
|
{ str_lit("wasi_wasm32"), &target_wasi_wasm32 },
|
||||||
{ str_lit("js_wasm32"), &target_js_wasm32 },
|
{ str_lit("js_wasm32"), &target_js_wasm32 },
|
||||||
// { str_lit("js_wasm64"), &target_js_wasm64 },
|
|
||||||
|
{ str_lit("freestanding_wasm64p32"), &target_freestanding_wasm64p32 },
|
||||||
|
{ str_lit("js_wasm64p32"), &target_js_wasm64p32 },
|
||||||
|
{ str_lit("wasi_wasm64p32"), &target_wasi_wasm64p32 },
|
||||||
|
|
||||||
{ str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv },
|
{ str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv },
|
||||||
};
|
};
|
||||||
@@ -624,7 +651,7 @@ gb_internal bool find_library_collection_path(String name, String *path) {
|
|||||||
gb_internal bool is_arch_wasm(void) {
|
gb_internal bool is_arch_wasm(void) {
|
||||||
switch (build_context.metrics.arch) {
|
switch (build_context.metrics.arch) {
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -642,7 +669,7 @@ gb_internal bool is_arch_x86(void) {
|
|||||||
gb_internal bool allow_check_foreign_filepath(void) {
|
gb_internal bool allow_check_foreign_filepath(void) {
|
||||||
switch (build_context.metrics.arch) {
|
switch (build_context.metrics.arch) {
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -1266,9 +1293,9 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
|
|||||||
// link_flags = gb_string_appendc(link_flags, "--export-all ");
|
// link_flags = gb_string_appendc(link_flags, "--export-all ");
|
||||||
// link_flags = gb_string_appendc(link_flags, "--export-table ");
|
// link_flags = gb_string_appendc(link_flags, "--export-table ");
|
||||||
link_flags = gb_string_appendc(link_flags, "--allow-undefined ");
|
link_flags = gb_string_appendc(link_flags, "--allow-undefined ");
|
||||||
if (bc->metrics.arch == TargetArch_wasm64) {
|
// if (bc->metrics.arch == TargetArch_wasm64) {
|
||||||
link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
|
// link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
|
||||||
}
|
// }
|
||||||
if (bc->no_entry_point) {
|
if (bc->no_entry_point) {
|
||||||
link_flags = gb_string_appendc(link_flags, "--no-entry ");
|
link_flags = gb_string_appendc(link_flags, "--no-entry ");
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-7
@@ -971,13 +971,13 @@ gb_internal void init_universal(void) {
|
|||||||
|
|
||||||
{
|
{
|
||||||
GlobalEnumValue values[TargetArch_COUNT] = {
|
GlobalEnumValue values[TargetArch_COUNT] = {
|
||||||
{"Unknown", TargetArch_Invalid},
|
{"Unknown", TargetArch_Invalid},
|
||||||
{"amd64", TargetArch_amd64},
|
{"amd64", TargetArch_amd64},
|
||||||
{"i386", TargetArch_i386},
|
{"i386", TargetArch_i386},
|
||||||
{"arm32", TargetArch_arm32},
|
{"arm32", TargetArch_arm32},
|
||||||
{"arm64", TargetArch_arm64},
|
{"arm64", TargetArch_arm64},
|
||||||
{"wasm32", TargetArch_wasm32},
|
{"wasm32", TargetArch_wasm32},
|
||||||
{"wasm64", TargetArch_wasm64},
|
{"wasm64p32", TargetArch_wasm64p32},
|
||||||
};
|
};
|
||||||
|
|
||||||
auto fields = add_global_enum_type(str_lit("Odin_Arch_Type"), values, gb_count_of(values));
|
auto fields = add_global_enum_type(str_lit("Odin_Arch_Type"), values, gb_count_of(values));
|
||||||
|
|||||||
+1
-1
@@ -1467,7 +1467,7 @@ gb_internal LB_ABI_INFO(lb_get_abi_info_internal) {
|
|||||||
case TargetArch_arm64:
|
case TargetArch_arm64:
|
||||||
return lbAbiArm64::abi_info(c, arg_types, arg_count, return_type, return_is_defined, return_is_tuple, calling_convention);
|
return lbAbiArm64::abi_info(c, arg_types, arg_count, return_type, return_is_defined, return_is_tuple, calling_convention);
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
return lbAbiWasm::abi_info(c, arg_types, arg_count, return_type, return_is_defined, return_is_tuple, calling_convention);
|
return lbAbiWasm::abi_info(c, arg_types, arg_count, return_type, return_is_defined, return_is_tuple, calling_convention);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1975,7 +1975,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
|
|||||||
LLVMInitializeAArch64Disassembler();
|
LLVMInitializeAArch64Disassembler();
|
||||||
break;
|
break;
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
LLVMInitializeWebAssemblyTargetInfo();
|
LLVMInitializeWebAssemblyTargetInfo();
|
||||||
LLVMInitializeWebAssemblyTarget();
|
LLVMInitializeWebAssemblyTarget();
|
||||||
LLVMInitializeWebAssemblyTargetMC();
|
LLVMInitializeWebAssemblyTargetMC();
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ gb_internal bool lb_is_matrix_simdable(Type *t) {
|
|||||||
return true;
|
return true;
|
||||||
case TargetArch_i386:
|
case TargetArch_i386:
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1685,7 +1685,7 @@ gb_internal lbValue lb_emit_mul_add(lbProcedure *p, lbValue a, lbValue b, lbValu
|
|||||||
break;
|
break;
|
||||||
case TargetArch_i386:
|
case TargetArch_i386:
|
||||||
case TargetArch_wasm32:
|
case TargetArch_wasm32:
|
||||||
case TargetArch_wasm64:
|
case TargetArch_wasm64p32:
|
||||||
is_possible = false;
|
is_possible = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//+build js wasm32, js wasm64
|
//+build js wasm32, js wasm64p32
|
||||||
package wasm_js_interface
|
package wasm_js_interface
|
||||||
|
|
||||||
foreign import dom_lib "odin_dom"
|
foreign import dom_lib "odin_dom"
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//+build js wasm32, js wasm64
|
//+build js wasm32, js wasm64p32
|
||||||
package wasm_js_interface
|
package wasm_js_interface
|
||||||
|
|
||||||
foreign import dom_lib "odin_dom"
|
foreign import dom_lib "odin_dom"
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//+build js wasm32, js wasm64
|
//+build js wasm32, js wasm64p32
|
||||||
package wasm_js_interface
|
package wasm_js_interface
|
||||||
|
|
||||||
foreign import "odin_env"
|
foreign import "odin_env"
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
//+build js wasm32, js wasm64
|
//+build js wasm32, js wasm64p32
|
||||||
package wasm_js_interface
|
package wasm_js_interface
|
||||||
|
|
||||||
import "core:mem"
|
import "core:mem"
|
||||||
|
|||||||
Reference in New Issue
Block a user