Fixes syscall intrinsic on macOS they use a slightly different section + register for the id

This commit is contained in:
Platin21
2022-01-05 16:49:58 +01:00
parent 00ff1fbca2
commit 7a14acaa01
+21
View File
@@ -2060,6 +2060,26 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
{ {
GB_ASSERT(arg_count <= 7); GB_ASSERT(arg_count <= 7);
if(build_context.metrics.os == TargetOs_darwin) {
char asm_string[] = "svc #0x80";
gbString constraints = gb_string_make(heap_allocator(), "={x0}");
for (unsigned i = 0; i < arg_count; i++) {
constraints = gb_string_appendc(constraints, ",{");
static char const *regs[] = {
"x16",
"x0",
"x1",
"x2",
"x3",
"x4",
"x5",
};
constraints = gb_string_appendc(constraints, regs[i]);
constraints = gb_string_appendc(constraints, "}");
}
inline_asm = llvm_get_inline_asm(func_type, make_string_c(asm_string), make_string_c(constraints));
} else {
char asm_string[] = "svc #0"; char asm_string[] = "svc #0";
gbString constraints = gb_string_make(heap_allocator(), "={x0}"); gbString constraints = gb_string_make(heap_allocator(), "={x0}");
for (unsigned i = 0; i < arg_count; i++) { for (unsigned i = 0; i < arg_count; i++) {
@@ -2078,6 +2098,7 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
} }
inline_asm = llvm_get_inline_asm(func_type, make_string_c(asm_string), make_string_c(constraints)); inline_asm = llvm_get_inline_asm(func_type, make_string_c(asm_string), make_string_c(constraints));
}
} }
break; break;
default: default: