From e7012861e7a112e9f51c7076cfd0d942f484a8d8 Mon Sep 17 00:00:00 2001 From: Pierre Wilke <pierre.wilke@centralesupelec.fr> Date: Tue, 7 Apr 2020 17:27:12 +0200 Subject: [PATCH] correction riscv --- src/riscv.ml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/riscv.ml b/src/riscv.ml index e4c426e..9c6402b 100644 --- a/src/riscv.ml +++ b/src/riscv.ml @@ -43,14 +43,9 @@ let print_binop (b: binop) = | Elang.Emul -> "mul" | Elang.Emod -> "remu" | Elang.Exor -> "xor" - | Elang.Ediv -> "div" + | Elang.Ediv -> "divu" | Elang.Esub -> "sub" - | Elang.Eclt -> "slt" - | Elang.Ecle -> "sle" - | Elang.Ecgt -> "sgt" - | Elang.Ecge -> "sge" - | Elang.Eceq -> "seq" - | Elang.Ecne -> "sne" + | _ -> assert false let print_unop (u: unop) = match u with @@ -87,13 +82,13 @@ let dump_riscv_instr oc (i: ltl_instr) = (* 'rd <- rs1 <= rs2' == 'rd <- rs2 < rs1; rd <- not rd' *) Format.fprintf oc "slt %s, %s, %s\n" (print_reg rd) (print_reg rs2) (print_reg rs1); - Format.fprintf oc "not %s, %s\n" + Format.fprintf oc "seqz %s, %s\n" (print_reg rd) (print_reg rd); OK () | Elang.Ecge -> Format.fprintf oc "slt %s, %s, %s\n" (print_reg rd) (print_reg rs1) (print_reg rs2); - Format.fprintf oc "not %s, %s\n" + Format.fprintf oc "seqz %s, %s\n" (print_reg rd) (print_reg rd); OK () | Elang.Eceq -> @@ -230,7 +225,7 @@ let riscv_prelude oc = OK () let dump_riscv_prog oc lp : unit res = - if !nostart then OK () else riscv_prelude oc >>= fun _ -> + (if !nostart then OK () else riscv_prelude oc) >>= fun _ -> Format.fprintf oc ".global main\n"; list_iter_res (function (fname, Gfun f) -> dump_riscv_fun oc (fname,f) -- GitLab