X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcodeGen%2FSMRep.lhs;h=28d17079e56aa2400d0dc00a17d69098816ea102;hb=6084fb5517da34f65034370a3695e2af3b85ce2b;hp=96b53135cdd444c63f02719510ff61414d3588eb;hpb=80564ddc183ea98856994112858f0b9f3e178f94;p=ghc-hetmet.git diff --git a/compiler/codeGen/SMRep.lhs b/compiler/codeGen/SMRep.lhs index 96b5313..28d1707 100644 --- a/compiler/codeGen/SMRep.lhs +++ b/compiler/codeGen/SMRep.lhs @@ -9,6 +9,13 @@ This is here, rather than in ClosureInfo, just to keep nhc happy. Other modules should access this info through ClosureInfo. \begin{code} +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details + module SMRep ( -- Words and bytes StgWord, StgHalfWord, @@ -19,7 +26,7 @@ module SMRep ( CgRep(..), nonVoidArg, argMachRep, primRepToCgRep, primRepHint, isFollowableArg, isVoidArg, - isFloatingArg, isNonPtrArg, is64BitArg, + isFloatingArg, is64BitArg, separateByPtrFollowness, cgRepSizeW, cgRepSizeB, retAddrSizeW, @@ -33,10 +40,9 @@ module SMRep ( profHdrSize, thunkHdrSize, smRepClosureType, smRepClosureTypeInt, - rET_SMALL, rET_VEC_SMALL, rET_BIG, rET_VEC_BIG + rET_SMALL, rET_BIG ) where -#include "HsVersions.h" #include "../includes/MachDeps.h" import Id @@ -46,6 +52,7 @@ import MachOp import StaticFlags import Constants import Outputable +import FastString import Data.Word \end{code} @@ -112,20 +119,22 @@ entry to the garbage collector. \begin{code} data CgRep = VoidArg -- Void - | PtrArg -- Word-sized Ptr + | PtrArg -- Word-sized heap pointer, followed + -- by the garbage collector | NonPtrArg -- Word-sized non-pointer + -- (including addresses not followed by GC) | LongArg -- 64-bit non-pointer | FloatArg -- 32-bit float | DoubleArg -- 64-bit float deriving Eq instance Outputable CgRep where - ppr VoidArg = ptext SLIT("V_") - ppr PtrArg = ptext SLIT("P_") - ppr NonPtrArg = ptext SLIT("I_") - ppr LongArg = ptext SLIT("L_") - ppr FloatArg = ptext SLIT("F_") - ppr DoubleArg = ptext SLIT("D_") + ppr VoidArg = ptext (sLit "V_") + ppr PtrArg = ptext (sLit "P_") + ppr NonPtrArg = ptext (sLit "I_") + ppr LongArg = ptext (sLit "L_") + ppr FloatArg = ptext (sLit "F_") + ppr DoubleArg = ptext (sLit "D_") argMachRep :: CgRep -> MachRep argMachRep PtrArg = wordRep @@ -200,11 +209,6 @@ isFloatingArg DoubleArg = True isFloatingArg FloatArg = True isFloatingArg _ = False -isNonPtrArg :: CgRep -> Bool --- Identify anything which is one word large and not a pointer. -isNonPtrArg NonPtrArg = True -isNonPtrArg other = False - is64BitArg :: CgRep -> Bool is64BitArg LongArg = True is64BitArg _ = False @@ -303,12 +307,13 @@ isStaticRep BlackHoleRep = False #include "../includes/ClosureTypes.h" -- Defines CONSTR, CONSTR_1_0 etc +-- krc: only called by tickyDynAlloc in CgTicky; return +-- Nothing for a black hole so we can at least make something work. +smRepClosureType :: SMRep -> Maybe ClosureType +smRepClosureType (GenericRep _ _ _ ty) = Just ty +smRepClosureType BlackHoleRep = Nothing -smRepClosureType :: SMRep -> ClosureType -smRepClosureType (GenericRep _ _ _ ty) = ty -smRepClosureType BlackHoleRep = panic "smRepClosureType: black hole" - -smRepClosureTypeInt :: SMRep -> Int +smRepClosureTypeInt :: SMRep -> StgHalfWord smRepClosureTypeInt (GenericRep False 1 0 Constr) = CONSTR_1_0 smRepClosureTypeInt (GenericRep False 0 1 Constr) = CONSTR_0_1 smRepClosureTypeInt (GenericRep False 2 0 Constr) = CONSTR_2_0 @@ -343,9 +348,7 @@ smRepClosureTypeInt rep = panic "smRepClosuretypeint" -- We export these ones -rET_SMALL = (RET_SMALL :: Int) -rET_VEC_SMALL = (RET_VEC_SMALL :: Int) -rET_BIG = (RET_BIG :: Int) -rET_VEC_BIG = (RET_VEC_BIG :: Int) +rET_SMALL = (RET_SMALL :: StgHalfWord) +rET_BIG = (RET_BIG :: StgHalfWord) \end{code}