Skip to content

Commit 10f046c

Browse files
committed
Add runtime5 guards in arm64/emit.mlp
1 parent b6bab52 commit 10f046c

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

backend/arm64/emit.mlp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ module BR = Branch_relaxation.Make (struct
507507
| Lop (Itailcall_imm { func; _ }) ->
508508
if func.sym_name = !function_name then 1 else epilogue_size ()
509509
| Lop (Iextcall {alloc; stack_ofs} ) ->
510-
if stack_ofs > 0 then 5
510+
if Config.runtime5 && stack_ofs > 0 then 5
511511
else if alloc then 3
512512
else 5
513513
| Lop (Istackoffset _) -> 2
@@ -818,7 +818,7 @@ let emit_instr i =
818818
else
819819
output_epilogue (fun () -> ` b {emit_symbol func.sym_name}\n`)
820820
| Lop(Iextcall {func; alloc; stack_ofs}) ->
821-
if stack_ofs > 0 then begin
821+
if Config.runtime5 && stack_ofs > 0 then begin
822822
` mov {emit_reg reg_stack_arg_begin}, sp\n`;
823823
` add {emit_reg reg_stack_arg_end}, sp, #{emit_int (Misc.align stack_ofs 16)}\n`;
824824
emit_load_symbol_addr reg_x8 func;
@@ -832,14 +832,18 @@ let emit_instr i =
832832
(* store ocaml stack in the frame pointer register
833833
NB: no need to store previous x29 because OCaml frames don't
834834
maintain frame pointer *)
835-
` mov x29, sp\n`;
836-
cfi_remember_state ();
837-
cfi_def_cfa_register ~reg:29;
838-
let offset = Domainstate.(idx_of_field Domain_c_stack) * 8 in
839-
` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n`;
840-
` mov sp, {emit_reg reg_tmp1}\n`;
835+
if Config.runtime5 then begin
836+
` mov x29, sp\n`;
837+
cfi_remember_state ();
838+
cfi_def_cfa_register ~reg:29;
839+
let offset = Domainstate.(idx_of_field Domain_c_stack) * 8 in
840+
` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n`;
841+
` mov sp, {emit_reg reg_tmp1}\n`
842+
end;
841843
` bl {emit_symbol func}\n`;
842-
` mov sp, x29\n`;
844+
if Config.runtime5 then begin
845+
` mov sp, x29\n`;
846+
end;
843847
cfi_restore_state ()
844848
end
845849
| Lop(Istackoffset n) ->

0 commit comments

Comments
 (0)