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

SCM Repository

[diderot] Annotation of /branches/pure-cfg/src/compiler/c-target/c-target.sml
ViewVC logotype

Annotation of /branches/pure-cfg/src/compiler/c-target/c-target.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 522 - (view) (download)

1 : jhr 519 (* c-target.sml
2 :     *
3 :     * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *
6 :     * Generate C code with SSE 4.2 intrinsics.
7 :     *)
8 :    
9 :     structure CTarget : TARGET =
10 :     struct
11 :    
12 : jhr 522 structure CL = CLang
13 :    
14 : jhr 519 type program
15 :     type strand
16 :     type var
17 :     type exp
18 :     type stm
19 :     type method
20 :     type ty
21 :    
22 :     (* for SSE, we have 128-bit vectors *)
23 :     fun vectorWidth () = if !Controls.singlePrecision
24 :     then 4
25 :     else 2
26 :    
27 :     (* target types *)
28 :     val boolTy : ty
29 :     val intTy : ty
30 :     val realTy : ty
31 :     val vecTy : int -> ty
32 :     val ivecTy : int -> ty
33 :    
34 :     val defineStrand : program * string -> strand
35 :    
36 :     structure Var : sig
37 :     val global : program * ty * string -> var
38 :     val state : strand * ty * string -> var
39 :     val tmp : ty -> var
40 :     end
41 :    
42 :     (* expression construction *)
43 :     structure Expr : sig
44 :     (* variable references *)
45 :     val global : var -> exp
46 :     val getState : var -> exp
47 :     val param : var -> exp
48 :     val var : var -> exp
49 :     (* literals *)
50 :     val intLit : IntegerLit.integer -> exp
51 :     val floatLit : FloatLit.float -> exp
52 :     val stringLit : string -> exp
53 :     val boolLit : bool -> exp
54 :     (* vector construction *)
55 :     val vector : exp list -> exp
56 :     (* select from a vector *)
57 :     val select : int * exp -> exp
58 :     (* vector (and scalar) arithmetic *)
59 :     val add : exp * exp -> exp
60 :     val mul : exp * exp -> exp
61 :     val sub : exp * exp -> exp
62 :     val divide : exp * exp -> exp
63 :     val neg : exp -> exp
64 :     val abs : exp -> exp
65 :     val dot : exp * exp -> exp (* dot product *)
66 :     val cross : exp * exp -> exp (* cross product *)
67 :     val length : exp -> exp (* vector length *)
68 :     val normalize : exp -> exp (* normalize vector *)
69 :     (* comparisons *)
70 :     val lt : exp * exp -> exp
71 :     val lte : exp * exp -> exp
72 :     val equ : exp * exp -> exp
73 :     val neq : exp * exp -> exp
74 :     val gte : exp * exp -> exp
75 :     val gt : exp * exp -> exp
76 :     (* logical connectives *)
77 :     val not : exp -> exp
78 :     val && : exp * exp -> exp
79 :     val || : exp * exp -> exp
80 :     (* misc functions *)
81 :     val min : exp * exp -> exp
82 :     val max : exp * exp -> exp
83 :     (* math functions *)
84 :     val pow : exp * exp -> exp
85 :     val sin : exp -> exp
86 :     val cos : exp -> exp
87 :     val sqrt : exp -> exp
88 :     (* rounding *)
89 :     val round : exp -> exp (* round real to integral real *)
90 :     val floor : exp -> exp (* round real to integral real *)
91 :     val ceil : exp -> exp (* round real to integral real *)
92 :     (* conversions *)
93 :     val toReal : exp -> exp (* integer to real *)
94 :     val roundToInt : exp -> exp (* round real to int *)
95 :     val truncToInt : exp -> exp (* truncate real to inte *)
96 :     val ceilToInt : exp -> exp (* ceiling of real to int *)
97 :     val floorToInt : exp -> exp (* floor of real to int *)
98 :     (* runtime system hooks *)
99 :     val imageAddr : exp -> exp (* based address of image data *)
100 :     end
101 :    
102 :     (* statement construction *)
103 :     structure Stmt : sig
104 :     val comment : string list -> stm
105 :     val assignState : var * exp -> stm
106 :     val assign : var * exp -> stm
107 :     val assignb : var * exp -> stm
108 :     val block : stm list -> stm
109 :     val ifthenelse : exp * stm * stm -> stm
110 :     val die : unit -> stm
111 :     val stabilize : unit -> stm
112 :     end
113 :    
114 :     end
115 :    
116 :     structure CBackEnd = CodeGenFn(CTarget)

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