[project @ 2000-05-01 14:35:17 by panne]
authorpanne <unknown>
Mon, 1 May 2000 14:35:17 +0000 (14:35 +0000)
committerpanne <unknown>
Mon, 1 May 2000 14:35:17 +0000 (14:35 +0000)
Handle sameMutVar#, sameMVar#, writeForeignObj#

ghc/compiler/nativeGen/StixPrim.lhs

index 9d694b9..08a6356 100644 (file)
@@ -91,6 +91,12 @@ primCode [res] SameMutableArrayOp args
 
 primCode res@[_] SameMutableByteArrayOp args
   = primCode res SameMutableArrayOp args
+
+primCode res@[_] SameMutVarOp args
+  = primCode res SameMutableArrayOp args
+
+primCode res@[_] SameMVarOp args
+  = primCode res SameMutableArrayOp args
 \end{code}
 
 Freezing an array of pointers is a double assignment.  We fix the
@@ -195,7 +201,7 @@ primCode [lhs] (IndexOffForeignObjOp pk) [obj, ix]
        lhs' = amodeToStix lhs
        obj' = amodeToStix obj
        ix' = amodeToStix ix
-       obj'' = StIndex PtrRep obj' fixedHS
+       obj'' = StIndex AddrRep obj' fixedHS
        assign = StAssign pk lhs' (StInd pk (StIndex pk obj'' ix'))
     in
     returnUs (\xs -> assign : xs)
@@ -218,6 +224,15 @@ primCode [] (WriteByteArrayOp pk) [obj, ix, v]
        assign = StAssign pk (StInd pk (StIndex pk base ix')) v'
     in
     returnUs (\xs -> assign : xs)
+
+primCode [] WriteForeignObjOp [obj, v]
+  = let
+       obj' = amodeToStix obj
+       v' = amodeToStix v
+       obj'' = StIndex AddrRep obj' (StInt 4711) -- fixedHS
+       assign = StAssign AddrRep (StInd AddrRep obj'') v'
+    in
+    returnUs (\xs -> assign : xs)
 \end{code}
 
 \begin{code}