diff options
Diffstat (limited to 'compiler/GHC/CmmToAsm/AArch64.hs')
-rw-r--r-- | compiler/GHC/CmmToAsm/AArch64.hs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/compiler/GHC/CmmToAsm/AArch64.hs b/compiler/GHC/CmmToAsm/AArch64.hs new file mode 100644 index 0000000000..14f4b5d0bd --- /dev/null +++ b/compiler/GHC/CmmToAsm/AArch64.hs @@ -0,0 +1,60 @@ +{-# 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 |