Commit 3cc8487e authored by Simon Marlow's avatar Simon Marlow
Browse files

make the par# primop actually do something

parent 33482c15
...@@ -10,21 +10,25 @@ module CgPrimOp ( ...@@ -10,21 +10,25 @@ module CgPrimOp (
cgPrimOp cgPrimOp
) where ) where
#include "HsVersions.h"
import ForeignCall ( CCallConv(CCallConv) ) import ForeignCall ( CCallConv(CCallConv) )
import StgSyn ( StgLiveVars, StgArg ) import StgSyn ( StgLiveVars, StgArg )
import CgBindery ( getVolatileRegs, getArgAmodes ) import CgBindery ( getVolatileRegs, getArgAmodes )
import CgMonad import CgMonad
import CgInfoTbls ( getConstrTag ) import CgInfoTbls ( getConstrTag )
import CgUtils ( cmmOffsetW, cmmOffsetB, cmmLoadIndexW ) import CgUtils ( cmmOffsetW, cmmOffsetB, cmmLoadIndexW )
import ForeignCall
import Cmm import Cmm
import CLabel ( mkMAP_FROZEN_infoLabel, mkMAP_DIRTY_infoLabel, import CLabel ( mkMAP_FROZEN_infoLabel, mkMAP_DIRTY_infoLabel,
mkDirty_MUT_VAR_Label ) mkDirty_MUT_VAR_Label, mkRtsCodeLabel )
import CmmUtils import CmmUtils
import MachOp import MachOp
import SMRep import SMRep
import PrimOp ( PrimOp(..) ) import PrimOp ( PrimOp(..) )
import SMRep ( tablesNextToCode ) import SMRep ( tablesNextToCode )
import Constants ( wORD_SIZE, wORD_SIZE_IN_BITS ) import Constants ( wORD_SIZE, wORD_SIZE_IN_BITS )
import StaticFlags ( opt_Parallel, opt_SMP )
import Outputable import Outputable
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
...@@ -109,7 +113,19 @@ emitPrimOp [res_r,res_c] IntSubCOp [aa,bb] live ...@@ -109,7 +113,19 @@ emitPrimOp [res_r,res_c] IntSubCOp [aa,bb] live
emitPrimOp [res] ParOp [arg] live emitPrimOp [res] ParOp [arg] live
= stmtC (CmmAssign res (CmmLit (mkIntCLit 1))) | not (opt_Parallel || opt_SMP)
= stmtC (CmmAssign res (CmmLit (mkIntCLit 1)))
| otherwise
= do
-- for now, just implement this in a C function
-- later, we might want to inline it.
vols <- getVolatileRegs live
stmtC (CmmCall (CmmForeignCall newspark CCallConv) [(res,NoHint)]
[(CmmReg (CmmGlobal BaseReg), PtrHint),
(arg,PtrHint)]
(Just vols))
where
newspark = CmmLit (CmmLabel (mkRtsCodeLabel SLIT("newSpark")))
emitPrimOp [res] ReadMutVarOp [mutv] live emitPrimOp [res] ReadMutVarOp [mutv] live
= stmtC (CmmAssign res (cmmLoadIndexW mutv fixedHdrSize)) = stmtC (CmmAssign res (cmmLoadIndexW mutv fixedHdrSize))
......
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