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

SCM Repository

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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2749 - (view) (download)

1 : cchiw 2668
2 : jhr 1372 (* c-names.sml
3 : cchiw 2668 *WQE
4 : jhr 1372 * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
5 :     * All rights reserved.
6 :     *)
7 :    
8 :     structure CNames =
9 :     struct
10 :    
11 :     local
12 :     structure Ty = TreeIL.Ty
13 :     structure F = Format
14 :     in
15 :    
16 :     open RuntimeNames
17 :    
18 :     (* globals that specify the target characteristics. These should be initialized
19 :     * when the program object is created.
20 :     *)
21 :     val doublePrecision = ref false
22 : jhr 1923 val longInt = ref false
23 : jhr 1372 val gVectorWid = ref 4
24 :     val gIntTy = ref CLang.int32
25 :     val gRealTy = ref CLang.float
26 :     val gRealSuffix = ref "?"
27 :     val gIntSuffix = ref "?"
28 :     val gIntFormat = ref "?"
29 :    
30 :     (* initialize globals based on target precision *)
31 : jhr 1640 fun initTargetSpec {double, long} = (
32 : jhr 1372 doublePrecision := double;
33 : jhr 1923 longInt := long;
34 : jhr 1372 if double
35 :     then (
36 :     gVectorWid := 2;
37 :     gRealTy := CLang.double;
38 : jhr 1640 gRealSuffix := "d")
39 : jhr 1372 else (
40 :     gVectorWid := 4;
41 : jhr 1640 gRealTy := CLang.float;
42 :     gRealSuffix := "f");
43 :     if long
44 :     then (
45 :     gIntTy := CLang.int64;
46 :     gIntSuffix := "l";
47 :     gIntFormat := "%ld")
48 :     else (
49 : jhr 1372 gIntTy := CLang.int32;
50 : jhr 1640 gIntSuffix := "i";
51 : jhr 1372 gIntFormat := "%d"))
52 :    
53 : jhr 1640 fun addVecSuffix stem n = concat[stem, Int.toString n]
54 :     fun addIVecSuffix stem n = concat[stem, Int.toString n]
55 : jhr 1372
56 : jhr 1640 fun addTySuffix (stem, 1) = stem
57 : jhr 1372 | addTySuffix (stem, n) = addVecSuffix stem n
58 :    
59 : cchiw 2646 fun coords [i]=Int.toString i
60 :     | coords (e1::es)= concat[Int.toString e1, "x", coords es]
61 :    
62 : cchiw 2668
63 : jhr 1372 fun ivecTy n = concat["vec", Int.toString n, !gIntSuffix, "_t"]
64 : cchiw 2664
65 : jhr 2356 fun unionTy n = concat["union", Int.toString n, !gRealSuffix, "_t"]
66 :     fun iunionTy n = concat["union", Int.toString n, !gIntSuffix, "_t"]
67 : jhr 1372 fun imageTy n = concat["Diderot_image", Int.toString n, "D_t"]
68 :     fun matTy (n, m) = concat["Diderot_Mat", Int.toString n, "x", Int.toString m, "_t"]
69 : jhr 2356 fun ten3Ty (n, m, l) = concat["Diderot_Ten", Int.toString n, "x", Int.toString m, "x", Int.toString l, "_t"]
70 : cchiw 2646 fun tenTy e = concat["Diderot_Ten", coords e , "_t"]
71 : jhr 1372
72 : jhr 2356 val dynSeqTy = "Diderot_DynSeq_t"
73 :    
74 : jhr 1372 (* scalar math functions *)
75 : jhr 1640 fun max () = "max"
76 :     fun min () = "min"
77 :     fun fabs () = "fabs"
78 : jhr 1372
79 :     (* clamp and lerp *)
80 :     fun clamp n = addTySuffix("clamp", n)
81 :     fun lerp n = addTySuffix("lerp", n)
82 :    
83 :     (* vector math functions *)
84 : cchiw 2646 val mkReal= "Diderot_real_t"
85 : jhr 1372 val mkVec = addVecSuffix "vec"
86 : jhr 2356 val mkIVec = addVecSuffix "ivec"
87 : jhr 1372 val scale = addVecSuffix "scale"
88 :     val truncToInt = addVecSuffix "truncToInt"
89 :     val dot = addVecSuffix "dot"
90 : cchiw 2623 val prod = addVecSuffix "prod"
91 : jhr 1640 fun vecitof n = concat["vec", Int.toString n, "itor"]
92 :     fun vecftoi n = concat["vec", Int.toString n, "rtoi"]
93 : cchiw 2665 val mkRealArr= "Diderot_real_t"
94 : cchiw 2646
95 : jhr 1372 (* matrix operations *)
96 : cchiw 2628 fun zeroVec n = concat["zero", Int.toString n]
97 : jhr 1640 fun zeroMat (n, m) = concat["zero", Int.toString n, "x", Int.toString m]
98 :     fun copyMat (n, m) = concat["copy", Int.toString n, "x", Int.toString m]
99 : cchiw 2667
100 : jhr 1372
101 : cchiw 2667
102 : jhr 2356 (* 3rd-order tensor operations *)
103 :     fun copyTen3 (n, m, l) = F.format "copyTen%dx%dx%d" [F.INT n, F.INT m, F.INT l]
104 : cchiw 2668 (*Vector operators *)
105 :     fun q e=Int.toString e
106 : jhr 2356
107 :    
108 : cchiw 2668 (*Name for Tensors elsewhere*)
109 :     (*For program use*)
110 :     val tprog = mkReal
111 : cchiw 2628
112 :    
113 : cchiw 2664
114 : cchiw 2668 (*Name for tensors in load and store*)
115 : cchiw 2695 fun LocalTy [n] = concat["Diderot_vec", Int.toString n, "_t"]
116 :     | LocalTy [n,m] = concat["Diderot_Mat", Int.toString n,"x",Int.toString m, "_t"]
117 : cchiw 2668
118 :    
119 : cchiw 2664 (*-------------- Function Names:String ---------------*)
120 : cchiw 2669 fun NameConsArray [i]="consArr"^q i
121 :     | NameConsArray [i,j]=String.concat["consArr",q i,"x",q j]
122 : cchiw 2691 fun NameConsVec i="consVec"^q i
123 :    
124 : cchiw 2668
125 : cchiw 2681 fun isAligned true = "Aligned"
126 :     | isAligned _ = ""
127 : cchiw 2680
128 : cchiw 2681 fun isArr true ="Arr"
129 :     | isArr _ ="Vec"
130 : cchiw 2680
131 : cchiw 2690 fun NameMkVec(A,nSize,oSize)=
132 : cchiw 2688 if (nSize>oSize)
133 : cchiw 2690 then String.concat["store",isAligned A,q nSize,"to",q oSize]
134 :     else String.concat["store",isAligned A,q nSize]
135 : cchiw 2688
136 :    
137 : cchiw 2691 fun NameLdArr(A,nSize,oSize)=
138 : cchiw 2690 if (nSize>oSize)
139 :     then String.concat["load",isAligned A,q oSize,"to",q nSize]
140 :     else String.concat["load",isAligned A,q nSize]
141 :    
142 : cchiw 2691 fun NameLdVec(_,nSize,oSize)= String.concat["TrimVec",q oSize,"to",q nSize]
143 :     (*Right now does not differenate for aligned *)
144 :    
145 : cchiw 2686 val NameMux = String.concat["Mux"]
146 : cchiw 2664 fun NameSumV d= String.concat["sumVec" ,q d]
147 : cchiw 2680 fun NameFloorV d= String.concat["floorVec" ,q d]
148 : cchiw 2666 fun NameScaV d="E"^scale d
149 : cchiw 2680 fun NameDotV d= String.concat["dotVec" ,q d]
150 : cchiw 2668 fun unionTy d= String.concat["Diderot_union",q d,"_t"]
151 : cchiw 2749 fun NameProj(i,j) = String.concat["Proj", q i, "x", q j]
152 : cchiw 2665
153 : jhr 1372 (* Status_t symbols *)
154 :     val kActive = "DIDEROT_ACTIVE"
155 :     val kDie = "DIDEROT_DIE"
156 :     val kStabilize = "DIDEROT_STABILIZE"
157 :    
158 :     val inside = addVecSuffix "Inside"
159 :    
160 :     end (* local *)
161 :     end

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