diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2018-04-10 17:22:34 +0200 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2018-04-10 17:22:34 +0200 |
commit | 8bdfa912a9ba8cee569cb40bf2ec4c584095e402 (patch) | |
tree | 3e6711d7bcf5ee1d92241d4141f7bbd37e4dcaf4 /mppa_k1c/TargetPrinter.ml | |
parent | 67a5ffd5f8a1f2f95dc480daee9b5d927c768a2d (diff) | |
download | compcert-kvx-8bdfa912a9ba8cee569cb40bf2ec4c584095e402.tar.gz compcert-kvx-8bdfa912a9ba8cee569cb40bf2ec4c584095e402.zip |
MPPA - Added Mload
Diffstat (limited to 'mppa_k1c/TargetPrinter.ml')
-rw-r--r-- | mppa_k1c/TargetPrinter.ml | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/mppa_k1c/TargetPrinter.ml b/mppa_k1c/TargetPrinter.ml index af76fdfc..e93603a4 100644 --- a/mppa_k1c/TargetPrinter.ml +++ b/mppa_k1c/TargetPrinter.ml @@ -124,17 +124,14 @@ module Target : TARGET = (* Generate code to load the address of id + ofs in register r *) - (*let loadsymbol oc r id ofs = + let loadsymbol oc r id ofs = if Archi.pic_code () then begin assert (ofs = Integers.Ptrofs.zero); - fprintf oc " la %a, %s\n" ireg r (extern_atom id) + fprintf oc " make %a = %s\n;;\n" ireg r (extern_atom id) end else begin - fprintf oc " lui %a, %%hi(%a)\n" - ireg r symbol_offset (id, ofs); - fprintf oc " addi %a, %a, %%lo(%a)\n" - ireg r ireg r symbol_offset (id, ofs) + fprintf oc " make %a = %a\n;;\n" ireg r symbol_offset (id, ofs) end - *) + (* Emit .file / .loc debugging directives *) let print_file_line oc file line = @@ -250,10 +247,22 @@ module Target : TARGET = | Pcb (bt, r, lbl) -> fprintf oc " cb.%a %a?%a\n;;\n" bcond bt ireg r print_label lbl + | Plb(rd, ra, ofs) -> + fprintf oc " lbs %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra + | Plbu(rd, ra, ofs) -> + fprintf oc " lbz %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra + | Plh(rd, ra, ofs) -> + fprintf oc " lhs %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra + | Plhu(rd, ra, ofs) -> + fprintf oc " lhz %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra | Plw(rd, ra, ofs) | Plw_a(rd, ra, ofs) | Pfls(rd, ra, ofs) -> fprintf oc " lws %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra | Pld(rd, ra, ofs) | Pfld(rd, ra, ofs) | Pld_a(rd, ra, ofs) -> assert Archi.ptr64; fprintf oc " ld %a = %a[%a]\n;;\n" ireg rd offset ofs ireg ra + | Psb(rd, ra, ofs) -> + fprintf oc " sb %a[%a] = %a\n;;\n" offset ofs ireg ra ireg rd + | Psh(rd, ra, ofs) -> + fprintf oc " sh %a[%a] = %a\n;;\n" offset ofs ireg ra ireg rd | Psw(rd, ra, ofs) | Psw_a(rd, ra, ofs) | Pfss(rd, ra, ofs) -> fprintf oc " sw %a[%a] = %a\n;;\n" offset ofs ireg ra ireg rd | Psd(rd, ra, ofs) | Psd_a(rd, ra, ofs) | Pfsd(rd, ra, ofs) -> assert Archi.ptr64; @@ -269,10 +278,10 @@ module Target : TARGET = (* Pseudo-instructions that remain *) | Plabel lbl -> fprintf oc "%a:\n" print_label lbl - (*| Ploadsymbol(rd, id, ofs) -> + | Ploadsymbol(rd, id, ofs) -> loadsymbol oc rd id ofs - | Ploadsymbol_high(rd, id, ofs) -> - fprintf oc " lui %a, %%hi(%a)\n" ireg rd symbol_offset (id, ofs) + (*| Ploadsymbol_high(rd, id, ofs) -> + fprintf oc " lui %a, %%hi[%a]\n" ireg rd symbol_offset (id, ofs) | Ploadli(rd, n) -> let d = camlint64_of_coqint n in let lbl = label_literal64 d in |