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

SCM Repository

[diderot] Diff of /branches/vis12-cl/src/compiler/c-util/tree-to-c.sml
ViewVC logotype

Diff of /branches/vis12-cl/src/compiler/c-util/tree-to-c.sml

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

revision 1803, Fri Apr 6 13:46:37 2012 UTC revision 1858, Fri Apr 20 20:14:41 2012 UTC
# Line 58  Line 58 
58      fun addrOf e = CL.mkUnOp(CL.%&, e)      fun addrOf e = CL.mkUnOp(CL.%&, e)
59    
60    (* translate TreeIL types to CLang types *)    (* translate TreeIL types to CLang types *)
61      fun trType ty = (case ty      val trType = CTyTranslate.toType
            of Ty.BoolTy => CL.T_Named "bool"  
             | Ty.StringTy => CL.charPtr  
             | Ty.IntTy => !N.gIntTy  
             | Ty.TensorTy[] => !N.gRealTy  
             | Ty.TensorTy[n] => CL.T_Named(N.vecTy n)  
             | Ty.TensorTy[n, m] => CL.T_Named(N.matTy(n,m))  
             | Ty.TensorTy[n, m, l] => CL.T_Named(N.ten3Ty(n,m,l))  
             | Ty.SeqTy(Ty.IntTy, n) => CL.T_Named(N.ivecTy n)  
             | Ty.SeqTy(ty, n) => CL.T_Array(trType ty, SOME n)  
             | Ty.DynSeqTy _ => CL.T_Ptr(CL.T_Named N.dynSeqTy)  
             | Ty.AddrTy info => CL.T_Ptr(CL.T_Num(ImageInfo.sampleTy info))  
             | Ty.ImageTy info => CL.T_Ptr(CL.T_Named(N.imageTy(ImageInfo.dim info)))  
             | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])  
           (* end case *))  
62    
63    (* generate new variables *)    (* generate new variables *)
64      local      local
# Line 109  Line 95 
95    
96    (* vector indexing support.  Arguments are: vector, arity, index *)    (* vector indexing support.  Arguments are: vector, arity, index *)
97      fun ivecIndex (v, n, ix) = let      fun ivecIndex (v, n, ix) = let
98            val unionTy = CL.T_Named(concat["union", Int.toString n, !N.gIntSuffix, "_t"])            val e1 = CL.mkCast(CL.T_Named(N.iunionTy n), v)
           val e1 = CL.mkCast(unionTy, v)  
99            val e2 = CL.mkSelect(e1, "i")            val e2 = CL.mkSelect(e1, "i")
100            in            in
101              CL.mkSubscript(e2, intExp ix)              CL.mkSubscript(e2, intExp ix)
102            end            end
103    
104      fun vecIndex (v, n, ix) = let      fun vecIndex (v, n, ix) = let
105            val unionTy = CL.T_Named(concat["union", Int.toString n, !N.gRealSuffix, "_t"])            val e1 = CL.mkCast(CL.T_Named(N.unionTy n), v)
           val e1 = CL.mkCast(unionTy, v)  
