X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FPrimRep.lhs;h=96a093c28ad62ae7eb44ceae9956b3944b004eb2;hb=265be40ffb10e9c1713479bb2b89a4bfa699c3a6;hp=ab6fdc4f39613da0e17282c2e5568a8bce97fbb4;hpb=67a402e25d3707ce4e031e809b874f8341032d23;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/PrimRep.lhs b/ghc/compiler/prelude/PrimRep.lhs index ab6fdc4..96a093c 100644 --- a/ghc/compiler/prelude/PrimRep.lhs +++ b/ghc/compiler/prelude/PrimRep.lhs @@ -18,9 +18,6 @@ module PrimRep , getPrimRepSize , getPrimRepSizeInBytes , retPrimRepSize - , showPrimRep - , primRepString - , showPrimRepToUser ) where #include "HsVersions.h" @@ -46,21 +43,21 @@ data PrimRep | CostCentreRep -- Pointer to a cost centre | CharRep -- Machine characters - | Int8Rep -- 8 bit integers - | IntRep -- integers (same size as ptr on this arch) - | WordRep -- ditto (but *unsigned*) - | AddrRep -- addresses ("C pointers") + | IntRep -- signed integers (same size as ptr on this arch) + | WordRep -- unsigned integers (same size as ptr on this arch) + | AddrRep -- addresses (C pointers) | FloatRep -- floats | DoubleRep -- doubles - | Word64Rep -- guaranteed to be 64 bits (no more, no less.) - | Int64Rep -- guaranteed to be 64 bits (no more, no less.) - - -- Perhaps all sized integers and words should be primitive types. - - -- Int8Rep is currently used to simulate some old CharRep usages - -- when Char changed size from 8 to 31 bits. It does not correspond - -- to a Haskell unboxed type, in particular it's not used by Int8. - + + | Int8Rep -- 8 bit signed integers + | Int16Rep -- 16 bit signed integers + | Int32Rep -- 32 bit signed integers + | Int64Rep -- 64 bit signed integers + | Word8Rep -- 8 bit unsigned integers + | Word16Rep -- 16 bit unsigned integers + | Word32Rep -- 32 bit unsigned integers + | Word64Rep -- 64 bit unsigned integers + | WeakPtrRep | ForeignObjRep | BCORep @@ -124,6 +121,7 @@ isFollowableRep ForeignObjRep = True -- '' isFollowableRep StableNameRep = True -- '' isFollowableRep PrimPtrRep = True -- '' isFollowableRep ThreadIdRep = True -- pointer to a TSO +isFollowableRep BCORep = True isFollowableRep other = False @@ -147,37 +145,27 @@ See codeGen/CgCon:cgTopRhsCon. \begin{code} isFloatingRep :: PrimRep -> Bool - isFloatingRep DoubleRep = True isFloatingRep FloatRep = True -isFloatingRep other = False - +isFloatingRep _ = False \end{code} \begin{code} is64BitRep :: PrimRep -> Bool - is64BitRep Int64Rep = True is64BitRep Word64Rep = True -is64BitRep other = False - +is64BitRep _ = False \end{code} - - \begin{code} getPrimRepSize :: PrimRep -> Int +getPrimRepSize DoubleRep = dOUBLE_SIZE -- "words", of course +getPrimRepSize Word64Rep = wORD64_SIZE +getPrimRepSize Int64Rep = iNT64_SIZE +getPrimRepSize VoidRep = 0 +getPrimRepSize _ = 1 -getPrimRepSize DoubleRep = dOUBLE_SIZE -- "words", of course -getPrimRepSize Word64Rep = wORD64_SIZE -getPrimRepSize Int64Rep = iNT64_SIZE ---getPrimRepSize FloatRep = 1 ---getPrimRepSize CharRep = 1 -- ToDo: count in bytes? ---getPrimRepSize ArrayRep = 1 -- Listed specifically for *documentation* ---getPrimRepSize ByteArrayRep = 1 -getPrimRepSize VoidRep = 0 -getPrimRepSize other = 1 - +retPrimRepSize :: Int retPrimRepSize = getPrimRepSize RetRep -- sizes in bytes. @@ -185,23 +173,27 @@ retPrimRepSize = getPrimRepSize RetRep -- we have to push onto the stack when calling external -- entry points (e.g., stdcalling on win32) getPrimRepSizeInBytes :: PrimRep -> Int -getPrimRepSizeInBytes pr = - case pr of - CharRep -> 4 - Int8Rep -> 1 - IntRep -> wORD_SIZE - AddrRep -> wORD_SIZE - FloatRep -> wORD_SIZE - DoubleRep -> dOUBLE_SIZE * wORD_SIZE - Word64Rep -> wORD64_SIZE * wORD_SIZE - Int64Rep -> iNT64_SIZE * wORD_SIZE - WeakPtrRep -> wORD_SIZE - ForeignObjRep -> wORD_SIZE - StablePtrRep -> wORD_SIZE - StableNameRep -> wORD_SIZE - ArrayRep -> wORD_SIZE - ByteArrayRep -> wORD_SIZE - _ -> panic "getPrimRepSize: ouch - this wasn't supposed to happen!" +getPrimRepSizeInBytes CharRep = 4 +getPrimRepSizeInBytes IntRep = wORD_SIZE +getPrimRepSizeInBytes WordRep = wORD_SIZE +getPrimRepSizeInBytes AddrRep = wORD_SIZE +getPrimRepSizeInBytes FloatRep = wORD_SIZE +getPrimRepSizeInBytes DoubleRep = dOUBLE_SIZE * wORD_SIZE +getPrimRepSizeInBytes Int8Rep = 1 +getPrimRepSizeInBytes Int16Rep = 2 +getPrimRepSizeInBytes Int32Rep = 4 +getPrimRepSizeInBytes Int64Rep = 8 +getPrimRepSizeInBytes Word8Rep = 1 +getPrimRepSizeInBytes Word16Rep = 2 +getPrimRepSizeInBytes Word32Rep = 4 +getPrimRepSizeInBytes Word64Rep = 8 +getPrimRepSizeInBytes WeakPtrRep = wORD_SIZE +getPrimRepSizeInBytes ForeignObjRep = wORD_SIZE +getPrimRepSizeInBytes StablePtrRep = wORD_SIZE +getPrimRepSizeInBytes StableNameRep = wORD_SIZE +getPrimRepSizeInBytes ArrayRep = wORD_SIZE +getPrimRepSizeInBytes ByteArrayRep = wORD_SIZE +getPrimRepSizeInBytes _ = panic "getPrimRepSize: ouch - this wasn't supposed to happen!" \end{code} @@ -216,8 +208,6 @@ instance Outputable PrimRep where ppr kind = text (showPrimRep kind) showPrimRep :: PrimRep -> String -showPrimRepToUser :: PrimRep -> String - showPrimRep PtrRep = "P_" -- short for StgPtr showPrimRep CodePtrRep = "P_" -- DEATH to StgFunPtr! (94/02/22 WDP) showPrimRep DataPtrRep = "D_" @@ -225,6 +215,11 @@ showPrimRep RetRep = "P_" showPrimRep CostCentreRep = "CostCentre" showPrimRep CharRep = "C_" showPrimRep Int8Rep = "StgInt8" +showPrimRep Int16Rep = "StgInt16" +showPrimRep Int32Rep = "StgInt32" +showPrimRep Word8Rep = "StgWord8" +showPrimRep Word16Rep = "StgWord16" +showPrimRep Word32Rep = "StgWord32" showPrimRep IntRep = "I_" -- short for StgInt showPrimRep WordRep = "W_" -- short for StgWord showPrimRep Int64Rep = "LI_" -- short for StgLongInt @@ -241,23 +236,7 @@ showPrimRep ThreadIdRep = "StgTSO*" showPrimRep WeakPtrRep = "P_" showPrimRep ForeignObjRep = "StgAddr" showPrimRep VoidRep = "!!VOID_KIND!!" - -primRepString CharRep = "Char" -primRepString Int8Rep = "Char" -- To have names like newCharArray# -primRepString IntRep = "Int" -primRepString WordRep = "Word" -primRepString Int64Rep = "Int64" -primRepString Word64Rep = "Word64" -primRepString AddrRep = "Addr" -primRepString FloatRep = "Float" -primRepString DoubleRep = "Double" -primRepString WeakPtrRep = "Weak" -primRepString ForeignObjRep = "ForeignObj" -primRepString StablePtrRep = "StablePtr" -primRepString StableNameRep = "StableName" -primRepString other = pprPanic "primRepString" (ppr other) - -showPrimRepToUser pr = primRepString pr +showPrimRep BCORep = "P_" -- not sure -- JRS 000708 \end{code} Foreign Objects and Arrays are treated specially by the code for