GHC/CmmToAsm/PPC.hs

    {-# OPTIONS_GHC -fno-warn-orphans #-}

    -- | Native code generator for PPC architectures
    module GHC.CmmToAsm.PPC
       ( ncgPPC
       )
    where

    import GHC.Prelude

    import GHC.CmmToAsm.Instr
    import GHC.CmmToAsm.Monad
    import GHC.CmmToAsm.Config
    import GHC.CmmToAsm.Types

    import qualified GHC.CmmToAsm.PPC.Instr   as PPC
    import qualified GHC.CmmToAsm.PPC.Ppr     as PPC
    import qualified GHC.CmmToAsm.PPC.CodeGen as PPC
    import qualified GHC.CmmToAsm.PPC.Regs    as PPC
    import qualified GHC.CmmToAsm.PPC.RegInfo as PPC

    ncgPPC :: NCGConfig -> NcgImpl RawCmmStatics PPC.Instr PPC.JumpDest
    ncgPPC config = NcgImpl
       { ncgConfig                 = config
       , cmmTopCodeGen             = PPC.cmmTopCodeGen
       , generateJumpTableForInstr = PPC.generateJumpTableForInstr config
       , getJumpDestBlockId        = PPC.getJumpDestBlockId
       , canShortcut               = PPC.canShortcut
       , shortcutStatics           = PPC.shortcutStatics
       , shortcutJump              = PPC.shortcutJump
       , pprNatCmmDecl             = PPC.pprNatCmmDecl config
       , maxSpillSlots             = PPC.maxSpillSlots config
       , allocatableRegs           = PPC.allocatableRegs platform
       , ncgAllocMoreStack         = PPC.allocMoreStack platform
       , ncgExpandTop              = id
       , ncgMakeFarBranches        = PPC.makeFarBranches
       , extractUnwindPoints       = const []
       , invertCondBranches        = \_ _ -> id
       }
        where
          platform = ncgPlatform config

    -- | Instruction instance for powerpc
    instance Instruction PPC.Instr where
       regUsageOfInstr     = PPC.regUsageOfInstr
       patchRegsOfInstr    = PPC.patchRegsOfInstr
       isJumpishInstr      = PPC.isJumpishInstr
       jumpDestsOfInstr    = PPC.jumpDestsOfInstr
       patchJumpInstr      = PPC.patchJumpInstr
       mkSpillInstr        = PPC.mkSpillInstr
       mkLoadInstr         = PPC.mkLoadInstr
       takeDeltaInstr      = PPC.takeDeltaInstr
       isMetaInstr         = PPC.isMetaInstr
       mkRegRegMoveInstr _ = PPC.mkRegRegMoveInstr
       takeRegRegMoveInstr = PPC.takeRegRegMoveInstr
       mkJumpInstr         = PPC.mkJumpInstr
       mkStackAllocInstr   = PPC.mkStackAllocInstr
       mkStackDeallocInstr = PPC.mkStackDeallocInstr
       pprInstr            = PPC.pprInstr
       mkComment           = const []