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

SCM Repository

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

Diff of /branches/charisee/src/compiler/c-target/c-target.sml

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

revision 2667, Thu Jun 5 18:54:12 2014 UTC revision 2668, Thu Jun 12 03:29:04 2014 UTC
# Line 1  Line 1 
1    
2  (* c-target.sml  (* c-target.sml
3   *   * WQE
4   * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)   * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
5   * All rights reserved.   * All rights reserved.
6   *)   *)
# Line 152  Line 153 
153          end          end
154    
155    
156            val cat=CL.T_Named ("kitten")
157    
158    (* we support printing in the sequential C target *)    (* we support printing in the sequential C target *)
159      val supportsPrinting = true      val supportsPrinting = true
# Line 181  Line 182 
182        struct        struct
183          fun name (CL.V(_, name)) = name          fun name (CL.V(_, name)) = name
184          fun global (Prog{globals, ...}, name, ty) = let          fun global (Prog{globals, ...}, name, ty) = let
185                val ty' = ToC.trType ty                val ty' =  ToC.trType ty (*Here- global var type*)
186                in                in
187                  globals := CL.D_Var([], ty', name, NONE) :: !globals;                  globals := CL.D_Var([], ty', name, NONE) :: !globals;
188                  CL.V(ty', name)                  CL.V(ty', name)
189                end                end
190          fun param (_, x) = CL.V(ToC.trType(V.ty x), V.name x)          fun param (_, x) = CL.V(ToC.trType(V.ty x), V.name x) (*Here*)
191    
192    
193        end        end
194    
195    (* environments *)    (* environments *)
# Line 347  Line 350 
350                val (outTy, outState) = (#1 output, CL.mkIndirect(CL.mkVar "self", #2 output))                val (outTy, outState) = (#1 output, CL.mkIndirect(CL.mkVar "self", #2 output))
351              (* the print function *)              (* the print function *)
352                val prFnName = concat[name, "_Print"]                val prFnName = concat[name, "_Print"]
353    
354                  val mouse=CL.E_Str "cow324"
355                val prFn = let                val prFn = let
356                      val params = [                      val params = [
357                            CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),                            CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),
# Line 354  Line 359 
359                          ]                          ]
360                      val prArgs = (case outTy                      val prArgs = (case outTy
361                             of Ty.IntTy => [CL.E_Str(!N.gIntFormat ^ "\n"), outState]                             of Ty.IntTy => [CL.E_Str(!N.gIntFormat ^ "\n"), outState]
362    
363    
364                               (* | Ty.TensorTy _ => [CL.E_Str "printer test"]*)
365    
366                              | Ty.TensorTy[] => [CL.E_Str "%f\n", outState]                              | Ty.TensorTy[] => [CL.E_Str "%f\n", outState]
367                              | Ty.TensorTy[d] => let                              | Ty.TensorTy[d] => let
368                                  val fmt = CL.E_Str(                                  val fmt = CL.E_Str(
369                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))
370                                        ^ "\n")                                        ^ "\n")
371                                  val args = List.tabulate (d, fn i => ToC.vecIndex(outState, d, i))                                  val args = List.tabulate (d, fn i => ToC.prntArr(outState, d, i))
372                                  in                                  in
373                                    fmt :: args                                    fmt :: args
374                                  end                                  end
# Line 386  Line 395 
395                          ]                          ]
396                    (* get address of output variable *)                    (* get address of output variable *)
397                      val outState = CL.mkUnOp(CL.%&, outState)                      val outState = CL.mkUnOp(CL.%&, outState)
398                      in                      in(*Here- "outfn"*)
399                        CL.D_Func(["static"], CL.voidTy, outFnName, params,                        CL.D_Func(["static"], CL.voidTy, outFnName, params,
400                          CL.mkCall("memcpy", [CL.mkVar "outS", outState, CL.mkSizeof(ToC.trType outTy)] ))                          CL.mkCall("memcpy", [CL.mkVar "outS", outState, CL.mkSizeof(
401                               ToC.trType outTy) ] ))
402                      end                      end
403              (* the strand's descriptor object *)              (* the strand's descriptor object *)
404                val descI = let                val descI = let
# Line 440  Line 450 
450                in                in
451                    (* List.app ppDecl (List.rev (!opr)); (*Just added *)*)                    (* List.app ppDecl (List.rev (!opr)); (*Just added *)*)
452                  List.app ppDecl (List.rev (!globals));                  List.app ppDecl (List.rev (!globals));
                 List.app ppDecl (List.rev (!topDecls));  
453                   List.app ppDecl (List.rev (!opr));                   List.app ppDecl (List.rev (!opr));
454                    List.app ppDecl (List.rev (!topDecls));
455                    (* List.app ppDecl (List.rev (!opr));*)
456                  List.app (fn strand => List.app ppDecl (genStrand strand)) strands;                  List.app (fn strand => List.app ppDecl (genStrand strand)) strands;
457                  genStrandTable (ppStrm, strands);                  genStrandTable (ppStrm, strands);
458                  ppDecl (!initially);                  ppDecl (!initially);
# Line 491  Line 502 
502                        | _ => raise Fail("multiple outputs in " ^ name)                        | _ => raise Fail("multiple outputs in " ^ name)
503                      (* end case *))                      (* end case *))
504              (* the state variables *)              (* the state variables *)
505                (* HERE:: CL.T_Named"strandnamed"*)
506                val state = let                val state = let
507                      fun cvt x = CL.V(ToC.trType(IL.StateVar.ty x), IL.StateVar.name x)                      fun cvt x = CL.V(ToC.trType(IL.StateVar.ty x), IL.StateVar.name x)
508                      in                      in

Legend:
Removed from v.2667  
changed lines
  Added in v.2668

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