From c5add86a9ec1f0f2fab2ba11ccb05eb9161e9960 Mon Sep 17 00:00:00 2001 From: Geoffrey Mainland Date: Sun, 15 Sep 2013 22:41:31 -0400 Subject: Pass 512-bit-wide vectors in registers. --- compiler/llvmGen/LlvmCodeGen/Base.hs | 1 + compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 1 + compiler/llvmGen/LlvmCodeGen/Regs.hs | 7 +++++++ 3 files changed, 9 insertions(+) (limited to 'compiler/llvmGen') 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] -- cgit v1.2.1