From 5860a370374e1612fbb58468364a48bcde602a1d Mon Sep 17 00:00:00 2001 From: panne Date: Mon, 1 May 2000 14:35:17 +0000 Subject: [PATCH] [project @ 2000-05-01 14:35:17 by panne] Handle sameMutVar#, sameMVar#, writeForeignObj# --- ghc/compiler/nativeGen/StixPrim.lhs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs index 9d694b9..08a6356 100644 --- a/ghc/compiler/nativeGen/StixPrim.lhs +++ b/ghc/compiler/nativeGen/StixPrim.lhs @@ -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} -- 1.7.10.4