summaryrefslogtreecommitdiff
path: root/compiler/GHC/CmmToAsm/X86.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/CmmToAsm/X86.hs')
-rw-r--r--compiler/GHC/CmmToAsm/X86.hs65
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
+