alpha-0.9.0.2: src/Specialize/Types.hs
module Specialize.Types(
module Data.Word, module My.Control.Monad.TimeLine,
module PCode.Instruction, module ID,
Register(..),Address(..),
Architecture(..),
Past(..),Future(..),
Allocate(..)) where
import Data.Word
import My.Control.Monad.TimeLine
import PCode.Instruction
import ID
import Data.Map
import Data.Set
type Register = Int
type Address = (Maybe ID,Int)
data Architecture = Arch {
archName :: String,
archInitialPast :: [BindVar] -> Past,
archFinalFuture :: Future,
archCompileInstr :: Instruction -> (Int -> ((Int,Int),Past)) -> Allocate (Int,[Word8])
}
data Past = Past {
addresses :: Map ID Address,
bindings :: Maybe (Map ID Register),
clobber :: Map ID [ID],
stack :: [(Bool,Int)]
}
data Future = Future {
fregs :: Map ID Register
}
type Allocate = TimeLine Past Future