Handle trait use conflict resolution
[hiphop-php.git] / hphp / hack / ocaml.patch
blob0197e91888d590195f916411a8842c072814a648
1 diff --git asmcomp/arm64/emit.mlp asmcomp/arm64/emit.mlp
2 index f75646e..075d408 100644
3 --- a/asmcomp/arm64/emit.mlp
4 +++ b/asmcomp/arm64/emit.mlp
5 @@ -439,8 +439,10 @@ module BR = Branch_relaxation.Make (struct
6 | Lop (Iload (size, addr)) | Lop (Istore (size, addr, _)) ->
7 let based = match addr with Iindexed _ -> 0 | Ibased _ -> 1 in
8 based + begin match size with Single -> 2 | _ -> 1 end
9 - | Lop (Ialloc _) when !fastcode_flag -> 4
10 - | Lop (Ispecific (Ifar_alloc _)) when !fastcode_flag -> 5
11 + | Lop (Ialloc {words = num_words}) when !fastcode_flag ->
12 + if num_words <= 0xFFF then 4 else 5
13 + | Lop (Ispecific (Ifar_alloc {words = num_words})) when !fastcode_flag ->
14 + if num_words <= 0xFFF then 5 else 6
15 | Lop (Ialloc { words = num_words; _ })
16 | Lop (Ispecific (Ifar_alloc { words = num_words; _ })) ->
17 begin match num_words with
18 @@ -518,8 +520,13 @@ let assembly_code_for_allocation ?label_after_call_gc i ~n ~far =
19 if !fastcode_flag then begin
20 let lbl_redo = new_label() in
21 let lbl_call_gc = new_label() in
22 + assert (n < 0x1_000_000);
23 + let nl = n land 0xFFF and nh = n land 0xFFF_000 in
24 `{emit_label lbl_redo}:`;
25 - ` sub {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, #{emit_int n}\n`;
26 + if nh <> 0 then
27 + ` sub {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, #{emit_int nh}\n`;
28 + if nl <> 0 then
29 + ` sub {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, #{emit_int nl}\n`;
30 ` cmp {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_limit}\n`;
31 ` add {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, #8\n`;
32 if not far then begin