[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / compiler / codeGen / CgUsages.lhs
index adf6035..a3fd37a 100644 (file)
@@ -1,5 +1,5 @@
 %
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1995
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 \section[CgUsages]{Accessing and modifying stacks and heap usage info}
 
@@ -9,25 +9,18 @@ modify (\tr{set*} functions) the stacks and heap usage information.
 \begin{code}
 module CgUsages (
        initHeapUsage, setVirtHp, getVirtAndRealHp, setRealHp,
-       setRealAndVirtualSps,
+       setRealAndVirtualSp,
 
-       getVirtSps,
+       getVirtSp, getRealSp,
 
-       getHpRelOffset, getSpARelOffset, getSpBRelOffset,
-
-       freeBStkSlot
+       getHpRelOffset, getSpRelOffset
     ) where
 
 #include "HsVersions.h"
 
-import AbsCSyn         ( RegRelative(..), AbstractC, CAddrMode )
+import AbsCSyn         ( RegRelative(..), VirtualHeapOffset, VirtualSpOffset,
+                         hpRel, spRel )
 import CgMonad
-import HeapOffs                ( zeroOff,
-                         VirtualHeapOffset,
-                         VirtualSpAOffset,
-                         VirtualSpBOffset
-                       )
-import Id              ( IdEnv )
 \end{code}
 
 %************************************************************************
@@ -46,40 +39,40 @@ be in a tidy and consistent state.
 \begin{code}
 initHeapUsage :: (VirtualHeapOffset -> Code) -> Code
 
-initHeapUsage fcode info_down (MkCgState absC binds (a_usage, b_usage, heap_usage))
+initHeapUsage fcode info_down (MkCgState absC binds (stk_usage, heap_usage))
   = state3
   where
-    state1 = MkCgState absC binds (a_usage, b_usage, (zeroOff, zeroOff))
+    state1 = MkCgState absC binds (stk_usage, (0, 0))
     state2 = fcode (heapHWM heap_usage2) info_down state1
-    (MkCgState absC2 binds2 (a_usage2, b_usage2, heap_usage2)) = state2
+    (MkCgState absC2 binds2 (stk_usage2, heap_usage2)) = state2
     state3 = MkCgState  absC2
                        binds2
-                       (a_usage2, b_usage2, heap_usage {- unchanged -})
+                       (stk_usage2, heap_usage {- unchanged -})
 \end{code}
 
 \begin{code}
 setVirtHp :: VirtualHeapOffset -> Code
 setVirtHp new_virtHp info_down
-         state@(MkCgState absC binds (a_stk, b_stk, (virtHp, realHp)))
-  = MkCgState absC binds (a_stk, b_stk, (new_virtHp, realHp))
+         state@(MkCgState absC binds (stk, (virtHp, realHp)))
+  = MkCgState absC binds (stk, (new_virtHp, realHp))
 \end{code}
 
 \begin{code}
 getVirtAndRealHp :: FCode (VirtualHeapOffset, VirtualHeapOffset)
-getVirtAndRealHp info_down state@(MkCgState _ _ (au, bu, (virtHp, realHp)))
+getVirtAndRealHp info_down state@(MkCgState _ _ (_, (virtHp, realHp)))
   = ((virtHp, realHp), state)
 \end{code}
 
 \begin{code}
 setRealHp ::  VirtualHeapOffset -> Code
-setRealHp realHp info_down (MkCgState absC binds (au, bu, (vHp, _)))
-  = MkCgState absC binds (au, bu, (vHp, realHp))
+setRealHp realHp info_down (MkCgState absC binds (stk_usage, (vHp, _)))
+  = MkCgState absC binds (stk_usage, (vHp, realHp))
 \end{code}
 
 \begin{code}
 getHpRelOffset :: VirtualHeapOffset -> FCode RegRelative
-getHpRelOffset virtual_offset info_down state@(MkCgState _ _ (_,_,(_,realHp)))
-  = (HpRel realHp virtual_offset, state)
+getHpRelOffset virtual_offset info_down state@(MkCgState _ _ (_,(_,realHp)))
+  = (hpRel realHp virtual_offset, state)
 \end{code}
 
 The heap high water mark is the larger of virtHp and hwHp.  The latter is
@@ -97,48 +90,34 @@ heapHWM (virtHp, realHp) = virtHp
 %*                                                                     *
 %************************************************************************
 
-@setRealAndVirtualSps@ sets into the environment the offsets of the
+@setRealAndVirtualSp@ sets into the environment the offsets of the
 current position of the real and virtual stack pointers in the current
 stack frame.  The high-water mark is set too.  It generates no code.
 It is used to initialise things at the beginning of a closure body.
 
 \begin{code}
-setRealAndVirtualSps :: VirtualSpAOffset       -- New real SpA
-                    -> VirtualSpBOffset        -- Ditto B stack
+setRealAndVirtualSp :: VirtualSpOffset         -- New real Sp
                     -> Code
 
-setRealAndVirtualSps spA spB info_down (MkCgState absC binds
-                                       ((vspA,fA,realSpA,hwspA),
-                                        (vspB,fB,realSpB,hwspB),
-                                        h_usage))
+setRealAndVirtualSp sp info_down (MkCgState absC binds
+                                       ((vsp,f,realSp,hwsp), h_usage))
   = MkCgState absC binds new_usage
   where
-    new_usage = ((spA, fA, spA, spA),
-                (spB, fB, spB, spB),
-                h_usage)
+    new_usage = ((sp, f, sp, sp), h_usage)
 \end{code}
 
 \begin{code}
-getVirtSps :: FCode (VirtualSpAOffset,VirtualSpBOffset)
-getVirtSps info_down state@(MkCgState absC binds ((virtSpA,_,_,_), (virtSpB,_,_,_), _))
-  = ((virtSpA,virtSpB), state)
-\end{code}
+getVirtSp :: FCode VirtualSpOffset
+getVirtSp info_down state@(MkCgState absC binds ((virtSp,_,_,_), _))
+  = (virtSp, state)
 
-\begin{code}
-getSpARelOffset :: VirtualSpAOffset -> FCode RegRelative
-getSpARelOffset virtual_offset info_down state@(MkCgState _ _ ((_,_,realSpA,_),_,_))
-  = (SpARel realSpA virtual_offset, state)
-
-getSpBRelOffset :: VirtualSpBOffset -> FCode RegRelative
-getSpBRelOffset virtual_offset info_down state@(MkCgState _ _ (_,(_,_,realSpB,_),_))
-  = (SpBRel realSpB virtual_offset, state)
+getRealSp :: FCode VirtualSpOffset
+getRealSp info_down state@(MkCgState absC binds ((_,_,realSp,_),_)) 
+  = (realSp,state)
 \end{code}
 
 \begin{code}
-freeBStkSlot :: VirtualSpBOffset -> Code
-freeBStkSlot b_slot info_down
-       state@(MkCgState absC binds (spa_usage, (virtSpB,free_b,realSpB,hwSpB), heap_usage))
-  = MkCgState absC binds (spa_usage, (virtSpB,new_free_b,realSpB,hwSpB), heap_usage)
-  where
-    new_free_b = addFreeBSlots free_b [b_slot]
+getSpRelOffset :: VirtualSpOffset -> FCode RegRelative
+getSpRelOffset virtual_offset info_down state@(MkCgState _ _ ((_,_,realSp,_),_))
+  = (spRel realSp virtual_offset, state)
 \end{code}