106            val e2 = CL.mkSelect(e1, "r")            val e2 = CL.mkSelect(e1, "r")
107            in            in
108              CL.mkSubscript(e2, intExp ix)              CL.mkSubscript(e2, intExp ix)
# Line 179  Line 163 
163              | (Op.Index(Ty.SeqTy(Ty.IntTy, n), i), [a]) => ivecIndex (a, n, i)              | (Op.Index(Ty.SeqTy(Ty.IntTy, n), i), [a]) => ivecIndex (a, n, i)
164              | (Op.Index(Ty.TensorTy[n], i), [a]) => vecIndex (a, n, i)              | (Op.Index(Ty.TensorTy[n], i), [a]) => vecIndex (a, n, i)
165              | (Op.Subscript(Ty.SeqTy(Ty.IntTy, n)), [v, ix]) => let              | (Op.Subscript(Ty.SeqTy(Ty.IntTy, n)), [v, ix]) => let
166                  val unionTy = CL.T_Named(concat["union", Int.toString n, !N.gIntSuffix, "_t"])                  val unionTy = CL.T_Named(N.iunionTy n)
167                  val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "i")                  val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "i")
168                  in                  in
169                    CL.mkSubscript(vecExp, ix)                    CL.mkSubscript(vecExp, ix)
170                  end                  end
171              | (Op.Subscript(Ty.SeqTy(ty, n)), [v, ix]) => CL.mkSubscript(v, ix)              | (Op.Subscript(Ty.SeqTy(ty, n)), [v, ix]) => CL.mkSubscript(v, ix)
172              | (Op.Subscript(Ty.TensorTy[n]), [v, ix]) => let              | (Op.Subscript(Ty.TensorTy[n]), [v, ix]) => let
173                  val unionTy = CL.T_Named(concat["union", Int.toString n, !N.gRealSuffix, "_t"])                  val unionTy = CL.T_Named(N.unionTy n)
174                  val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "r")                  val vecExp = CL.mkSelect(CL.mkCast(unionTy, v), "r")
175                  in                  in
176                    CL.mkSubscript(vecExp, ix)                    CL.mkSubscript(vecExp, ix)
# Line 486  Line 470 
470              (fn (x, env) => V.Map.insert(env, x, V(trType(V.ty x), V.name x)))              (fn (x, env) => V.Map.insert(env, x, V(trType(V.ty x), V.name x)))
471                env locals                env locals
472    
473    (* generate code to check the status of runtime-system calls *)    (* generate code to check the status of runtime-system calls; this code assumes that
474       * we are in a function with a boolean return type
475       *)
476      fun checkSts mkDecl = let      fun checkSts mkDecl = let
477            val sts = freshVar "sts"            val sts = freshVar "sts"
478            in            in
479              mkDecl sts @              mkDecl sts @
480              [CL.mkIfThen(              [CL.mkIfThen(
481                CL.mkBinOp(CL.mkVar "DIDEROT_OK", CL.#!=, CL.mkVar sts),                CL.mkBinOp(CL.mkVar "DIDEROT_OK", CL.#!=, CL.mkVar sts),
482                CL.mkCall("exit", [intExp 1]))]                CL.mkReturn(SOME(CL.mkVar "true")))]
483            end            end
484    
485      fun trStms (env, stms) = let      fun trStms (env, stms) = let
# Line 520  Line 506 
506                        in [                        in [
507                          CL.mkDecl(                          CL.mkDecl(
508                            CL.T_Named N.statusTy, sts,                            CL.T_Named N.statusTy, sts,
509                            SOME(CL.I_Exp(CL.E_Apply(loadFn, [name, addrOf lhs]))))                            SOME(CL.I_Exp(CL.E_Apply(loadFn, [
510                                  CL.mkCast(CL.T_Ptr(CL.T_Named "WorldPrefix_t"), CL.mkVar "wrld"),
511                                  name, addrOf lhs
512                                ]))))
513                        ] end)                        ] end)
514                    | IL.S_Input(_, _, _, NONE) => []                    | IL.S_Input(_, _, _, NONE) => []
515                    | IL.S_Input(lhs, name, _, SOME dflt) => [                    | IL.S_Input(lhs, name, _, SOME dflt) => [
516                          CL.mkAssign(VarToC.lvalueVar(env, lhs), trExp(env, dflt))                          CL.mkAssign(VarToC.lvalueVar(env, lhs), trExp(env, dflt))
517                        ]                        ]
518                    | IL.S_Exit args => [CL.mkReturn NONE]                    | IL.S_Exit args => []
519                    | IL.S_Active => [CL.mkReturn(SOME(CL.mkVar N.kActive))]                    | IL.S_Active => [CL.mkReturn(SOME(CL.mkVar N.kActive))]
520                    | IL.S_Stabilize => [CL.mkReturn(SOME(CL.mkVar N.kStabilize))]                    | IL.S_Stabilize => [CL.mkReturn(SOME(CL.mkVar N.kStabilize))]
521                    | IL.S_Die => [CL.mkReturn(SOME(CL.mkVar N.kDie))]                    | IL.S_Die => [CL.mkReturn(SOME(CL.mkVar N.kDie))]

Legend:
Removed from v.1803  
changed lines
  Added in v.1858

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