diff options
author | Geoffrey Mainland <gmainlan@microsoft.com> | 2013-09-15 22:41:31 -0400 |
---|---|---|
committer | Geoffrey Mainland <gmainlan@microsoft.com> | 2013-09-22 22:34:00 -0400 |
commit | c5add86a9ec1f0f2fab2ba11ccb05eb9161e9960 (patch) | |
tree | 7971b2d3c315b6b9013f8504e6543174d76371a5 /compiler/llvmGen | |
parent | 26a960c662cdfdfb24ec8ed3e013c686dfdca4cd (diff) | |
download | haskell-c5add86a9ec1f0f2fab2ba11ccb05eb9161e9960.tar.gz |
Pass 512-bit-wide vectors in registers.
Diffstat (limited to 'compiler/llvmGen')
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/Base.hs | 1 | ||||
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 1 | ||||
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/Regs.hs | 7 |
3 files changed, 9 insertions, 0 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/Base.hs b/compiler/llvmGen/LlvmCodeGen/Base.hs index 9142c35064..fb9668b5ee 100644 --- a/compiler/llvmGen/LlvmCodeGen/Base.hs +++ b/compiler/llvmGen/LlvmCodeGen/Base.hs @@ -156,6 +156,7 @@ llvmFunArgs dflags live = isSSE (DoubleReg _) = True isSSE (XmmReg _) = True isSSE (YmmReg _) = True + isSSE (ZmmReg _) = True isSSE _ = False -- | Llvm standard fun attributes diff --git a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs index 08aa45fa71..5002b89b72 100644 --- a/compiler/llvmGen/LlvmCodeGen/CodeGen.hs +++ b/compiler/llvmGen/LlvmCodeGen/CodeGen.hs @@ -1534,6 +1534,7 @@ funEpilogue live = do isSSE (DoubleReg _) = True isSSE (XmmReg _) = True isSSE (YmmReg _) = True + isSSE (ZmmReg _) = True isSSE _ = False -- Set to value or "undef" depending on whether the register is diff --git a/compiler/llvmGen/LlvmCodeGen/Regs.hs b/compiler/llvmGen/LlvmCodeGen/Regs.hs index 16d1237c23..9f20aa5de5 100644 --- a/compiler/llvmGen/LlvmCodeGen/Regs.hs +++ b/compiler/llvmGen/LlvmCodeGen/Regs.hs @@ -68,6 +68,12 @@ lmGlobalReg dflags suf reg YmmReg 4 -> ymmGlobal $ "YMM4" ++ suf YmmReg 5 -> ymmGlobal $ "YMM5" ++ suf YmmReg 6 -> ymmGlobal $ "YMM6" ++ suf + ZmmReg 1 -> zmmGlobal $ "ZMM1" ++ suf + ZmmReg 2 -> zmmGlobal $ "ZMM2" ++ suf + ZmmReg 3 -> zmmGlobal $ "ZMM3" ++ suf + ZmmReg 4 -> zmmGlobal $ "ZMM4" ++ suf + ZmmReg 5 -> zmmGlobal $ "ZMM5" ++ suf + ZmmReg 6 -> zmmGlobal $ "ZMM6" ++ suf _other -> panic $ "LlvmCodeGen.Reg: GlobalReg (" ++ (show reg) ++ ") not supported!" -- LongReg, HpLim, CCSS, CurrentTSO, CurrentNusery, HpAlloc @@ -79,6 +85,7 @@ lmGlobalReg dflags suf reg doubleGlobal name = LMNLocalVar (fsLit name) LMDouble xmmGlobal name = LMNLocalVar (fsLit name) (LMVector 4 (LMInt 32)) ymmGlobal name = LMNLocalVar (fsLit name) (LMVector 8 (LMInt 32)) + zmmGlobal name = LMNLocalVar (fsLit name) (LMVector 16 (LMInt 32)) -- | A list of STG Registers that should always be considered alive alwaysLive :: [GlobalReg] |