summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/SPARC/CodeGen.hs
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2011-07-15 02:26:24 +0100
committerIan Lynagh <igloo@earth.li>2011-07-15 02:29:34 +0100
commitf07af788f1d8009034332a5c0b659486fa9b4d26 (patch)
tree767f69e46f5bd58ce2822cd815f97c91d0959ba4 /compiler/nativeGen/SPARC/CodeGen.hs
parent58cc5ed228adce6529eb1e0a849e5d9ca6175524 (diff)
downloadhaskell-f07af788f1d8009034332a5c0b659486fa9b4d26.tar.gz
More work towards cross-compilation
There's now a variant of the Outputable class that knows what platform we're targetting: class PlatformOutputable a where pprPlatform :: Platform -> a -> SDoc pprPlatformPrec :: Platform -> Rational -> a -> SDoc and various instances have had to be converted to use that class, and we pass Platform around accordingly.
Diffstat (limited to 'compiler/nativeGen/SPARC/CodeGen.hs')
-rw-r--r--compiler/nativeGen/SPARC/CodeGen.hs25
1 files changed, 13 insertions, 12 deletions
diff --git a/compiler/nativeGen/SPARC/CodeGen.hs b/compiler/nativeGen/SPARC/CodeGen.hs
index 72e4649eca..817fa47183 100644
--- a/compiler/nativeGen/SPARC/CodeGen.hs
+++ b/compiler/nativeGen/SPARC/CodeGen.hs
@@ -44,26 +44,27 @@ import CLabel
import StaticFlags ( opt_PIC )
import OrdList
import Outputable
+import Platform
import Unique
import Control.Monad ( mapAndUnzipM )
-- | Top level code generation
-cmmTopCodeGen
- :: RawCmmTop
- -> NatM [NatCmmTop CmmStatics Instr]
+cmmTopCodeGen :: Platform
+ -> RawCmmTop
+ -> NatM [NatCmmTop CmmStatics Instr]
-cmmTopCodeGen
+cmmTopCodeGen platform
(CmmProc info lab (ListGraph blocks))
= do
- (nat_blocks,statics) <- mapAndUnzipM basicBlockCodeGen blocks
+ (nat_blocks,statics) <- mapAndUnzipM (basicBlockCodeGen platform) blocks
let proc = CmmProc info lab (ListGraph $ concat nat_blocks)
let tops = proc : concat statics
return tops
-cmmTopCodeGen (CmmData sec dat) = do
+cmmTopCodeGen _ (CmmData sec dat) = do
return [CmmData sec dat] -- no translation, we just use CmmStatic
@@ -72,12 +73,12 @@ cmmTopCodeGen (CmmData sec dat) = do
-- are indicated by the NEWBLOCK instruction. We must split up the
-- instruction stream into basic blocks again. Also, we extract
-- LDATAs here too.
-basicBlockCodeGen
- :: CmmBasicBlock
- -> NatM ( [NatBasicBlock Instr]
- , [NatCmmTop CmmStatics Instr])
+basicBlockCodeGen :: Platform
+ -> CmmBasicBlock
+ -> NatM ( [NatBasicBlock Instr]
+ , [NatCmmTop CmmStatics Instr])
-basicBlockCodeGen cmm@(BasicBlock id stmts) = do
+basicBlockCodeGen platform cmm@(BasicBlock id stmts) = do
instrs <- stmtsToInstrs stmts
let
(top,other_blocks,statics)
@@ -94,7 +95,7 @@ basicBlockCodeGen cmm@(BasicBlock id stmts) = do
-- do intra-block sanity checking
blocksChecked
- = map (checkBlock cmm)
+ = map (checkBlock platform cmm)
$ BasicBlock id top : other_blocks
return (blocksChecked, statics)