Vous avez reçu un message "Your GitLab account has been locked ..." ? Pas d'inquiétude : lisez cet article https://docs.gricad-pages.univ-grenoble-alpes.fr/help/unlock/

Commit 537e20b6 authored by Léo Gourdin's avatar Léo Gourdin
Browse files

bugfix A64 peephole (cf Scade/Fighter example)

parent be8d929a
...@@ -401,9 +401,8 @@ let pair_rep_inv insta = ...@@ -401,9 +401,8 @@ let pair_rep_inv insta =
* for one type of inst. Lists contains integers which * for one type of inst. Lists contains integers which
* are the indices of insts in the main array "insta". *) * are the indices of insts in the main array "insta". *)
init_symb_mem (); init_symb_mem ();
for i = Array.length insta - 1 downto 1 do for i = Array.length insta - 1 downto 0 do
let h0 = insta.(i) in let h0 = insta.(i) in
let h1 = insta.(i - 1) in
(* Here we need to update every symbolic memory according to the matched inst *) (* Here we need to update every symbolic memory according to the matched inst *)
update_pot_rep_basic h0 insta (Ldr P32) true; update_pot_rep_basic h0 insta (Ldr P32) true;
update_pot_rep_basic h0 insta (Ldr P64) true; update_pot_rep_basic h0 insta (Ldr P64) true;
...@@ -413,9 +412,9 @@ let pair_rep_inv insta = ...@@ -413,9 +412,9 @@ let pair_rep_inv insta =
update_pot_rep_basic h0 insta (Str P64) true; update_pot_rep_basic h0 insta (Str P64) true;
update_pot_rep_basic h0 insta (Str P32f) true; update_pot_rep_basic h0 insta (Str P32f) true;
update_pot_rep_basic h0 insta (Str P64f) true; update_pot_rep_basic h0 insta (Str P64f) true;
match (h0, h1) with match h0 with
(* Non-consecutive ldr *) (* Non-consecutive ldr *)
| PLoad (PLd_rd_a (ldi, rd1, ADimm (b1, n1))), _ -> | PLoad (PLd_rd_a (ldi, rd1, ADimm (b1, n1))) ->
if is_compat_load ldi then ( if is_compat_load ldi then (
(* Search a previous compatible load *) (* Search a previous compatible load *)
let ld_t = get_load_pht ldi in let ld_t = get_load_pht ldi in
...@@ -445,7 +444,7 @@ let pair_rep_inv insta = ...@@ -445,7 +444,7 @@ let pair_rep_inv insta =
(trans_ldi ldi, rd1, r, chunk_load ldi, c, ADimm (b, n1))))); (trans_ldi ldi, rd1, r, chunk_load ldi, c, ADimm (b, n1)))));
Hashtbl.replace symb_mem ld_t pot_rep) Hashtbl.replace symb_mem ld_t pot_rep)
(* Non-consecutive str *) (* Non-consecutive str *)
| PStore (PSt_rs_a (sti, rd1, ADimm (b1, n1))), _ -> | PStore (PSt_rs_a (sti, rd1, ADimm (b1, n1))) ->
if is_compat_store sti then ( if is_compat_store sti then (
(* Search a previous compatible store *) (* Search a previous compatible store *)
let st_t = get_store_pht sti in let st_t = get_store_pht sti in
...@@ -469,7 +468,7 @@ let pair_rep_inv insta = ...@@ -469,7 +468,7 @@ let pair_rep_inv insta =
(trans_sti sti, rd1, r, chunk_store sti, c, ADimm (b, n1)))); (trans_sti sti, rd1, r, chunk_store sti, c, ADimm (b, n1))));
Hashtbl.replace symb_mem st_t pot_rep Hashtbl.replace symb_mem st_t pot_rep
(* Any other inst *)) (* Any other inst *))
| i, _ -> ( | i -> (
(* Clear list of candidates if there is a non supported store *) (* Clear list of candidates if there is a non supported store *)
match i with PStore _ -> reset_str_symb_mem () | _ -> ()) match i with PStore _ -> reset_str_symb_mem () | _ -> ())
done done
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment