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

SCM Repository

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

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

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

revision 841, Mon Apr 18 17:58:45 2011 UTC revision 842, Mon Apr 18 17:58:57 2011 UTC
# Line 9  Line 9 
9    
10      structure IL = TreeIL      structure IL = TreeIL
11      structure V = IL.Var      structure V = IL.Var
12        structure Ty = IL.Ty
13      structure CL = CLang      structure CL = CLang
14      structure RN = RuntimeNames      structure RN = RuntimeNames
15      structure ToC = TreeToC      structure ToC = TreeToC
# Line 21  Line 22 
22          name : string,          name : string,
23          tyName : string,          tyName : string,
24          state : var list ref,          state : var list ref,
25          output : CL.var option ref,     (* the strand's output variable (only one for now) *)          output : (Ty.ty * CL.var) option ref,   (* the strand's output variable (only one for now) *)
26          code : CL.decl list ref          code : CL.decl list ref
27        }        }
28    
# Line 32  Line 33 
33          initially : CL.decl ref          initially : CL.decl ref
34        }        }
35    
36      datatype Env = ENV of {      datatype env = ENV of {
37          info : env_info,          info : env_info,
38          vMap : var V.Map.map,          vMap : var V.Map.map,
39          scope : scope          scope : scope
# Line 89  Line 90 
90                  globals := CL.D_Var([], ty', x', NONE) :: !globals;                  globals := CL.D_Var([], ty', x', NONE) :: !globals;
91                  ToC.V(ty', x')                  ToC.V(ty', x')
92                end                end
93          fun param x = V.name x          fun param x = ToC.V(ToC.trType(V.ty x), V.name x)
94          fun state (Strand{state, ...}, x) = let          fun state (Strand{state, ...}, x) = let
95                val ty' = ToC.trType(V.ty x)                val ty' = ToC.trType(V.ty x)
96                val x' = ToC.V(ty', V.name x)                val x' = ToC.V(ty', V.name x)
# Line 234  Line 235 
235                            CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),                            CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),
236                            CL.PARAM([], CL.T_Ptr(CL.T_Named tyName), "self")                            CL.PARAM([], CL.T_Ptr(CL.T_Named tyName), "self")
237                          ]                          ]
238                      val SOME x = !output                      val SOME(ty, x) = !output
239                      val outState = CL.mkIndirect(CL.mkVar "self", x)                      val outState = CL.mkIndirect(CL.mkVar "self", x)
240                      val prArgs = (case ty                      val prArgs = (case ty
241                             of TargetTy.T_Int => [CL.E_Str(!RN.gIntFormat ^ "\n"), outState]                             of Ty.IVecTy 1 => [CL.E_Str(!RN.gIntFormat ^ "\n"), outState]
242                              | TargetTy.T_Real => [CL.E_Str "%f\n", outState]                              | Ty.IVecTy d => let
                             | TargetTy.T_Vec d => let  
243                                  val fmt = CL.E_Str(                                  val fmt = CL.E_Str(
244                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))                                        String.concatWith " " (List.tabulate(d, fn _ => !RN.gIntFormat))
245                                        ^ "\n")                                        ^ "\n")
246                                  val args = List.tabulate (d, fn i => Expr.vecIndex(outState, d, i))                                  val args = List.tabulate (d, fn i => ToC.ivecIndex(outState, d, i))
247                                  in                                  in
248                                    fmt :: args                                    fmt :: args
249                                  end                                  end
250                              | TargetTy.T_IVec d => let                              | Ty.TensorTy[] => [CL.E_Str "%f\n", outState]
251                                | Ty.TensorTy[d] => let
252                                  val fmt = CL.E_Str(                                  val fmt = CL.E_Str(
253                                        String.concatWith " " (List.tabulate(d, fn _ => !RN.gIntFormat))                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))
254                                        ^ "\n")                                        ^ "\n")
255                                  val args = List.tabulate (d, fn i => Expr.ivecIndex(outState, d, i))                                  val args = List.tabulate (d, fn i => ToC.vecIndex(outState, d, i))
256                                  in                                  in
257                                    fmt :: args                                    fmt :: args
258                                  end                                  end
259                              | _ => raise Fail("genStrand: unsupported output type " ^ TargetTy.toString ty)                              | _ => raise Fail("genStrand: unsupported output type " ^ Ty.toString ty)
260                            (* end case *))                            (* end case *))
261                      in                      in
262                        CL.D_Func(["static"], CL.voidTy, prFnName, params,                        CL.D_Func(["static"], CL.voidTy, prFnName, params,
# Line 384  Line 385 
385                val fName = RN.strandInit name                val fName = RN.strandInit name
386                val params =                val params =
387                      CL.PARAM([], CL.T_Ptr(CL.T_Named tyName), "selfOut") ::                      CL.PARAM([], CL.T_Ptr(CL.T_Named tyName), "selfOut") ::
388                        List.map (fn (V(ty, x)) => CL.PARAM([], cvtTy ty, x)) params                        List.map (fn (ToC.V(ty, x)) => CL.PARAM([], ty, x)) params
389                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)
390                in                in
391                  code := initFn :: !code                  code := initFn :: !code
# Line 402  Line 403 
403                  code := methFn :: !code                  code := methFn :: !code
404                end                end
405    
406          fun output (Strand{output, ...}, x) = output := SOME x          fun output (Strand{output, ...}, ty, ToC.V(_, x)) = output := SOME(ty, x)
407    
408        end        end
409    

Legend:
Removed from v.841  
changed lines
  Added in v.842

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