SCM Repository
View of /branches/pure-cfg/src/compiler/c-target/runtime-names.sml
Parent Directory
|
Revision Log
Revision 618 -
(download)
(annotate)
Mon Mar 14 13:21:58 2011 UTC (9 years, 10 months ago) by jhr
File size: 3111 byte(s)
Mon Mar 14 13:21:58 2011 UTC (9 years, 10 months ago) by jhr
File size: 3111 byte(s)
More work on supporting initially in code generation
(* runtime-names.sml * * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu) * All rights reserved. *) structure RuntimeNames = struct (* globals that specify the target characteristics. These should be initialized * when the program object is created. *) val gVectorWid = ref 4 val gIntTy = ref CLang.int32 val gRealTy = ref CLang.float val gRealSuffix = ref "?" val gIntSuffix = ref "?" (* initialize globals based on target precision *) fun initTargetSpec () = if !Controls.doublePrecision then ( gVectorWid := 2; gIntTy := CLang.int64; gRealTy := CLang.double; gRealSuffix := "d"; gIntSuffix := "l") else ( gVectorWid := 4; gIntTy := CLang.int32; gRealTy := CLang.float; gRealSuffix := "f"; gIntSuffix := "i") fun addVecSuffix stem n = concat[stem, Int.toString n, !gRealSuffix] fun addIVecSuffix stem n = concat[stem, Int.toString n, !gIntSuffix] fun addTySuffix (stem, TargetTy.T_Real) = stem ^ !gRealSuffix | addTySuffix (stem, TargetTy.T_Vec n) = addVecSuffix stem n | addTySuffix (stem, ty) = raise Fail(concat["invalid type ", TargetTy.toString ty, " for ", stem]) fun vecTy n = concat["vec", Int.toString n, !gRealSuffix, "_t"] fun ivecTy n = concat["vec", Int.toString n, !gIntSuffix, "_t"] fun imageTy n = concat["Diderot_image", Int.toString n, "D_t"] (* names of generated functions *) val initGlobals = "Diderot_InitGlobals" (* function for initializing program globals *) val initially = "Diderot_Initially" (* function for creating initial strands *) fun strandInit strand = strand ^ "_InitState" fun strandTy strand = concat["Strand_", strand, "_t"] (* scalar math functions *) fun max ty = addTySuffix ("max", ty) fun min ty = addTySuffix ("min", ty) (* vector math functions *) val mkVec = addVecSuffix "vec" val scale = addVecSuffix "scale" val truncToInt = addVecSuffix "truncToInt" val dot = addVecSuffix "dot" fun cross () = addVecSuffix "cross" 3 val length = addVecSuffix "length" val normalize = addVecSuffix "normalize" fun vecitof n = concat["vec", Int.toString n, "ito", !gRealSuffix] fun vecftoi n = concat["vec", Int.toString n, !gRealSuffix, "toi"] (* Status_t symbols *) val kActive = "DIDEROT_ACTIVE" val kDie = "DIDEROT_DIE" val kStabilize = "DIDEROT_STABILIZE" (* Diderot runtime system hooks *) val statusTy = "Status_t" val toImageSpace = addVecSuffix "Diderot_ToImageSpace" val inside = addVecSuffix "Diderot_Inside" fun loadImage dim = concat["Diderot_LoadImage", Int.toString dim, "D"] val numStrands = "Diderot_NumStrands" val strands = "Diderot_Strands" val strandDescTy = "Strand_t" fun input ty = (case ty of TargetTy.T_String => "Diderot_InputString" | TargetTy.T_Real => "Diderot_Input" ^ !gRealSuffix | TargetTy.T_Vec 3 => "Diderot_InputVec3" ^ !gRealSuffix | ty => raise Fail("unsupported input type " ^ TargetTy.toString ty) (* end case *)) end
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |