From: simonmar Date: Thu, 12 May 2005 11:11:58 +0000 (+0000) Subject: [project @ 2005-05-12 11:11:58 by simonmar] X-Git-Tag: Initial_conversion_from_CVS_complete~569 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=5de5996013180243efbe6e4145b1d23eaebb8741;p=ghc-hetmet.git [project @ 2005-05-12 11:11:58 by simonmar] SMP: we need to assign the result of resumeThread to BaseReg, because we might now have a new Capability. (this was an interesting bug to find...) --- diff --git a/ghc/compiler/codeGen/CgForeignCall.hs b/ghc/compiler/codeGen/CgForeignCall.hs index 9897651..417c3c5 100644 --- a/ghc/compiler/codeGen/CgForeignCall.hs +++ b/ghc/compiler/codeGen/CgForeignCall.hs @@ -32,7 +32,7 @@ import MachOp import SMRep import ForeignCall import Constants -import StaticFlags ( opt_SccProfilingOn ) +import StaticFlags ( opt_SccProfilingOn, opt_SMP ) import Outputable import Monad ( when ) @@ -78,13 +78,20 @@ emitForeignCall results (CCall (CCallSpec target cconv safety)) args live vols <- getVolatileRegs live id <- newTemp wordRep emitSaveThreadState - stmtC (CmmCall (CmmForeignCall suspendThread CCallConv) [(id,NoHint)] + stmtC (CmmCall (CmmForeignCall suspendThread CCallConv) + [(id,NoHint)] [ (CmmReg (CmmGlobal BaseReg), PtrHint) ] (Just vols) ) stmtC (the_call vols) - stmtC (CmmCall (CmmForeignCall resumeThread CCallConv) [] - [ (CmmReg id, NoHint) ] (Just vols) + stmtC (CmmCall (CmmForeignCall resumeThread CCallConv) + (if opt_SMP then [(CmmGlobal BaseReg, PtrHint)] else []) + -- Assign the result to BaseReg: we might now have + -- a different Capability! Small optimisation: + -- only do this in SMP mode, where there are >1 + -- Capabilities. + [ (CmmReg id, NoHint) ] + (Just vols) ) emitLoadThreadState