import TypeRep ( funTyCon )
import Type ( Type )
import TysPrim
-import TysWiredIn ( unitTyCon, tupleTyCon,
+import TysWiredIn ( unitTyCon, unitDataCon,
+ tupleTyCon,
intTyCon, intTyConName,
- boolTyCon, boolTyConName, trueDataCon, falseDataCon )
+ doubleTyCon, doubleTyConName,
+ boolTyCon, boolTyConName, trueDataCon, falseDataCon,
+ parrTyCon, parrTyConName )
+import PrelNames ( gHC_PARR )
import Module
import BasicTypes ( Boxity(..) )
nDP_INSTANCES = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Instances")
nDP_COMBINATORS = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Combinators")
-nDP_PRELUDE_PARR = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.PArr")
-nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Int")
+nDP_PRELUDE_PARR = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.PArr")
+nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Int")
+nDP_PRELUDE_DOUBLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Double")
data Builtins = Builtins {
parrayTyCon :: TyCon
upToPAIntPrimVar <- externalVar nDP_PRIM FSLIT("upToPA_Int#")
selectPAIntPrimVar <- externalVar nDP_PRIM FSLIT("selectPA_Int#")
truesPABoolPrimVar <- externalVar nDP_PRIM FSLIT("truesPA_Bool#")
- lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA")
- replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA")
+ lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA#")
+ replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA#")
emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA")
- packPAVar <- externalVar nDP_PARRAY FSLIT("packPA")
+ packPAVar <- externalVar nDP_PARRAY FSLIT("packPA#")
combines <- mapM (externalVar nDP_PARRAY)
- [mkFastString ("combine" ++ show i ++ "PA")
+ [mkFastString ("combine" ++ show i ++ "PA#")
| i <- [2..mAX_NDP_COMBINE]]
let combinePAVars = listArray (2, mAX_NDP_COMBINE) combines
(umods, ufs, vmods, vfs) = unzip4 preludeVars
defaultDataConWorkers :: [DataCon]
-defaultDataConWorkers = [trueDataCon, falseDataCon]
+defaultDataConWorkers = [trueDataCon, falseDataCon, unitDataCon]
preludeVars :: [(Module, FastString, Module, FastString)]
preludeVars
= [
- mk nDP_PRELUDE_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA")
+ mk gHC_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA")
+ , mk gHC_PARR FSLIT("zipWithP") nDP_COMBINATORS FSLIT("zipWithPA")
+ , mk gHC_PARR FSLIT("zipP") nDP_COMBINATORS FSLIT("zipPA")
+ , mk gHC_PARR FSLIT("filterP") nDP_COMBINATORS FSLIT("filterPA")
+ , mk gHC_PARR FSLIT("lengthP") nDP_COMBINATORS FSLIT("lengthPA")
+ , mk gHC_PARR FSLIT("replicateP") nDP_COMBINATORS FSLIT("replicatePA")
+ , mk gHC_PARR FSLIT("!:") nDP_COMBINATORS FSLIT("indexPA")
+ , mk gHC_PARR FSLIT("crossMapP") nDP_COMBINATORS FSLIT("crossMapPA")
+ , mk gHC_PARR FSLIT("singletonP") nDP_COMBINATORS FSLIT("singletonPA")
+ , mk gHC_PARR FSLIT("concatP") nDP_COMBINATORS FSLIT("concatPA")
+
, mk nDP_PRELUDE_INT FSLIT("plus") nDP_PRELUDE_INT FSLIT("plusV")
, mk nDP_PRELUDE_INT FSLIT("minus") nDP_PRELUDE_INT FSLIT("minusV")
+ , mk nDP_PRELUDE_INT FSLIT("mult") nDP_PRELUDE_INT FSLIT("multV")
+ , mk nDP_PRELUDE_INT FSLIT("sumP") nDP_PRELUDE_INT FSLIT("sumPA")
+ , mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA")
+
+ , mk nDP_PRELUDE_DOUBLE FSLIT("plus") nDP_PRELUDE_DOUBLE FSLIT("plusV")
+ , mk nDP_PRELUDE_DOUBLE FSLIT("minus") nDP_PRELUDE_DOUBLE FSLIT("minusV")
+ , mk nDP_PRELUDE_DOUBLE FSLIT("mult") nDP_PRELUDE_DOUBLE FSLIT("multV")
+ , mk nDP_PRELUDE_DOUBLE FSLIT("sumP") nDP_PRELUDE_DOUBLE FSLIT("sumPA")
+
+ -- FIXME: temporary
+ , mk nDP_PRELUDE_PARR FSLIT("fromPArrayP") nDP_PRELUDE_PARR FSLIT("fromPArrayPA")
+ , mk nDP_PRELUDE_PARR FSLIT("toPArrayP") nDP_PRELUDE_PARR FSLIT("toPArrayPA")
+ , mk nDP_PRELUDE_PARR FSLIT("fromNestedPArrayP") nDP_PRELUDE_PARR FSLIT("fromNestedPArrayPA")
]
where
mk = (,,,)
initBuiltinTyCons :: Builtins -> DsM [(Name, TyCon)]
initBuiltinTyCons bi
= do
- parr <- externalTyCon nDP_PRELUDE_PARR FSLIT("PArr")
+ -- parr <- externalTyCon nDP_PRELUDE_PARR FSLIT("PArr")
return $ (tyConName funTyCon, closureTyCon bi)
- : (tyConName parr, parrayTyCon bi)
+ : (parrTyConName, parrayTyCon bi)
+
+ -- FIXME: temporary
+ : (tyConName $ parrayTyCon bi, parrayTyCon bi)
+
: [(tyConName tc, tc) | tc <- defaultTyCons]
defaultTyCons :: [TyCon]
-defaultTyCons = [intTyCon, boolTyCon]
+defaultTyCons = [intTyCon, boolTyCon, doubleTyCon]
initBuiltinDataCons :: Builtins -> [(Name, DataCon)]
initBuiltinDataCons bi = [(dataConName dc, dc)| dc <- defaultDataCons]
defaultDataCons :: [DataCon]
-defaultDataCons = [trueDataCon, falseDataCon]
+defaultDataCons = [trueDataCon, falseDataCon, unitDataCon]
initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)]
initBuiltinDicts ps
, mk unitTyConName nDP_INSTANCES FSLIT("dPA_Unit")
, mk intTyConName nDP_INSTANCES FSLIT("dPA_Int")
+ , mk doubleTyConName nDP_INSTANCES FSLIT("dPA_Double")
, mk boolTyConName nDP_INSTANCES FSLIT("dPA_Bool")
]
++ tups
-- temporary
, mk intTyConName nDP_INSTANCES FSLIT("dPR_Int")
+ , mk doubleTyConName nDP_INSTANCES FSLIT("dPR_Double")
]
++ map mk_sum [2..mAX_NDP_SUM]