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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/cxx-util/gen-tys-and-ops.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cxx-util/gen-tys-and-ops.sml

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

revision 3930, Sun Jun 5 14:13:06 2016 UTC revision 3931, Sun Jun 5 14:13:21 2016 UTC
# Line 21  Line 21 
21      val zero = RealLit.zero false      val zero = RealLit.zero false
22    
23      fun mkReturn exp = CL.mkReturn(SOME exp)      fun mkReturn exp = CL.mkReturn(SOME exp)
24        fun mkInt i = CL.mkInt(IntInf.fromInt i)
25    
26      fun genWrapperStruct (spec : TargetSpec.t, ty, dcls) = (case ty      fun genWrapperStruct (spec : TargetSpec.t, ty, dcls) = (case ty
27             of Ty.TensorTy shape => let             of Ty.TensorTy shape => let
# Line 64  Line 65 
65    
66    (* generate a printing function for tensors with the given shape *)    (* generate a printing function for tensors with the given shape *)
67      fun genTensorPrinter shape = let      fun genTensorPrinter shape = let
68            fun ten i = CL.mkSubscript(            fun ten i = CL.mkSubscript(CL.mkSelect(CL.mkVar "ten", "_data"), mkInt i)
                 CL.mkSelect(CL.mkVar "ten", "_data"),  
                 CL.mkInt(IntLit.fromInt i))  
69            fun prefix (true, lhs) = lhs            fun prefix (true, lhs) = lhs
70              | prefix (false, lhs) = outString(lhs, ",")              | prefix (false, lhs) = outString(lhs, ",")
71            fun lp (isFirst, lhs, i, [d]) = let            fun lp (isFirst, lhs, i, [d]) = let
# Line 135  Line 134 
134    
135      fun doOp env (rator, dcls) = let      fun doOp env (rator, dcls) = let
136            val realTy = Env.realTy env            val realTy = Env.realTy env
           fun mkInt i = CL.mkInt(IntInf.fromInt i)  
137            fun mkVec (w, pw, f) = CL.mkVec(            fun mkVec (w, pw, f) = CL.mkVec(
138                  RN.vecTy w,                  RN.vecTy w,
139                  List.tabulate(pw, fn i => if i < w then f i else CL.mkFlt(zero, realTy)))                  List.tabulate(pw, fn i => if i < w then f i else CL.mkFlt(zero, realTy)))
# Line 181  Line 179 
179                            params,                            params,
180                            mkReturn(mkVec (w, pw, arg)))                            mkReturn(mkVec (w, pw, arg)))
181                        end                        end
182                      | VPack layout => let
183                          val name = RN.vpack (#wid layout)
184                          val vParamTys = Ty.piecesOf layout
185                          val vParams = List.mapi
186                                (fn (i, Ty.VecTy(w, _)) => CL.PARAM([], RN.vecTy w, "v"^Int.toString i))
187                                  vParamTys
188                          val dstTy = CL.T_Array(realTy, SOME(#wid layout))
189                          fun mkAssign (i, v, j) =
190                                CL.mkAssign(
191                                  CL.mkSubscript(CL.mkVar "dst", mkInt i),
192                                  CL.mkSubscript(v, mkInt j))
193                          fun mkAssignsForPiece (dstStart, pieceIdx, wid, stms) = let
194                                val piece = CL.mkVar("v"^Int.toString pieceIdx)
195                                fun mk (j, stms) = if (j < wid)
196                                      then mk (j+1, mkAssign (dstStart+j, piece, j) :: stms)
197                                      else stms
198                                in
199                                  mk (0, stms)
200                                end
201                          fun mkAssigns (_, [], _, stms) = CL.mkBlock(List.rev stms)
202                            | mkAssigns (i, Ty.VecTy(w, _)::tys, offset, stms) =
203                                mkAssigns (i+1, tys, offset+w, mkAssignsForPiece(offset, i, w, stms))
204                          in
205                            CL.D_Func(["inline"], CL.voidTy, name,
206                              CL.PARAM([], dstTy, "dst") :: vParams,
207                              mkAssigns (0, vParamTys, 0, []))
208                          end
209                  (* end case *))                  (* end case *))
210            in            in
211              dcl :: dcls              dcl :: dcls

Legend:
Removed from v.3930  
changed lines
  Added in v.3931

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