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 1341, Tue Jun 14 07:05:07 2011 UTC revision 1343, Tue Jun 14 16:15:33 2011 UTC
# Line 15  Line 15 
15      structure ToCL = TreeToCL      structure ToCL = TreeToCL
16      structure N = CNames      structure N = CNames
17    
18      (* helper functions for specifying parameters in various address spaces *)
19        fun clParam (spc, ty, x) = CL.PARAM([spc], ty, x)
20        fun globalParam (ty, x) = CL.PARAM(["__global"], ty, x)
21        fun constantParam (ty, x) = CL.PARAM(["__constant"], ty, x)
22        fun localParam (ty, x) = CL.PARAM(["__local"], ty, x)
23        fun privateParam (ty, x) = CL.PARAM(["__private"], ty, x)
24    
25    (* C variable translation *)    (* C variable translation *)
26      structure TrCVar =      structure TrCVar =
27        struct        struct
# Line 480  Line 487 
487    
488        (* generate the data and global parameters *)        (* generate the data and global parameters *)
489          fun genKeneralGlobalParams ((name,tyname)::rest) =          fun genKeneralGlobalParams ((name,tyname)::rest) =
490                CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named (RN.imageTy tyname)), RN.addBufferSuffix name) ::                globalParam (CL.T_Ptr(CL.T_Named (RN.imageTy tyname)), RN.addBufferSuffix name) ::
491                CL.PARAM(["__global"], CL.T_Ptr(CL.voidTy), RN.addBufferSuffixData name) ::                globalParam (CL.T_Ptr(CL.voidTy), RN.addBufferSuffixData name) ::
492                genKeneralGlobalParams rest                genKeneralGlobalParams rest
493            | genKeneralGlobalParams [] = []            | genKeneralGlobalParams [] = []
494    
# Line 501  Line 508 
508                val outState = "strand_out"                val outState = "strand_out"
509                                    val tempVar = "tmp"                                    val tempVar = "tmp"
510                val params = [                val params = [
511                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfIn"),
512                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut"),                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfOut"),
513                        CL.PARAM(["__global"], CL.intTy, "width"),                        globalParam (CL.intTy, "width"),
514                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named RN.globalsTy), RN.globalsVarName)                        globalParam (CL.T_Ptr(CL.T_Named RN.globalsTy), RN.globalsVarName)
515                      ] @ genKeneralGlobalParams(!imgGlobals)                      ] @ genKeneralGlobalParams(!imgGlobals)
516                val thread_ids = if nDims = 1                val thread_ids = if nDims = 1
517                        then [                        then [
# Line 524  Line 531 
531                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), outState, NONE),                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), outState, NONE),
532                                                           CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), tempVar, NONE)                                                           CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), tempVar, NONE)
533                      ]                      ]
534                                    val swapStms = [CL.mkAssign(CL.E_Var tempVar, CL.E_Var inState),                val swapStms = [
535                          CL.mkAssign(CL.E_Var tempVar, CL.E_Var inState),
536                                                                            CL.mkAssign(CL.E_Var inState, CL.E_Var outState),                                                                            CL.mkAssign(CL.E_Var inState, CL.E_Var outState),
537                                                                            CL.mkAssign(CL.E_Var outState, CL.E_Var tempVar)]                        CL.mkAssign(CL.E_Var outState, CL.E_Var tempVar)
538                        ]
539                val strandObjects = if nDims = 1                val strandObjects = if nDims = 1
540                      then [                      then [
541                          CL.mkAssign( CL.mkVar inState,  CL.mkUnOp(CL.%&,CL.mkSubscript(CL.mkVar "selfIn", CL.mkStr "x"))),                          CL.mkAssign( CL.mkVar inState,  CL.mkUnOp(CL.%&,CL.mkSubscript(CL.mkVar "selfIn", CL.mkStr "x"))),
# Line 725  Line 734 
734          fun init (Strand{name, tyName, code, init_code, ...}, params, init) = let          fun init (Strand{name, tyName, code, init_code, ...}, params, init) = let
735                val fName = RN.strandInit name                val fName = RN.strandInit name
736                val params =                val params =
737                      CL.PARAM(["__global"], globPtrTy, RN.globalsVarName) ::                      globalParam (globPtrTy, RN.globalsVarName) ::
738                      CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut") ::                      globalParam (CL.T_Ptr(CL.T_Named tyName), "selfOut") ::
739                        List.map (fn (ToCL.V(ty, x)) => CL.PARAM([], ty, x)) params                        List.map (fn (ToCL.V(ty, x)) => CL.PARAM([], ty, x)) params
740                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)
741                in                in
# Line 737  Line 746 
746          fun method (Strand{name, tyName, code,...}, methName, body) = let          fun method (Strand{name, tyName, code,...}, methName, body) = let
747                val fName = concat[name, "_", methName]                val fName = concat[name, "_", methName]
748                val params = [                val params = [
749                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfIn"),
750                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut"),                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfOut"),
751                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named (RN.globalsTy)), RN.globalsVarName)                        globalParam (CL.T_Ptr(CL.T_Named (RN.globalsTy)), RN.globalsVarName)
752                      ]                      ]
753                val methFn = CL.D_Func([], CL.int32, fName, params, body)                val methFn = CL.D_Func([], CL.int32, fName, params, body)
754                in                in

Legend:
Removed from v.1341  
changed lines
  Added in v.1343

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