GHC/CmmToAsm/AArch64.hs

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

    -- | Native code generator for x86 and x86-64 architectures
    module GHC.CmmToAsm.AArch64
       ( ncgAArch64 )
    where

    import GHC.Prelude

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

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

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

    -- | Instruction instance for aarch64
    instance Instruction AArch64.Instr where
            regUsageOfInstr         = AArch64.regUsageOfInstr
            patchRegsOfInstr        = AArch64.patchRegsOfInstr
            isJumpishInstr          = AArch64.isJumpishInstr
            jumpDestsOfInstr        = AArch64.jumpDestsOfInstr
            patchJumpInstr          = AArch64.patchJumpInstr
            mkSpillInstr            = AArch64.mkSpillInstr
            mkLoadInstr             = AArch64.mkLoadInstr
            takeDeltaInstr          = AArch64.takeDeltaInstr
            isMetaInstr             = AArch64.isMetaInstr
            mkRegRegMoveInstr _     = AArch64.mkRegRegMoveInstr
            takeRegRegMoveInstr     = AArch64.takeRegRegMoveInstr
            mkJumpInstr             = AArch64.mkJumpInstr
            mkStackAllocInstr       = AArch64.mkStackAllocInstr
            mkStackDeallocInstr     = AArch64.mkStackDeallocInstr
            mkComment               = pure . AArch64.COMMENT
            pprInstr                = AArch64.pprInstr