Skip to content

Commit

Permalink
fixed mac mode for code generate
Browse files Browse the repository at this point in the history
  • Loading branch information
Kyle Miller committed May 14, 2012
1 parent 39363aa commit fc52896
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/CodeGenerate.hs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ genTmpReg :: CGM A.Reg
genTmpReg = CGM $ \opts -> do s <- I.genUniqueName "s" genTmpReg = CGM $ \opts -> do s <- I.genUniqueName "s"
return [A.SReg s] return [A.SReg s]


genCallout :: SourcePos -> Int -> String -> CGM (A.Asm O O)
genCallout pos nargs name = do opts <- getOpts
let name' = if macMode opts then '_':name else name
return $ A.Callout pos nargs (A.Imm32Label name' 0)

--genSpill :: Reg -> CGM (Graph A.Asm O O) --genSpill :: Reg -> CGM (Graph A.Asm O O)
--genReload :: String -> CGM --genReload :: String -> CGM
--giveBackTmpReg :: CGM A.Reg --giveBackTmpReg :: CGM A.Reg
Expand Down Expand Up @@ -154,12 +159,12 @@ instToAsm (I.Call pos d name args)
<*> mkMiddle (A.mov pos (A.MReg A.RAX) (A.SReg $ show d)) <*> mkMiddle (A.mov pos (A.MReg A.RAX) (A.SReg $ show d))
instToAsm (I.Callout pos d name args) instToAsm (I.Callout pos d name args)
= do gargs <- genSetArgs pos args = do gargs <- genSetArgs pos args
callout <- genCallout pos (length args) name
opts <- getOpts opts <- getOpts
let name' = if macMode opts then '_':name else name
return $ gargs return $ gargs
<*> mkMiddle (A.mov pos (A.Imm32 0) (A.MReg A.RAX)) <*> mkMiddle (A.mov pos (A.Imm32 0) (A.MReg A.RAX))
<*> genSetSP opts pos args <*> genSetSP opts pos args
<*> mkMiddle (A.Callout pos (length args) (A.Imm32Label name' 0)) <*> mkMiddle callout
<*> genResetSP opts pos args <*> genResetSP opts pos args
<*> mkMiddle (A.mov pos (A.MReg A.RAX) (A.SReg $ show d)) <*> mkMiddle (A.mov pos (A.MReg A.RAX) (A.SReg $ show d))
instToAsm (I.Branch pos l) instToAsm (I.Branch pos l)
Expand All @@ -178,10 +183,11 @@ instToAsm (I.Return pos fname (Just exp))
return $ g <*> mkMiddle (A.MovIRMtoR pos irm (A.MReg A.RAX)) return $ g <*> mkMiddle (A.MovIRMtoR pos irm (A.MReg A.RAX))
<*> (mkLast $ A.Leave pos True 0) <*> (mkLast $ A.Leave pos True 0)
instToAsm (I.Fail pos) instToAsm (I.Fail pos)
= return $ mkMiddles [ A.mov pos (A.Imm32 1) (A.MReg A.RDI) = do exit <- genCallout pos 1 "exit"
, A.mov pos (A.Imm32 0) (A.MReg A.RAX) return $ mkMiddles [ A.mov pos (A.Imm32 1) (A.MReg A.RDI)
, A.Callout pos 1 (A.Imm32Label "exit" 0) ] , A.mov pos (A.Imm32 0) (A.MReg A.RAX)
<*> mkLast (A.ExitFail pos) , exit ]
<*> mkLast (A.ExitFail pos)


genSetArgs :: SourcePos -> [MidIRExpr] -> CGM (Graph A.Asm O O) genSetArgs :: SourcePos -> [MidIRExpr] -> CGM (Graph A.Asm O O)
genSetArgs pos args = do opts <- getOpts genSetArgs pos args = do opts <- getOpts
Expand Down

0 comments on commit fc52896

Please sign in to comment.