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

SCM Repository

[diderot] Annotation of /branches/vis12/src/compiler/c-util/c-names.sml
ViewVC logotype

Annotation of /branches/vis12/src/compiler/c-util/c-names.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1696 - (view) (download)

1 : jhr 1372 (* c-names.sml
2 :     *
3 :     * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *)
6 :    
7 :     structure CNames =
8 :     struct
9 :    
10 :     local
11 :     structure Ty = TreeIL.Ty
12 :     structure F = Format
13 :     in
14 :    
15 :     open RuntimeNames
16 :    
17 :     (* globals that specify the target characteristics. These should be initialized
18 :     * when the program object is created.
19 :     *)
20 :     val doublePrecision = ref false
21 : jhr 1691 val longInt = ref false
22 : jhr 1372 val gVectorWid = ref 4
23 :     val gIntTy = ref CLang.int32
24 :     val gRealTy = ref CLang.float
25 :     val gRealSuffix = ref "?"
26 :     val gIntSuffix = ref "?"
27 :     val gIntFormat = ref "?"
28 :    
29 :     (* initialize globals based on target precision *)
30 : jhr 1640 fun initTargetSpec {double, long} = (
31 : jhr 1372 doublePrecision := double;
32 : jhr 1691 longInt := long;
33 : jhr 1372 if double
34 :     then (
35 :     gVectorWid := 2;
36 :     gRealTy := CLang.double;
37 : jhr 1640 gRealSuffix := "d")
38 : jhr 1372 else (
39 :     gVectorWid := 4;
40 : jhr 1640 gRealTy := CLang.float;
41 :     gRealSuffix := "f");
42 :     if long
43 :     then (
44 :     gIntTy := CLang.int64;
45 :     gIntSuffix := "l";
46 :     gIntFormat := "%ld")
47 :     else (
48 : jhr 1372 gIntTy := CLang.int32;
49 : jhr 1640 gIntSuffix := "i";
50 : jhr 1372 gIntFormat := "%d"))
51 :    
52 : jhr 1640 fun addVecSuffix stem n = concat[stem, Int.toString n]
53 :     fun addIVecSuffix stem n = concat[stem, Int.toString n]
54 : jhr 1372
55 : jhr 1640 fun addTySuffix (stem, 1) = stem
56 : jhr 1372 | addTySuffix (stem, n) = addVecSuffix stem n
57 :    
58 :     fun vecTy n = concat["vec", Int.toString n, !gRealSuffix, "_t"]
59 :     fun ivecTy n = concat["vec", Int.toString n, !gIntSuffix, "_t"]
60 :     fun imageTy n = concat["Diderot_image", Int.toString n, "D_t"]
61 :     fun matTy (n, m) = concat["Diderot_Mat", Int.toString n, "x", Int.toString m, "_t"]
62 : jhr 1696 fun ten3Ty (n, m, l) = concat["Diderot_Ten", Int.toString n, "x", Int.toString m, "x", Int.toString l, "_t"]
63 : jhr 1372
64 : jhr 1690 val dynSeqTy = "Diderot_DynSeq_t"
65 :    
66 : jhr 1372 (* scalar math functions *)
67 : jhr 1640 fun max () = "max"
68 :     fun min () = "min"
69 :     fun fabs () = "fabs"
70 : jhr 1372
71 :     (* clamp and lerp *)
72 :     fun clamp n = addTySuffix("clamp", n)
73 :     fun lerp n = addTySuffix("lerp", n)
74 :    
75 :     (* vector math functions *)
76 :     val mkVec = addVecSuffix "vec"
77 :     val scale = addVecSuffix "scale"
78 :     val truncToInt = addVecSuffix "truncToInt"
79 :     val dot = addVecSuffix "dot"
80 :     fun cross () = addVecSuffix "cross" 3
81 :     val length = addVecSuffix "length"
82 :     val normalize = addVecSuffix "normalize"
83 : jhr 1640 fun vecitof n = concat["vec", Int.toString n, "itor"]
84 :     fun vecftoi n = concat["vec", Int.toString n, "rtoi"]
85 : jhr 1372
86 :     (* matrix operations *)
87 : jhr 1640 fun zeroMat (n, m) = concat["zero", Int.toString n, "x", Int.toString m]
88 :     fun identityMat n = concat["identity", Int.toString n, "x", Int.toString n]
89 :     fun trace n = concat["trace", Int.toString n, "x", Int.toString n]
90 :     fun norm (n, m) = concat["norm", Int.toString n, "x", Int.toString m]
91 :     fun copyMat (n, m) = concat["copy", Int.toString n, "x", Int.toString m]
92 :     fun scaleMat (n, m) = concat["scale", Int.toString n, "x", Int.toString m]
93 :     fun addMat (n, m) = concat["add", Int.toString n, "x", Int.toString m]
94 :     fun subMat (n, m) = concat["sub", Int.toString n, "x", Int.toString m]
95 :     fun mulVecMat (m, n) = F.format "mulVec%dMat%dx%d" [F.INT m, F.INT m, F.INT n]
96 :     fun mulMatVec (m, n) = F.format "mulMat%dx%dVec%d" [F.INT n, F.INT m, F.INT n]
97 :     fun mulMatMat (m, n, p) = F.format "mulMat%dx%dMat%dx%d" [F.INT m, F.INT n, F.INT n, F.INT p]
98 : jhr 1372
99 :     (* Status_t symbols *)
100 :     val kActive = "DIDEROT_ACTIVE"
101 :     val kDie = "DIDEROT_DIE"
102 :     val kStabilize = "DIDEROT_STABILIZE"
103 :    
104 :     val toImageSpace = addVecSuffix "ToImageSpace"
105 :     fun toWorldSpace ty = let
106 :     val suffix = (case ty
107 : jhr 1640 of Ty.TensorTy[d] => [Int.toString d]
108 :     | Ty.TensorTy[m,n] => [Int.toString n, "x", Int.toString n]
109 : jhr 1372 (* end case *))
110 :     in
111 :     concat("ToWorldSpace" :: suffix)
112 :     end
113 :     val inside = addVecSuffix "Inside"
114 :    
115 :     end (* local *)
116 :     end

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