From c07e0bdcef04bb3e24bf1ea9e3bf7b067bd26cc4 Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Wed, 25 Mar 2015 16:24:14 -0400 Subject: simplify label logic --- lo2.ml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lo2.ml b/lo2.ml index d6f06f7..0f51a10 100644 --- a/lo2.ml +++ b/lo2.ml @@ -429,7 +429,8 @@ let codegen (p: mprog): string = let nbb = Array.length p in let boffs = Array.make nbb (`Unk []) in - let label p0 b = + let label b = + let p0 = !off + 4 in match boffs.(b) with | `Unk l -> let lbl = lite p0 in @@ -478,14 +479,14 @@ let codegen (p: mprog): string = | `Brz ((LReg _ as r), b1, b2) when b1 >= 0 && b2 >= 0 -> oins 0x85 (regn r) (regn r); if b1 = b+1 then - (outb 0x0f; outb 0x85; outs (label (!off-2+6) b2)) + (outb 0x0f; outb 0x85; outs (label b2)) else if b2 = b+1 then - (outb 0x0f; outb 0x84; outs (label (!off-2+6) b1)) + (outb 0x0f; outb 0x84; outs (label b1)) else failwith "double branch" | `Jmp b1 when b1 >= 0 -> if b1 <> b+1 then - (outb 0xe9; outs (label (!off-1+5) b1)) + (outb 0xe9; outs (label b1)) | _ -> () end done; -- cgit 1.4.1