Commit 5de59960 authored by simonmar's avatar simonmar
Browse files

[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...)
parent 600d395c
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment