diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-04-10 14:53:25 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:27 -0400 |
commit | dd20e7c180e91f1587d94bd9878485d55bfee137 (patch) | |
tree | 9235cc7e2d4e1b69a667cb1bbd56ae6bd02a01a8 /lo2.ml | |
parent | 7ab237d8ed81702dfbe034fd49de2e9fc9eba08c (diff) | |
download | roux-dd20e7c180e91f1587d94bd9878485d55bfee137.tar.gz |
reserve edx in all cases for divisions
Diffstat (limited to 'lo2.ml')
-rw-r--r-- | lo2.ml | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lo2.ml b/lo2.ml index 4b978f4..e284988 100644 --- a/lo2.ml +++ b/lo2.ml @@ -247,7 +247,9 @@ let regalloc (p: iprog): rprog = *) let rdx = 1 in if op = Div && not (List.mem rdx !free) then - getreg (List.filter ((<>) rdx) regs) |> ignore; + getreg (List.filter ((<>) rdx) regs) |> ignore + else + free := (List.filter ((<>) rdx) regs); let l1 = regloc frz ir1 in let frz = match l1 with | LReg r1 -> r1 :: frz @@ -625,7 +627,7 @@ let psum: iprog = |] ; bb_inss = [| `Bop (IRPhi (1, 0), Sub, IRIns (0, 1)) (* n1 = n - 1 *) - ; `Bop (IRPhi (1, 1), Add, IRPhi (1, 0)) (* s1 = s + n *) + ; `Bop (IRPhi (1, 1), Div, IRPhi (1, 0)) (* s1 = s + n *) |] ; bb_jmp = `Brz (IRIns (1, 0), 2, 1) } @@ -668,8 +670,8 @@ let oneshot () = let _ = if Array.length Sys.argv > 1 && Sys.argv.(1) = "test" then let oc = open_out "t.o" in - nregs := 2; - let s = pspill |> regalloc |> movgen |> codegen in + nregs := 2; + let s = psum |> regalloc |> movgen |> codegen in Elf.barebones_elf oc "f" s; close_out oc; else |