From 224247cae3ba0b6b752e4cdd98b6e760b320cec5 Mon Sep 17 00:00:00 2001 From: sewardj Date: Fri, 20 Apr 2001 14:53:15 +0000 Subject: [PATCH] [project @ 2001-04-20 14:53:15 by sewardj] merge rev 1.63.2.1 --- ghc/compiler/nativeGen/StixPrim.lhs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs index 5da841e..b6057f8 100644 --- a/ghc/compiler/nativeGen/StixPrim.lhs +++ b/ghc/compiler/nativeGen/StixPrim.lhs @@ -21,7 +21,8 @@ import UniqSupply ( returnUs, thenUs, getUniqueUs, UniqSM ) import Constants ( mIN_INTLIKE, mIN_CHARLIKE, uF_UPDATEE, bLOCK_SIZE, rESERVED_STACK_WORDS ) import CLabel ( mkIntlikeClosureLabel, mkCharlikeClosureLabel, - mkMAP_FROZEN_infoLabel, mkForeignLabel ) + mkMAP_FROZEN_infoLabel, mkEMPTY_MVAR_infoLabel, + mkForeignLabel ) import CallConv ( cCallConv ) import Outputable import FastTypes @@ -97,9 +98,29 @@ primCode res@[_] SameMutableByteArrayOp args primCode res@[_] SameMutVarOp args = primCode res SameMutableArrayOp args +\end{code} +\begin{code} primCode res@[_] SameMVarOp args = primCode res SameMutableArrayOp args + +-- #define isEmptyMVarzh(r,a) \ +-- r =(I_)((GET_INFO((StgMVar*)(a))) == &stg_EMPTY_MVAR_info ) +primCode [res] IsEmptyMVarOp [arg] + = let res' = amodeToStix res + arg' = amodeToStix arg + arg_info = StInd PtrRep arg' + em_info = StCLbl mkEMPTY_MVAR_infoLabel + same = StPrim IntEqOp [arg_info, em_info] + assign = StAssign IntRep res' same + in + returnUs (\xs -> assign : xs) + +-- #define myThreadIdzh(t) (t = CurrentTSO) +primCode [res] MyThreadIdOp [] + = let res' = amodeToStix res + in returnUs (\xs -> StAssign ThreadIdRep res' stgCurrentTSO : xs) + \end{code} Freezing an array of pointers is a double assignment. We fix the -- 1.7.10.4