diff options
Diffstat (limited to 'compiler/GHC/CmmToAsm/X86.hs')
-rw-r--r-- | compiler/GHC/CmmToAsm/X86.hs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/compiler/GHC/CmmToAsm/X86.hs b/compiler/GHC/CmmToAsm/X86.hs new file mode 100644 index 0000000000..dbeeddc184 --- /dev/null +++ b/compiler/GHC/CmmToAsm/X86.hs @@ -0,0 +1,65 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} + +-- | Native code generator for x86 and x86-64 architectures +module GHC.CmmToAsm.X86 + ( ncgX86_64 + , ncgX86 + ) +where + +import GHC.Prelude + +import GHC.CmmToAsm.Instr +import GHC.CmmToAsm.Monad +import GHC.CmmToAsm.Config +import GHC.CmmToAsm.Types +import GHC.Types.Basic (Alignment) + +import qualified GHC.CmmToAsm.X86.Instr as X86 +import qualified GHC.CmmToAsm.X86.Ppr as X86 +import qualified GHC.CmmToAsm.X86.CodeGen as X86 +import qualified GHC.CmmToAsm.X86.Regs as X86 + +ncgX86 :: NCGConfig -> NcgImpl (Alignment, RawCmmStatics) X86.Instr X86.JumpDest +ncgX86 = ncgX86_64 + + +ncgX86_64 :: NCGConfig -> NcgImpl (Alignment, RawCmmStatics) X86.Instr X86.JumpDest +ncgX86_64 config = NcgImpl + { ncgConfig = config + , cmmTopCodeGen = X86.cmmTopCodeGen + , generateJumpTableForInstr = X86.generateJumpTableForInstr config + , getJumpDestBlockId = X86.getJumpDestBlockId + , canShortcut = X86.canShortcut + , shortcutStatics = X86.shortcutStatics + , shortcutJump = X86.shortcutJump + , pprNatCmmDecl = X86.pprNatCmmDecl config + , maxSpillSlots = X86.maxSpillSlots config + , allocatableRegs = X86.allocatableRegs platform + , ncgAllocMoreStack = X86.allocMoreStack platform + , ncgExpandTop = id + , ncgMakeFarBranches = const id + , extractUnwindPoints = X86.extractUnwindPoints + , invertCondBranches = X86.invertCondBranches + } + where + platform = ncgPlatform config + +-- | Instruction instance for x86 instruction set. +instance Instruction X86.Instr where + regUsageOfInstr = X86.regUsageOfInstr + patchRegsOfInstr = X86.patchRegsOfInstr + isJumpishInstr = X86.isJumpishInstr + jumpDestsOfInstr = X86.jumpDestsOfInstr + patchJumpInstr = X86.patchJumpInstr + mkSpillInstr = X86.mkSpillInstr + mkLoadInstr = X86.mkLoadInstr + takeDeltaInstr = X86.takeDeltaInstr + isMetaInstr = X86.isMetaInstr + mkRegRegMoveInstr = X86.mkRegRegMoveInstr + takeRegRegMoveInstr = X86.takeRegRegMoveInstr + mkJumpInstr = X86.mkJumpInstr + mkStackAllocInstr = X86.mkStackAllocInstr + mkStackDeallocInstr = X86.mkStackDeallocInstr + pprInstr = X86.pprInstr + |