aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjasonkercher <jkercher43@gmail.com>2024-05-10 13:24:43 -0400
committerjasonkercher <jkercher43@gmail.com>2024-05-10 13:24:43 -0400
commit2183140e7162b93066e93b0e65da86b220d45ad0 (patch)
tree900278676685c1ed072a96ecb36bc0217a64b0d9 /src
parent9b75656400b609143147155bf387601a2ab5a242 (diff)
arm32 now compiles and runs demo
Diffstat (limited to 'src')
-rw-r--r--src/bug_report.cpp2
-rw-r--r--src/build_settings.cpp12
-rw-r--r--src/checker.cpp4
-rw-r--r--src/gb/gb.h7
-rw-r--r--src/llvm_backend_proc.cpp4
5 files changed, 22 insertions, 7 deletions
diff --git a/src/bug_report.cpp b/src/bug_report.cpp
index 88ab9492c..8c706f493 100644
--- a/src/bug_report.cpp
+++ b/src/bug_report.cpp
@@ -251,7 +251,7 @@ gb_internal void report_ram_info() {
int result = sysinfo(&info);
if (result == 0x0) {
- gb_printf("%lu MiB\n", info.totalram * info.mem_unit / gb_megabytes(1));
+ gb_printf("%lu MiB\n", (unsigned long)(info.totalram * info.mem_unit / gb_megabytes(1)));
} else {
gb_printf("Unknown.\n");
}
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index c6ef33af2..1857520c9 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -972,7 +972,7 @@ gb_global TargetMetrics target_linux_arm32 = {
TargetOs_linux,
TargetArch_arm32,
4, 4, 4, 8,
- str_lit("arm-linux-gnu"),
+ str_lit("arm-unknown-linux-gnueabihf"),
};
gb_global TargetMetrics target_darwin_amd64 = {
@@ -1890,6 +1890,16 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
#else
metrics = &target_linux_amd64;
#endif
+ #elif defined(GB_CPU_ARM)
+ #if defined(GB_SYSTEM_WINDOWS)
+ #error "Build Error: Unsupported architecture"
+ #elif defined(GB_SYSTEM_OSX)
+ #error "Build Error: Unsupported architecture"
+ #elif defined(GB_SYSTEM_FREEBSD)
+ #error "Build Error: Unsupported architecture"
+ #else
+ metrics = &target_linux_arm32;
+ #endif
#else
#if defined(GB_SYSTEM_WINDOWS)
metrics = &target_windows_i386;
diff --git a/src/checker.cpp b/src/checker.cpp
index 70ca4fc47..24ed08ad7 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -2643,6 +2643,10 @@ gb_internal void generate_minimum_dependency_set(Checker *c, Entity *start) {
str_lit("memmove"),
);
+ FORCE_ADD_RUNTIME_ENTITIES(build_context.metrics.arch == TargetArch_arm32,
+ str_lit("aeabi_d2h")
+ );
+
FORCE_ADD_RUNTIME_ENTITIES(is_arch_wasm() && !build_context.tilde_backend,
// // Extended data type internal procedures
// str_lit("umodti3"),
diff --git a/src/gb/gb.h b/src/gb/gb.h
index c55ff8a9a..4cea51f18 100644
--- a/src/gb/gb.h
+++ b/src/gb/gb.h
@@ -6220,11 +6220,12 @@ gb_no_inline isize gb_snprintf_va(char *text, isize max_len, char const *fmt, va
#elif defined(__aarch64__)
gb_inline u64 gb_rdtsc(void) {
int64_t virtual_timer_value;
- asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
- return virtual_timer_value;
+ asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
+ return virtual_timer_value;
}
#else
-#error "gb_rdtsc not supported"
+#warning "gb_rdtsc not supported"
+ gb_inline u64 gb_rdtsc(void) { return 0; }
#endif
#if defined(GB_SYSTEM_WINDOWS)
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index 898c9ac31..3e0e19a18 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -2909,7 +2909,6 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
break;
case TargetArch_arm32:
{
- // TODO(bill): Check this is correct
GB_ASSERT(arg_count <= 7);
char asm_string[] = "svc #0";
@@ -2917,13 +2916,14 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
for (unsigned i = 0; i < arg_count; i++) {
constraints = gb_string_appendc(constraints, ",{");
static char const *regs[] = {
- "r8",
+ "r7",
"r0",
"r1",
"r2",
"r3",
"r4",
"r5",
+ "r6",
};
constraints = gb_string_appendc(constraints, regs[i]);
constraints = gb_string_appendc(constraints, "}");