diff --git a/ghc/compiler/absCSyn/PprAbsC.lhs b/ghc/compiler/absCSyn/PprAbsC.lhs index 82431ab1e20de58623fa3617772c81c6e9286d3f..01952d419b0baf06defc996ddc8361c282ef2225 100644 --- a/ghc/compiler/absCSyn/PprAbsC.lhs +++ b/ghc/compiler/absCSyn/PprAbsC.lhs @@ -1300,6 +1300,7 @@ pprUnionTag StablePtrRep = char 'p' pprUnionTag StableNameRep = char 'p' pprUnionTag WeakPtrRep = char 'p' pprUnionTag ForeignObjRep = char 'p' +pprUnionTag PrimPtrRep = char 'p' pprUnionTag ThreadIdRep = char 't' diff --git a/ghc/compiler/codeGen/CgRetConv.lhs b/ghc/compiler/codeGen/CgRetConv.lhs index 4c0151e20577f01a439571832514448d6fa55139..fa7215b30d76473f80cd70ee56f27acbbe750cff 100644 --- a/ghc/compiler/codeGen/CgRetConv.lhs +++ b/ghc/compiler/codeGen/CgRetConv.lhs @@ -1,7 +1,7 @@ % % (c) The GRASP Project, Glasgow University, 1992-1998 % -% $Id: CgRetConv.lhs,v 1.24 2000/08/07 23:37:20 qrczak Exp $ +% $Id: CgRetConv.lhs,v 1.25 2000/09/06 10:23:52 simonmar Exp $ % \section[CgRetConv]{Return conventions for the code generator} @@ -89,6 +89,7 @@ dataReturnConvPrim VoidRep = VoidReg -- Return a primitive-array pointer in the usual register: dataReturnConvPrim ArrayRep = VanillaReg ArrayRep ILIT(1) dataReturnConvPrim ByteArrayRep = VanillaReg ByteArrayRep ILIT(1) +dataReturnConvPrim PrimPtrRep = VanillaReg PrimPtrRep ILIT(1) dataReturnConvPrim StablePtrRep = VanillaReg StablePtrRep ILIT(1) dataReturnConvPrim ForeignObjRep = VanillaReg ForeignObjRep ILIT(1) diff --git a/ghc/compiler/nativeGen/MachMisc.lhs b/ghc/compiler/nativeGen/MachMisc.lhs index 213da0048d45373bbee183f5e4af1453ba767f63..00462dab620f74ae8d68bfb2813e63ca0dc35544 100644 --- a/ghc/compiler/nativeGen/MachMisc.lhs +++ b/ghc/compiler/nativeGen/MachMisc.lhs @@ -283,6 +283,7 @@ primRepToSize FloatRep = IF_ARCH_alpha( TF, IF_ARCH_i386( F, IF_ARCH_sparc( primRepToSize DoubleRep = IF_ARCH_alpha( TF, IF_ARCH_i386( DF,IF_ARCH_sparc( DF,))) primRepToSize ArrayRep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) primRepToSize ByteArrayRep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) +primRepToSize PrimPtrRep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) primRepToSize WeakPtrRep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) primRepToSize ForeignObjRep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) primRepToSize BCORep = IF_ARCH_alpha( Q, IF_ARCH_i386( L, IF_ARCH_sparc( W ,))) diff --git a/ghc/compiler/prelude/PrimRep.lhs b/ghc/compiler/prelude/PrimRep.lhs index 2a84114ffb864e1bcf6f8ce560a33cf905c34bcf..ab6fdc4f39613da0e17282c2e5568a8bce97fbb4 100644 --- a/ghc/compiler/prelude/PrimRep.lhs +++ b/ghc/compiler/prelude/PrimRep.lhs @@ -78,6 +78,11 @@ data PrimRep | ArrayRep -- Primitive array of Haskell pointers | ByteArrayRep -- Primitive array of bytes (no Haskell pointers) + | PrimPtrRep -- Used for MutVars and MVars; + -- a pointer to a primitive object + -- ToDo: subsumes WeakPtrRep, ThreadIdRep, + -- StableNameRep, ForeignObjRep, and BCORep ? + | VoidRep -- Occupies no space at all! -- (Primitive states are mapped onto this) deriving (Eq, Ord) @@ -117,6 +122,7 @@ isFollowableRep ByteArrayRep = True -- '' isFollowableRep WeakPtrRep = True -- '' isFollowableRep ForeignObjRep = True -- '' isFollowableRep StableNameRep = True -- '' +isFollowableRep PrimPtrRep = True -- '' isFollowableRep ThreadIdRep = True -- pointer to a TSO isFollowableRep other = False @@ -227,6 +233,7 @@ showPrimRep AddrRep = "StgAddr" showPrimRep FloatRep = "StgFloat" showPrimRep DoubleRep = "StgDouble" showPrimRep ArrayRep = "P_" -- see comment below +showPrimRep PrimPtrRep = "P_" showPrimRep ByteArrayRep = "StgByteArray" showPrimRep StablePtrRep = "StgStablePtr" showPrimRep StableNameRep = "P_" diff --git a/ghc/compiler/prelude/TysPrim.lhs b/ghc/compiler/prelude/TysPrim.lhs index 4be07160c27b52d9611f05f91ffa3e883e1cb0ec..918b8c3e34ce7575d7a1f2a8e70ad334e83883bd 100644 --- a/ghc/compiler/prelude/TysPrim.lhs +++ b/ghc/compiler/prelude/TysPrim.lhs @@ -165,7 +165,7 @@ system, to parameterise State#. \begin{code} realWorldTy = mkTyConTy realWorldTyCon -realWorldTyCon = pcPrimTyCon realWorldTyConKey SLIT("RealWorld") 0 [] PtrRep +realWorldTyCon = pcPrimTyCon realWorldTyConKey SLIT("RealWorld") 0 [] PrimPtrRep realWorldStatePrimTy = mkStatePrimTy realWorldTy -- State# RealWorld \end{code} @@ -204,7 +204,7 @@ mkMutableByteArrayPrimTy s = mkTyConApp mutableByteArrayPrimTyCon [s] \begin{code} mutVarPrimTyCon = pcPrimTyCon mutVarPrimTyConKey SLIT("MutVar#") - 2 vrcsZP PtrRep + 2 vrcsZP PrimPtrRep mkMutVarPrimTy s elt = mkTyConApp mutVarPrimTyCon [s, elt] \end{code} @@ -217,7 +217,7 @@ mkMutVarPrimTy s elt = mkTyConApp mutVarPrimTyCon [s, elt] \begin{code} mVarPrimTyCon = pcPrimTyCon mVarPrimTyConKey SLIT("MVar#") - 2 vrcsZP PtrRep + 2 vrcsZP PrimPtrRep mkMVarPrimTy s elt = mkTyConApp mVarPrimTyCon [s, elt] \end{code}