Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/cl-target/cl-target.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/cl-target/cl-target.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1423, Fri Jul 1 04:06:26 2011 UTC revision 1425, Fri Jul 1 18:05:07 2011 UTC
# Line 524  Line 524 
524                val inState = "strand_in"                val inState = "strand_in"
525                val outState = "strand_out"                val outState = "strand_out"
526                val tempVar = "tmp"                val tempVar = "tmp"
527                  val sizeParams = if nDims = 1 then
528                            []
529                        else if nDims = 2 then
530                            [CL.PARAM([], CL.intTy, "width")]
531                        else
532                            [CL.PARAM([], CL.intTy, "width"),CL.PARAM([], CL.intTy, "height")]
533                val params = [                val params = [
534                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfIn"),
535                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfOut"),                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfOut"),
536                        globalParam(CL.T_Ptr(CL.T_Num(RawTypes.RT_UInt8)), "strandStatus"),                        globalParam(CL.T_Ptr(CL.T_Num(RawTypes.RT_UInt8)), "strandStatus")] @
537                        CL.PARAM([], CL.intTy, "width"),                        sizeParams @
538                        globalParam(globPtrTy, RN.globalsVarName)                       [ globalParam(globPtrTy, RN.globalsVarName)
539                      ] @ genKeneralGlobalParams(!imgGlobals)                      ] @ genKeneralGlobalParams(!imgGlobals)
540                val thread_ids = if nDims = 1                val thread_ids = if nDims = 1
541                        then [                        then [
# Line 539  Line 545 
545                      else if nDims = 2                      else if nDims = 2
546                        then [                        then [
547                            CL.mkDecl(CL.intTy, "x",                            CL.mkDecl(CL.intTy, "x",
548                              SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 0])))),                              SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 1])))),
549                              CL.mkDecl(CL.intTy, "y",
550                                SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 0]))))
551                            ]
552                        else
553                           [
554                              CL.mkDecl(CL.intTy, "x",
555                                SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 1])))),
556                            CL.mkDecl(CL.intTy, "y",                            CL.mkDecl(CL.intTy, "y",
557                              SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 1]))))                              SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 0])))),
558                              CL.mkDecl(CL.intTy, "z",
559                                SOME(CL.I_Exp(CL.mkApply(RN.getGlobalThreadId,[CL.mkInt 2]))))
560                          ]                          ]
561                      else raise Fail "nDims > 2"  
562    
563                val strandDecl = [                val strandDecl = [
564                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), inState, NONE),                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), inState, NONE),
565                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), outState, NONE),                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), outState, NONE),
# Line 559  Line 575 
575                                   CL.mkAssign(CL.E_Var outState, CL.E_Var tempVar)]))                                   CL.mkAssign(CL.E_Var outState, CL.E_Var tempVar)]))
576                val barrierStm = CL.mkCall("barrier",[CL.E_Var "CLK_LOCAL_MEM_FENCE"])                val barrierStm = CL.mkCall("barrier",[CL.E_Var "CLK_LOCAL_MEM_FENCE"])
577                val index = if nDims = 1 then                val index = if nDims = 1 then
578                          CL.mkStr "x"                          CL.mkVar "x"
579                      else                      else if nDims = 2 then
580                          CL.mkBinOp(                          CL.mkBinOp(
581                              CL.mkBinOp(CL.mkVar "x", CL.#*, CL.mkVar "width"), CL.#+, CL.mkVar "y")                              CL.mkBinOp(CL.mkVar "y", CL.#*, CL.mkVar "width"), CL.#+, CL.mkVar "x")
582                        else
583                           CL.mkBinOp(CL.mkBinOp(CL.mkBinOp(
584                                CL.mkBinOp(CL.mkVar "z", CL.#*, CL.mkVar "width"),CL.#*, CL.mkVar "height"), CL.#+,
585                                CL.mkBinOp(CL.mkVar "y",CL.#*,CL.mkVar "height")),CL.#+,CL.mkVar "x")
586    
587                  val args = if nDims = 1 then
588                            [CL.mkVar "x"]
589                        else if nDims = 2 then
590                            [CL.mkVar "x", CL.mkVar "y"]
591                        else
592                            [CL.mkVar "x", CL.mkVar "y", CL.mkVar "z"]
593    
594    
595                val strandObjects =                val strandObjects =
596                       [ CL.mkAssign(CL.mkVar inState,  CL.mkBinOp(CL.mkVar "selfIn",CL.#+,index)),                       [ CL.mkAssign(CL.mkVar inState,  CL.mkBinOp(CL.mkVar "selfIn",CL.#+,index)),
# Line 574  Line 602 
602                val status = CL.mkDecl(CL.intTy, "status", SOME(CL.I_Exp(CL.mkSubscript(CL.mkVar "strandStatus",index))))                val status = CL.mkDecl(CL.intTy, "status", SOME(CL.I_Exp(CL.mkSubscript(CL.mkVar "strandStatus",index))))
603                val strandInitStm = CL.mkCall(RN.strandInit name, [                val strandInitStm = CL.mkCall(RN.strandInit name, [
604                        CL.mkVar RN.globalsVarName,                        CL.mkVar RN.globalsVarName,
605                        CL.mkVar inState,                        CL.mkVar inState] @ args)
                       CL.mkVar "y",  
 (* FIXME: if nDims = 1, then "y" is not defined! the arguments to this call should really come from  
  * the initially code!  
  *)  
                       CL.mkVar "x"])  
606                val local_vars = thread_ids                val local_vars = thread_ids
607                      @ [imageDataDecl]                      @ [imageDataDecl]
608                      @ imageDataStms                      @ imageDataStms

Legend:
Removed from v.1423  
changed lines
  Added in v.1425

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0