aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-04-20 12:02:32 +0100
committergingerBill <bill@gingerbill.org>2023-04-20 12:02:32 +0100
commitf5d9ca64f95ab47b6c2809275755ebca260c9448 (patch)
tree9866cb910639ddaf5438d25d83dcb6428ea4e092 /src
parentcde442fa2cb8ebd2a2e305b75f677348c17bb768 (diff)
Begin work on new pseudo-architecture: wasm64p32
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp53
-rw-r--r--src/checker.cpp14
-rw-r--r--src/llvm_abi.cpp2
-rw-r--r--src/llvm_backend.cpp2
-rw-r--r--src/llvm_backend_expr.cpp2
-rw-r--r--src/llvm_backend_utility.cpp2
6 files changed, 51 insertions, 24 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index b4a6f2a12..63997c2d1 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -35,7 +35,7 @@ enum TargetArchKind : u16 {
TargetArch_arm32,
TargetArch_arm64,
TargetArch_wasm32,
- TargetArch_wasm64,
+ TargetArch_wasm64p32,
TargetArch_COUNT,
};
@@ -81,7 +81,7 @@ gb_global String target_arch_names[TargetArch_COUNT] = {
str_lit("arm32"),
str_lit("arm64"),
str_lit("wasm32"),
- str_lit("wasm64"),
+ str_lit("wasm64p32"),
};
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_freestanding,
+ TargetArch_wasm64p32,
+ 4, 8, 8, 16,
+ str_lit("wasm32-freestanding-js"),
+ str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
+};
+
+gb_global TargetMetrics target_js_wasm64p32 = {
TargetOs_js,
- TargetArch_wasm64,
- 8, 8, 8, 16,
- str_lit("wasm64-js-js"),
- str_lit(""),
+ 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 = {
TargetOs_freestanding,
TargetArch_amd64,
@@ -502,20 +520,29 @@ struct NamedTargetMetrics {
gb_global NamedTargetMetrics named_targets[] = {
{ str_lit("darwin_amd64"), &target_darwin_amd64 },
{ str_lit("darwin_arm64"), &target_darwin_arm64 },
+
{ str_lit("essence_amd64"), &target_essence_amd64 },
+
{ str_lit("linux_i386"), &target_linux_i386 },
{ str_lit("linux_amd64"), &target_linux_amd64 },
{ str_lit("linux_arm64"), &target_linux_arm64 },
{ str_lit("linux_arm32"), &target_linux_arm32 },
+
{ str_lit("windows_i386"), &target_windows_i386 },
{ str_lit("windows_amd64"), &target_windows_amd64 },
+
{ str_lit("freebsd_i386"), &target_freebsd_i386 },
{ str_lit("freebsd_amd64"), &target_freebsd_amd64 },
+
{ str_lit("openbsd_amd64"), &target_openbsd_amd64 },
+
{ str_lit("freestanding_wasm32"), &target_freestanding_wasm32 },
{ str_lit("wasi_wasm32"), &target_wasi_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 },
};
@@ -624,7 +651,7 @@ gb_internal bool find_library_collection_path(String name, String *path) {
gb_internal bool is_arch_wasm(void) {
switch (build_context.metrics.arch) {
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
return true;
}
return false;
@@ -642,7 +669,7 @@ gb_internal bool is_arch_x86(void) {
gb_internal bool allow_check_foreign_filepath(void) {
switch (build_context.metrics.arch) {
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
return false;
}
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-table ");
link_flags = gb_string_appendc(link_flags, "--allow-undefined ");
- if (bc->metrics.arch == TargetArch_wasm64) {
- link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
- }
+ // if (bc->metrics.arch == TargetArch_wasm64) {
+ // link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
+ // }
if (bc->no_entry_point) {
link_flags = gb_string_appendc(link_flags, "--no-entry ");
}
diff --git a/src/checker.cpp b/src/checker.cpp
index a6768d495..f820a1468 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -971,13 +971,13 @@ gb_internal void init_universal(void) {
{
GlobalEnumValue values[TargetArch_COUNT] = {
- {"Unknown", TargetArch_Invalid},
- {"amd64", TargetArch_amd64},
- {"i386", TargetArch_i386},
- {"arm32", TargetArch_arm32},
- {"arm64", TargetArch_arm64},
- {"wasm32", TargetArch_wasm32},
- {"wasm64", TargetArch_wasm64},
+ {"Unknown", TargetArch_Invalid},
+ {"amd64", TargetArch_amd64},
+ {"i386", TargetArch_i386},
+ {"arm32", TargetArch_arm32},
+ {"arm64", TargetArch_arm64},
+ {"wasm32", TargetArch_wasm32},
+ {"wasm64p32", TargetArch_wasm64p32},
};
auto fields = add_global_enum_type(str_lit("Odin_Arch_Type"), values, gb_count_of(values));
diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp
index dabdd6829..3fc68644d 100644
--- a/src/llvm_abi.cpp
+++ b/src/llvm_abi.cpp
@@ -1467,7 +1467,7 @@ gb_internal LB_ABI_INFO(lb_get_abi_info_internal) {
case TargetArch_arm64:
return lbAbiArm64::abi_info(c, arg_types, arg_count, return_type, return_is_defined, return_is_tuple, calling_convention);
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);
}
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 4d8e13f0f..62fa52490 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1975,7 +1975,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
LLVMInitializeAArch64Disassembler();
break;
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
LLVMInitializeWebAssemblyTargetInfo();
LLVMInitializeWebAssemblyTarget();
LLVMInitializeWebAssemblyTargetMC();
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 028e90f51..381c9d46a 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -528,7 +528,7 @@ gb_internal bool lb_is_matrix_simdable(Type *t) {
return true;
case TargetArch_i386:
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
return false;
}
}
diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp
index 99deca5e9..758657657 100644
--- a/src/llvm_backend_utility.cpp
+++ b/src/llvm_backend_utility.cpp
@@ -1685,7 +1685,7 @@ gb_internal lbValue lb_emit_mul_add(lbProcedure *p, lbValue a, lbValue b, lbValu
break;
case TargetArch_i386:
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
is_possible = false;
break;
}