StringRef'ize EmitSourceFileHeader().
[oota-llvm.git] / include / llvm / IntrinsicsCellSPU.td
1 //==- IntrinsicsCellSPU.td - Cell SDK intrinsics           -*- tablegen -*-==//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // Department at The Aerospace Corporation and is distributed under the
7 // License. See LICENSE.TXT for details.
8 // 
9 //===----------------------------------------------------------------------===//
10 // Cell SPU Instructions:
11 //===----------------------------------------------------------------------===//
12 // TODO Items (not urgent today, but would be nice, low priority)
13 //
14 // ANDBI, ORBI: SPU constructs a 4-byte constant for these instructions by
15 // concatenating the byte argument b as "bbbb". Could recognize this bit pattern
16 // in 16-bit and 32-bit constants and reduce instruction count.
17 //===----------------------------------------------------------------------===//
18
19 // 7-bit integer type, used as an immediate:
20 def cell_i7_ty: LLVMType<i8>;
21 def cell_i8_ty: LLVMType<i8>;
22
23 // Keep this here until it's actually supported:
24 def llvm_i128_ty : LLVMType<i128>;
25
26 class v16i8_u7imm<string builtin_suffix> :
27   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
28   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, cell_i7_ty],
29             [IntrNoMem]>;
30
31 class v16i8_u8imm<string builtin_suffix> :
32   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
33   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
34             [IntrNoMem]>;
35
36 class v16i8_s10imm<string builtin_suffix> :
37   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
38   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i16_ty],
39             [IntrNoMem]>;
40
41 class v16i8_u16imm<string builtin_suffix> :
42   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
43   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i16_ty],
44             [IntrNoMem]>;
45
46 class v16i8_rr<string builtin_suffix> :
47   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
48   Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
49             [IntrNoMem]>;
50
51 class v8i16_s10imm<string builtin_suffix> :
52   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
53   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i16_ty],
54             [IntrNoMem]>;
55
56 class v8i16_u16imm<string builtin_suffix> :
57   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
58   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i16_ty],
59             [IntrNoMem]>;
60
61 class v8i16_rr<string builtin_suffix> :
62   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
63   Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
64             [IntrNoMem]>;
65
66 class v4i32_rr<string builtin_suffix> :
67   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
68   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
69             [IntrNoMem]>;
70
71 class v4i32_u7imm<string builtin_suffix> :
72   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
73   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, cell_i7_ty],
74             [IntrNoMem]>;
75
76 class v4i32_s10imm<string builtin_suffix> :
77   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
78   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i16_ty],
79             [IntrNoMem]>;
80
81 class v4i32_u16imm<string builtin_suffix> :
82   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
83   Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i16_ty],
84             [IntrNoMem]>;
85
86 class v4f32_rr<string builtin_suffix> :
87   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
88   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
89             [IntrNoMem]>;
90
91 class v4f32_rrr<string builtin_suffix> :
92   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
93   Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
94             [IntrNoMem]>;
95
96 class v2f64_rr<string builtin_suffix> :
97   GCCBuiltin<!strconcat("__builtin_si_", builtin_suffix)>,
98   Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty],
99             [IntrNoMem]>;
100
101 // All Cell SPU intrinsics start with "llvm.spu.".
102 let TargetPrefix = "spu" in {
103   def int_spu_si_fsmbi  : v8i16_u16imm<"fsmbi">;
104   def int_spu_si_ah     : v8i16_rr<"ah">;
105   def int_spu_si_ahi    : v8i16_s10imm<"ahi">;
106   def int_spu_si_a      : v4i32_rr<"a">;
107   def int_spu_si_ai     : v4i32_s10imm<"ai">;
108   def int_spu_si_sfh    : v8i16_rr<"sfh">;
109   def int_spu_si_sfhi   : v8i16_s10imm<"sfhi">;
110   def int_spu_si_sf     : v4i32_rr<"sf">;
111   def int_spu_si_sfi    : v4i32_s10imm<"sfi">;
112   def int_spu_si_addx   : v4i32_rr<"addx">;
113   def int_spu_si_cg     : v4i32_rr<"cg">;
114   def int_spu_si_cgx    : v4i32_rr<"cgx">;
115   def int_spu_si_sfx    : v4i32_rr<"sfx">;
116   def int_spu_si_bg     : v4i32_rr<"bg">;
117   def int_spu_si_bgx    : v4i32_rr<"bgx">;
118   def int_spu_si_mpy    : // This is special:
119     GCCBuiltin<"__builtin_si_mpy">,
120     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
121               [IntrNoMem]>;
122   def int_spu_si_mpyu   : // This is special:
123     GCCBuiltin<"__builtin_si_mpyu">,
124     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
125               [IntrNoMem]>;
126   def int_spu_si_mpyi   : // This is special:
127     GCCBuiltin<"__builtin_si_mpyi">,
128     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_i16_ty],
129               [IntrNoMem]>;
130   def int_spu_si_mpyui  : // This is special:
131     GCCBuiltin<"__builtin_si_mpyui">,
132     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_i16_ty],
133               [IntrNoMem]>;
134   def int_spu_si_mpya   : // This is special:
135     GCCBuiltin<"__builtin_si_mpya">,
136     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
137               [IntrNoMem]>;
138   def int_spu_si_mpyh   : // This is special:
139     GCCBuiltin<"__builtin_si_mpyh">,
140     Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v8i16_ty],
141               [IntrNoMem]>;
142   def int_spu_si_mpys   : // This is special:
143     GCCBuiltin<"__builtin_si_mpys">,
144     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
145               [IntrNoMem]>;
146   def int_spu_si_mpyhh  : // This is special:
147     GCCBuiltin<"__builtin_si_mpyhh">,
148     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
149               [IntrNoMem]>;
150   def int_spu_si_mpyhha : // This is special:
151     GCCBuiltin<"__builtin_si_mpyhha">,
152     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
153               [IntrNoMem]>;
154   def int_spu_si_mpyhhu : // This is special:
155     GCCBuiltin<"__builtin_si_mpyhhu">,
156     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
157               [IntrNoMem]>;
158   def int_spu_si_mpyhhau : // This is special:
159     GCCBuiltin<"__builtin_si_mpyhhau">,
160     Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
161               [IntrNoMem]>;
162
163   def int_spu_si_shli:          v4i32_u7imm<"shli">;
164
165   def int_spu_si_shlqbi:
166     GCCBuiltin<!strconcat("__builtin_si_", "shlqbi")>,
167     Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty],
168               [IntrNoMem]>;
169
170   def int_spu_si_shlqbii:       v16i8_u7imm<"shlqbii">;
171   def int_spu_si_shlqby:
172     GCCBuiltin<!strconcat("__builtin_si_", "shlqby")>,
173     Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i32_ty],
174               [IntrNoMem]>;
175   def int_spu_si_shlqbyi:       v16i8_u7imm<"shlqbyi">;
176   
177   def int_spu_si_ceq:           v4i32_rr<"ceq">;
178   def int_spu_si_ceqi:          v4i32_s10imm<"ceqi">;
179   def int_spu_si_ceqb:          v16i8_rr<"ceqb">;
180   def int_spu_si_ceqbi:         v16i8_u8imm<"ceqbi">;
181   def int_spu_si_ceqh:          v8i16_rr<"ceqh">;
182   def int_spu_si_ceqhi:         v8i16_s10imm<"ceqhi">;
183   def int_spu_si_cgt:           v4i32_rr<"cgt">;
184   def int_spu_si_cgti:          v4i32_s10imm<"cgti">;
185   def int_spu_si_cgtb:          v16i8_rr<"cgtb">;
186   def int_spu_si_cgtbi:         v16i8_u8imm<"cgtbi">;
187   def int_spu_si_cgth:          v8i16_rr<"cgth">;
188   def int_spu_si_cgthi:         v8i16_s10imm<"cgthi">;
189   def int_spu_si_clgtb:         v16i8_rr<"clgtb">;
190   def int_spu_si_clgtbi:        v16i8_u8imm<"clgtbi">;
191   def int_spu_si_clgth:         v8i16_rr<"clgth">;
192   def int_spu_si_clgthi:        v8i16_s10imm<"clgthi">;
193   def int_spu_si_clgt:          v4i32_rr<"clgt">;
194   def int_spu_si_clgti:         v4i32_s10imm<"clgti">;
195   
196   def int_spu_si_and:           v4i32_rr<"and">;
197   def int_spu_si_andbi:         v16i8_u8imm<"andbi">;
198   def int_spu_si_andc:          v4i32_rr<"andc">;
199   def int_spu_si_andhi:         v8i16_s10imm<"andhi">;
200   def int_spu_si_andi:          v4i32_s10imm<"andi">;
201   
202   def int_spu_si_or:            v4i32_rr<"or">;
203   def int_spu_si_orbi:          v16i8_u8imm<"orbi">;
204   def int_spu_si_orc:           v4i32_rr<"orc">;
205   def int_spu_si_orhi:          v8i16_s10imm<"orhi">;
206   def int_spu_si_ori:           v4i32_s10imm<"ori">;
207   
208   def int_spu_si_xor:           v4i32_rr<"xor">;
209   def int_spu_si_xorbi:         v16i8_u8imm<"xorbi">;
210   def int_spu_si_xorhi:         v8i16_s10imm<"xorhi">;
211   def int_spu_si_xori:          v4i32_s10imm<"xori">;
212
213   def int_spu_si_nor:           v4i32_rr<"nor">;
214   def int_spu_si_nand:          v4i32_rr<"nand">;
215   
216   def int_spu_si_fa:            v4f32_rr<"fa">;
217   def int_spu_si_fs:            v4f32_rr<"fs">;
218   def int_spu_si_fm:            v4f32_rr<"fm">;
219   
220   def int_spu_si_fceq:          v4f32_rr<"fceq">;
221   def int_spu_si_fcmeq:         v4f32_rr<"fcmeq">;
222   def int_spu_si_fcgt:          v4f32_rr<"fcgt">;
223   def int_spu_si_fcmgt:         v4f32_rr<"fcmgt">;
224   
225   def int_spu_si_fma:           v4f32_rrr<"fma">;
226   def int_spu_si_fnms:          v4f32_rrr<"fnms">;
227   def int_spu_si_fms:           v4f32_rrr<"fms">;
228
229   def int_spu_si_dfa:           v2f64_rr<"dfa">;
230   def int_spu_si_dfs:           v2f64_rr<"dfs">;
231   def int_spu_si_dfm:           v2f64_rr<"dfm">;
232   
233 //def int_spu_si_dfceq:         v2f64_rr<"dfceq">;
234 //def int_spu_si_dfcmeq:        v2f64_rr<"dfcmeq">;
235 //def int_spu_si_dfcgt:         v2f64_rr<"dfcgt">;
236 //def int_spu_si_dfcmgt:        v2f64_rr<"dfcmgt">;
237   
238   def int_spu_si_dfnma:         v2f64_rr<"dfnma">;
239   def int_spu_si_dfma:          v2f64_rr<"dfma">;
240   def int_spu_si_dfnms:         v2f64_rr<"dfnms">;
241   def int_spu_si_dfms:          v2f64_rr<"dfms">;
242 }