%
-% (c) The AQUA Project, Glasgow University, 1993-1996
+% (c) The AQUA Project, Glasgow University, 1993-1998
%
\begin{code}
-#include "HsVersions.h"
-
module AsmCodeGen ( writeRealAsm, dumpRealAsm ) where
-IMP_Ubiq(){-uitous-}
-IMPORT_1_3(IO(Handle))
+#include "HsVersions.h"
+
+import IO ( Handle )
import MachMisc
import MachRegs
import AsmRegAlloc ( runRegAllocate )
import OrdList ( OrdList )
import PrimOp ( commutableOp, PrimOp(..) )
-import PrimRep ( PrimRep{-instance Eq-} )
import RegAllocInfo ( mkMRegsState, MRegsState )
-import Stix ( StixTree(..), StixReg(..), CodeSegment )
-import UniqSupply ( returnUs, thenUs, mapUs, SYN_IE(UniqSM), UniqSupply )
-import Outputable ( printDoc )
-import Pretty ( Doc, vcat, Mode(..) )
+import Stix ( StixTree(..), StixReg(..) )
+import UniqSupply ( returnUs, thenUs, mapUs, initUs, UniqSM, UniqSupply )
+import Outputable
\end{code}
The 96/03 native-code generator has machine-independent and
\begin{code}
writeRealAsm :: Handle -> AbstractC -> UniqSupply -> IO ()
writeRealAsm handle absC us
- = _scc_ "writeRealAsm" (printDoc LeftMode handle (runNCG absC us))
+ = -- _scc_ "writeRealAsm"
+ printForAsm handle (initUs us (runNCG absC))
-dumpRealAsm :: AbstractC -> UniqSupply -> Doc
-dumpRealAsm = runNCG
+dumpRealAsm :: AbstractC -> UniqSupply -> SDoc
+dumpRealAsm absC us = initUs us (runNCG absC)
runNCG absC
= genCodeAbstractC absC `thenUs` \ treelists ->
@codeGen@ is the top-level code-generation function:
\begin{code}
-codeGen :: [[StixTree]] -> UniqSM Doc
+codeGen :: [[StixTree]] -> UniqSM SDoc
codeGen trees
= mapUs genMachCode trees `thenUs` \ dynamic_codes ->
genericOpt (StCondJump addr test)
= StCondJump addr (genericOpt test)
-genericOpt (StCall fn pk args)
- = StCall fn pk (map genericOpt args)
+genericOpt (StCall fn cconv pk args)
+ = StCall fn cconv pk (map genericOpt args)
\end{code}
Fold indices together when the types match:
OrOp -> x
XorOp -> x
SllOp -> x
- SraOp -> x
SrlOp -> x
ISllOp -> x
ISraOp -> x
= case op of
IntMulOp -> case exactLog2 n of
Nothing -> StPrim op args
- Just p -> StPrim SllOp [x, StInt p]
+ Just p -> StPrim ISllOp [x, StInt p]
IntQuotOp -> case exactLog2 n of
Nothing -> StPrim op args
- Just p -> StPrim SraOp [x, StInt p]
+ Just p -> StPrim ISrlOp [x, StInt p]
_ -> StPrim op args
\end{code}