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 1448, Tue Jul 12 13:25:08 2011 UTC revision 1449, Mon Jul 18 15:26:21 2011 UTC
# Line 315  Line 315 
315                        CL.D_Func(["static"], CL.voidTy, prFnName, params,                        CL.D_Func(["static"], CL.voidTy, prFnName, params,
316                          CL.mkCall("fprintf", CL.mkVar "outS" :: prArgs))                          CL.mkCall("fprintf", CL.mkVar "outS" :: prArgs))
317                      end                      end
318                (* the output function *)
319                  val SOME(outTy, _) = !output
320                  val outFnName = concat[name, "_out"]
321                  val outFn = let
322                        val params = [
323                              CL.PARAM([], CL.T_Ptr(CL.voidTy), "outS"),
324                              CL.PARAM([], CL.T_Ptr(CL.T_Named tyName), "self")
325                            ]
326                        val SOME(ty, x) = !output
327                        val outState = CL.mkCast(CL.T_Ptr(CL.voidTy), CL.mkUnOp(CL.%&, CL.mkIndirect(CL.mkVar "self", x)))
328                        in
329                          CL.D_Func(["static"], CL.voidTy, outFnName, params,
330                            CL.mkCall("memcpy", [CL.mkVar "outS", outState, CL.mkSizeof(ToC.trType outTy)] ))
331                        end
332              (* the strand's descriptor object *)              (* the strand's descriptor object *)
333                val descI = let                val descI = let
334                      fun fnPtr (ty, f) = CL.I_Exp(CL.mkCast(CL.T_Named ty, CL.mkVar f))                      fun fnPtr (ty, f) = CL.I_Exp(CL.mkCast(CL.T_Named ty, CL.mkVar f))
335                      val SOME(outTy, _) = !output                      (* nrrdType enum defined in nrrdEnums.h *)
336                        val nrrdTypeUnknown = 0
337                        val nrrdTypeInt = 5
338                        val nrrdTypeLLong = 7
339                        val nrrdTypeFloat = 9
340                        val nrrdTypeDouble = 10
341                        fun trNrrdType (ty) = (case ty
342                            of Ty.BoolTy => nrrdTypeUnknown
343                             | Ty.StringTy => nrrdTypeUnknown
344                             | Ty.IVecTy 1 => (if !N.doublePrecision then nrrdTypeLLong else nrrdTypeInt)
345                             | Ty.IVecTy n => (if !N.doublePrecision then nrrdTypeLLong else nrrdTypeInt)
346                             | Ty.TensorTy[] => (if !N.doublePrecision then nrrdTypeDouble else nrrdTypeFloat)
347                             | Ty.TensorTy[n] => (if !N.doublePrecision then nrrdTypeDouble else nrrdTypeFloat)
348                             | Ty.TensorTy[n, m] => (if !N.doublePrecision then nrrdTypeDouble else nrrdTypeFloat)
349                             | Ty.AddrTy(ImageInfo.ImgInfo{ty=(_, rTy), ...}) => nrrdTypeUnknown
350                             | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) => nrrdTypeUnknown
351                             | _ => raise Fail(concat["trNrrdType(", Ty.toString ty, ")"])
352                           (* end case *))
353                      in                      in
354                        CL.I_Struct[                        CL.I_Struct[
355                            ("name", CL.I_Exp(CL.mkStr name)),                            ("name", CL.I_Exp(CL.mkStr name)),
356                            ("stateSzb", CL.I_Exp(CL.mkSizeof(CL.T_Named(N.strandTy name)))),                            ("stateSzb", CL.I_Exp(CL.mkSizeof(CL.T_Named(N.strandTy name)))),
357  (*                            ("outputSzb", CL.I_Exp(CL.mkSizeof(ToC.trType outTy))),
358                            ("outputSzb", CL.I_Exp(CL.mkSizeof(ToC.trTy outTy))),                            ("nrrdType", CL.I_Exp(CL.mkInt (trNrrdType outTy))),
 *)  
359                            ("update", fnPtr("update_method_t", name ^ "_update")),                            ("update", fnPtr("update_method_t", name ^ "_update")),
360                            ("stabilize", fnPtr("stabilize_method_t", name ^ "_stabilize")),                            ("stabilize", fnPtr("stabilize_method_t", name ^ "_stabilize")),
361                            ("print", fnPtr("print_method_t", prFnName))                            ("print", fnPtr("print_method_t", prFnName)),
362                              ("out", fnPtr("out_method_t", outFnName))
363                          ]                          ]
364                      end                      end
365                val desc = CL.D_Var([], CL.T_Named N.strandDescTy, N.strandDesc name, SOME descI)                val desc = CL.D_Var([], CL.T_Named N.strandDescTy, N.strandDesc name, SOME descI)
366                in                in
367                  selfTyDef :: List.rev (desc :: prFn :: !code)                  selfTyDef :: List.rev (desc :: prFn :: outFn :: !code)
368                end                end
369    
370        (* generate the table of strand descriptors *)        (* generate the table of strand descriptors *)

Legend:
Removed from v.1448  
changed lines
  Added in v.1449

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