@@ -507,7 +507,7 @@ module BR = Branch_relaxation.Make (struct
507
507
| Lop (Itailcall_imm { func; _ }) ->
508
508
if func.sym_name = !function_name then 1 else epilogue_size ()
509
509
| Lop (Iextcall {alloc; stack_ofs} ) ->
510
- if stack_ofs > 0 then 5
510
+ if Config.runtime5 && stack_ofs > 0 then 5
511
511
else if alloc then 3
512
512
else 5
513
513
| Lop (Istackoffset _) -> 2
@@ -818,7 +818,7 @@ let emit_instr i =
818
818
else
819
819
output_epilogue (fun () -> ` b {emit_symbol func.sym_name}\n`)
820
820
| Lop(Iextcall {func; alloc; stack_ofs}) ->
821
- if stack_ofs > 0 then begin
821
+ if Config.runtime5 && stack_ofs > 0 then begin
822
822
` mov {emit_reg reg_stack_arg_begin}, sp\n`;
823
823
` add {emit_reg reg_stack_arg_end}, sp, #{emit_int (Misc.align stack_ofs 16)}\n`;
824
824
emit_load_symbol_addr reg_x8 func;
@@ -832,14 +832,18 @@ let emit_instr i =
832
832
(* store ocaml stack in the frame pointer register
833
833
NB: no need to store previous x29 because OCaml frames don't
834
834
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;
841
843
` bl {emit_symbol func}\n`;
842
- ` mov sp, x29\n`;
844
+ if Config.runtime5 then begin
845
+ ` mov sp, x29\n`;
846
+ end;
843
847
cfi_restore_state ()
844
848
end
845
849
| Lop(Istackoffset n) ->
0 commit comments