RISC code output

TODO: fix wrong order for conversion in cfgrisc
This commit is contained in:
elvis
2024-12-01 12:55:20 +01:00
parent 08f0eb5c91
commit 52cd7e7e13
7 changed files with 332 additions and 11 deletions

View File

@ -47,13 +47,13 @@ module RISCSimpleStatements = struct
let pp (ppf: out_channel) (v: t) : unit =
let rec pp_t (ppf: out_channel) (v: t) : unit =
match v with
Nop -> Printf.fprintf ppf "nop"
Nop -> Printf.fprintf ppf "Nop"
| BRegOp (b, r1, r2, r3) -> Printf.fprintf ppf "%a r%d r%d => r%d" pp_brop b r1.index r2.index r3.index
| BImmOp (b, r1, i, r3) -> Printf.fprintf ppf "%a r%d %d => r%d" pp_biop b r1.index i r3.index
| URegOp (u, r1, r2) -> Printf.fprintf ppf "%a r%d => r%d" pp_urop u r1.index r2.index
| Load (r1, r2) -> Printf.fprintf ppf "load r%d => r%d" r1.index r2.index
| LoadI (r2, i) -> Printf.fprintf ppf "loadi %d => r%d" i r2.index
| Store (r1, r2) -> Printf.fprintf ppf "store r%d => r%d" r1.index r2.index
| Load (r1, r2) -> Printf.fprintf ppf "Load r%d => r%d" r1.index r2.index
| LoadI (r2, i) -> Printf.fprintf ppf "LoadI %d => r%d" i r2.index
| Store (r1, r2) -> Printf.fprintf ppf "Store r%d => r%d" r1.index r2.index
and pp_brop (ppf: out_channel) (v: brop) : unit =
match v with
Add -> Printf.fprintf ppf "Add"
@ -712,9 +712,6 @@ let helper (c: CfgImp.SimpleStatements.t list Cfg.NodeMap.t) (m: RegisterMap.m)
let risccode, _ = Cfg.NodeMap.fold (fun node value (risccode, m) -> convert_ss m value node risccode) c (Cfg.NodeMap.empty, m) in
risccode
let convert_content (c: CfgImp.SimpleStatements.t list Cfg.NodeMap.t) : RISCSimpleStatements.t list Cfg.NodeMap.t =
helper c RegisterMap.empty
let convert (prg: CfgImp.SSCfg.t) : RISCCfg.t =
match prg with
{ empty: bool;
@ -734,5 +731,5 @@ let convert (prg: CfgImp.SSCfg.t) : RISCCfg.t =
inputOutputVar = inputOutputVar;
initial = initial;
terminal = terminal;
content = convert_content content;
content = helper content RegisterMap.empty;
}