packages feed

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