Fixes defined variables, fixes live variables, implements reduces registers, fixes risc semantic
This commit is contained in:
@ -13,7 +13,8 @@ module RISCArchitecture = struct
|
||||
type t = {
|
||||
code: RISC.RISCAssembly.risci list CodeMap.t;
|
||||
registers: int RegisterMap.t;
|
||||
memory: int MemoryMap.t
|
||||
memory: int MemoryMap.t;
|
||||
outputreg: Register.t;
|
||||
}
|
||||
end
|
||||
|
||||
@ -101,7 +102,8 @@ let reduce_instructions (prg: RISCArchitecture.t) (lo: string list) : int =
|
||||
else
|
||||
prg
|
||||
)
|
||||
| Nop :: tl -> helper prg tl current_label
|
||||
| Nop :: tl ->
|
||||
helper prg tl current_label
|
||||
| BRegOp (brop, r1, r2, r3) :: tl -> (
|
||||
let n = (match_operator_r brop)
|
||||
(RegisterMap.find {index = r1.index} prg.registers)
|
||||
@ -136,7 +138,8 @@ let reduce_instructions (prg: RISCArchitecture.t) (lo: string list) : int =
|
||||
)
|
||||
)
|
||||
| Load (r1, r3) :: tl -> (
|
||||
let n = MemoryMap.find
|
||||
let n =
|
||||
MemoryMap.find
|
||||
(RegisterMap.find {index = r1.index} prg.registers)
|
||||
prg.memory
|
||||
in
|
||||
@ -164,14 +167,29 @@ let reduce_instructions (prg: RISCArchitecture.t) (lo: string list) : int =
|
||||
| Label _ :: tl -> helper prg tl current_label
|
||||
in
|
||||
RegisterMap.find
|
||||
{index = "out"}
|
||||
prg.outputreg
|
||||
(helper prg (CodeMap.find "main" prg.code) "main").registers
|
||||
|
||||
|
||||
let reduce (prg: RISC.RISCAssembly.t) : int =
|
||||
reduce_instructions {code = convert prg;
|
||||
registers =
|
||||
RegisterMap.singleton
|
||||
{index = "in"}
|
||||
(Option.value prg.inputval ~default:0);
|
||||
memory = MemoryMap.empty} (label_order prg)
|
||||
reduce_instructions
|
||||
{code = convert prg;
|
||||
registers = (
|
||||
match prg.inputoutputreg with
|
||||
| None ->
|
||||
RegisterMap.singleton
|
||||
{index = "in"}
|
||||
(Option.value prg.inputval ~default:0)
|
||||
| Some (i, _) ->
|
||||
RegisterMap.singleton
|
||||
{index = i.index}
|
||||
(Option.value prg.inputval ~default:0)
|
||||
);
|
||||
memory = MemoryMap.empty;
|
||||
outputreg = (
|
||||
match prg.inputoutputreg with
|
||||
| None -> {index = "out"}
|
||||
| Some (_, o) -> {index = o.index}
|
||||
)
|
||||
}
|
||||
(label_order prg)
|
||||
|
||||
Reference in New Issue
Block a user