2012-08-15 Segher Boessenkool <segher@kernel.crashing.org>
[official-gcc.git] / gcc / config / rs6000 / rs6000-builtin.def
blobc8f8f86f4178de4608a8b8aa44c41fc99f0729ca
1 /* Builtin functions for rs6000/powerpc.
2 Copyright (C) 2009-2012 Free Software Foundation, Inc.
3 Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published
9 by the Free Software Foundation; either version 3, or (at your
10 option) any later version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
17 Under Section 7 of GPL version 3, you are granted additional
18 permissions described in the GCC Runtime Library Exception, version
19 3.1, as published by the Free Software Foundation.
21 You should have received a copy of the GNU General Public License and
22 a copy of the GCC Runtime Library Exception along with this program;
23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 <http://www.gnu.org/licenses/>. */
26 /* Before including this file, some macros must be defined:
27 RS6000_BUILTIN_1 -- 1 arg builtins
28 RS6000_BUILTIN_2 -- 2 arg builtins
29 RS6000_BUILTIN_3 -- 3 arg builtins
30 RS6000_BUILTIN_A -- ABS builtins
31 RS6000_BUILTIN_D -- DST builtins
32 RS6000_BUILTIN_E -- SPE EVSEL builtins.
33 RS6000_BUILTIN_P -- Altivec and VSX predicate builtins
34 RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
35 RS6000_BUILTIN_S -- SPE predicate builtins
36 RS6000_BUILTIN_X -- special builtins
38 Each of the above macros takes 4 arguments:
39 ENUM Enumeration name
40 NAME String literal for the name
41 MASK Mask of bits that indicate which options enables the builtin
42 ATTR builtin attribute information.
43 ICODE Insn code of the function that implents the builtin. */
45 #ifndef RS6000_BUILTIN_1
46 #error "RS6000_BUILTIN_1 is not defined."
47 #endif
49 #ifndef RS6000_BUILTIN_2
50 #error "RS6000_BUILTIN_2 is not defined."
51 #endif
53 #ifndef RS6000_BUILTIN_3
54 #error "RS6000_BUILTIN_3 is not defined."
55 #endif
57 #ifndef RS6000_BUILTIN_A
58 #error "RS6000_BUILTIN_A is not defined."
59 #endif
61 #ifndef RS6000_BUILTIN_D
62 #error "RS6000_BUILTIN_D is not defined."
63 #endif
65 #ifndef RS6000_BUILTIN_E
66 #error "RS6000_BUILTIN_E is not defined."
67 #endif
69 #ifndef RS6000_BUILTIN_P
70 #error "RS6000_BUILTIN_P is not defined."
71 #endif
73 #ifndef RS6000_BUILTIN_Q
74 #error "RS6000_BUILTIN_Q is not defined."
75 #endif
77 #ifndef RS6000_BUILTIN_S
78 #error "RS6000_BUILTIN_S is not defined."
79 #endif
81 #ifndef RS6000_BUILTIN_X
82 #error "RS6000_BUILTIN_X is not defined."
83 #endif
85 #ifndef BU_AV_1
86 /* Define convenience macros using token pasting to allow fitting everything in
87 one line. */
89 /* Altivec convenience macros. */
90 #define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE) \
91 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
92 "__builtin_altivec_" NAME, /* NAME */ \
93 RS6000_BTM_ALTIVEC, /* MASK */ \
94 (RS6000_BTC_ ## ATTR /* ATTR */ \
95 | RS6000_BTC_UNARY), \
96 CODE_FOR_ ## ICODE) /* ICODE */
98 #define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE) \
99 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
100 "__builtin_altivec_" NAME, /* NAME */ \
101 RS6000_BTM_ALTIVEC, /* MASK */ \
102 (RS6000_BTC_ ## ATTR /* ATTR */ \
103 | RS6000_BTC_BINARY), \
104 CODE_FOR_ ## ICODE) /* ICODE */
106 #define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE) \
107 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
108 "__builtin_altivec_" NAME, /* NAME */ \
109 RS6000_BTM_ALTIVEC, /* MASK */ \
110 (RS6000_BTC_ ## ATTR /* ATTR */ \
111 | RS6000_BTC_TERNARY), \
112 CODE_FOR_ ## ICODE) /* ICODE */
114 #define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE) \
115 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
116 "__builtin_altivec_" NAME, /* NAME */ \
117 RS6000_BTM_ALTIVEC, /* MASK */ \
118 (RS6000_BTC_ ## ATTR /* ATTR */ \
119 | RS6000_BTC_ABS), \
120 CODE_FOR_ ## ICODE) /* ICODE */
122 #define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE) \
123 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
124 "__builtin_altivec_" NAME, /* NAME */ \
125 RS6000_BTM_ALTIVEC, /* MASK */ \
126 (RS6000_BTC_ ## ATTR /* ATTR */ \
127 | RS6000_BTC_DST), \
128 CODE_FOR_ ## ICODE) /* ICODE */
130 #define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE) \
131 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
132 "__builtin_altivec_" NAME, /* NAME */ \
133 RS6000_BTM_ALTIVEC, /* MASK */ \
134 (RS6000_BTC_ ## ATTR /* ATTR */ \
135 | RS6000_BTC_PREDICATE), \
136 CODE_FOR_ ## ICODE) /* ICODE */
138 #define BU_ALTIVEC_X(ENUM, NAME, ATTR) \
139 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
140 "__builtin_altivec_" NAME, /* NAME */ \
141 RS6000_BTM_ALTIVEC, /* MASK */ \
142 (RS6000_BTC_ ## ATTR /* ATTR */ \
143 | RS6000_BTC_SPECIAL), \
144 CODE_FOR_nothing) /* ICODE */
146 #define BU_ALTIVEC_C(ENUM, NAME, ATTR) \
147 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
148 "__builtin_altivec_" NAME, /* NAME */ \
149 (RS6000_BTM_ALTIVEC /* MASK */ \
150 | RS6000_BTM_CELL), \
151 (RS6000_BTC_ ## ATTR /* ATTR */ \
152 | RS6000_BTC_SPECIAL), \
153 CODE_FOR_nothing) /* ICODE */
155 /* Altivec overloaded builtin function macros. */
156 #define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME) \
157 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
158 "__builtin_vec_" NAME, /* NAME */ \
159 RS6000_BTM_ALTIVEC, /* MASK */ \
160 (RS6000_BTC_OVERLOADED /* ATTR */ \
161 | RS6000_BTC_UNARY), \
162 CODE_FOR_nothing) /* ICODE */
164 #define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME) \
165 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
166 "__builtin_vec_" NAME, /* NAME */ \
167 RS6000_BTM_ALTIVEC, /* MASK */ \
168 (RS6000_BTC_OVERLOADED /* ATTR */ \
169 | RS6000_BTC_BINARY), \
170 CODE_FOR_nothing) /* ICODE */
172 #define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME) \
173 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
174 "__builtin_vec_" NAME, /* NAME */ \
175 RS6000_BTM_ALTIVEC, /* MASK */ \
176 (RS6000_BTC_OVERLOADED /* ATTR */ \
177 | RS6000_BTC_TERNARY), \
178 CODE_FOR_nothing) /* ICODE */
180 #define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME) \
181 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
182 "__builtin_vec_" NAME, /* NAME */ \
183 RS6000_BTM_ALTIVEC, /* MASK */ \
184 (RS6000_BTC_OVERLOADED /* ATTR */ \
185 | RS6000_BTC_ABS), \
186 CODE_FOR_nothing) /* ICODE */
188 #define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME) \
189 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
190 "__builtin_vec_" NAME, /* NAME */ \
191 RS6000_BTM_ALTIVEC, /* MASK */ \
192 (RS6000_BTC_OVERLOADED /* ATTR */ \
193 | RS6000_BTC_DST), \
194 CODE_FOR_nothing) /* ICODE */
196 #define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME) \
197 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
198 "__builtin_vec_" NAME, /* NAME */ \
199 RS6000_BTM_ALTIVEC, /* MASK */ \
200 (RS6000_BTC_OVERLOADED /* ATTR */ \
201 | RS6000_BTC_PREDICATE), \
202 CODE_FOR_nothing) /* ICODE */
204 #define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME) \
205 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
206 "__builtin_vec_" NAME, /* NAME */ \
207 RS6000_BTM_ALTIVEC, /* MASK */ \
208 (RS6000_BTC_OVERLOADED /* ATTR */ \
209 | RS6000_BTC_SPECIAL), \
210 CODE_FOR_nothing) /* ICODE */
212 /* VSX convenience macros. */
213 #define BU_VSX_1(ENUM, NAME, ATTR, ICODE) \
214 RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
215 "__builtin_vsx_" NAME, /* NAME */ \
216 RS6000_BTM_VSX, /* MASK */ \
217 (RS6000_BTC_ ## ATTR /* ATTR */ \
218 | RS6000_BTC_UNARY), \
219 CODE_FOR_ ## ICODE) /* ICODE */
221 #define BU_VSX_2(ENUM, NAME, ATTR, ICODE) \
222 RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
223 "__builtin_vsx_" NAME, /* NAME */ \
224 RS6000_BTM_VSX, /* MASK */ \
225 (RS6000_BTC_ ## ATTR /* ATTR */ \
226 | RS6000_BTC_BINARY), \
227 CODE_FOR_ ## ICODE) /* ICODE */
229 #define BU_VSX_3(ENUM, NAME, ATTR, ICODE) \
230 RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
231 "__builtin_vsx_" NAME, /* NAME */ \
232 RS6000_BTM_VSX, /* MASK */ \
233 (RS6000_BTC_ ## ATTR /* ATTR */ \
234 | RS6000_BTC_TERNARY), \
235 CODE_FOR_ ## ICODE) /* ICODE */
237 #define BU_VSX_A(ENUM, NAME, ATTR, ICODE) \
238 RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
239 "__builtin_vsx_" NAME, /* NAME */ \
240 RS6000_BTM_VSX, /* MASK */ \
241 (RS6000_BTC_ ## ATTR /* ATTR */ \
242 | RS6000_BTC_ABS), \
243 CODE_FOR_ ## ICODE) /* ICODE */
245 #define BU_VSX_P(ENUM, NAME, ATTR, ICODE) \
246 RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
247 "__builtin_vsx_" NAME, /* NAME */ \
248 RS6000_BTM_VSX, /* MASK */ \
249 (RS6000_BTC_ ## ATTR /* ATTR */ \
250 | RS6000_BTC_PREDICATE), \
251 CODE_FOR_ ## ICODE) /* ICODE */
253 #define BU_VSX_X(ENUM, NAME, ATTR) \
254 RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
255 "__builtin_vsx_" NAME, /* NAME */ \
256 RS6000_BTM_VSX, /* MASK */ \
257 (RS6000_BTC_ ## ATTR /* ATTR */ \
258 | RS6000_BTC_SPECIAL), \
259 CODE_FOR_nothing) /* ICODE */
261 /* VSX overloaded builtin function macros. */
262 #define BU_VSX_OVERLOAD_1(ENUM, NAME) \
263 RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
264 "__builtin_vec_" NAME, /* NAME */ \
265 RS6000_BTM_VSX, /* MASK */ \
266 (RS6000_BTC_OVERLOADED /* ATTR */ \
267 | RS6000_BTC_UNARY), \
268 CODE_FOR_nothing) /* ICODE */
270 #define BU_VSX_OVERLOAD_2(ENUM, NAME) \
271 RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
272 "__builtin_vec_" NAME, /* NAME */ \
273 RS6000_BTM_VSX, /* MASK */ \
274 (RS6000_BTC_OVERLOADED /* ATTR */ \
275 | RS6000_BTC_BINARY), \
276 CODE_FOR_nothing) /* ICODE */
278 #define BU_VSX_OVERLOAD_3(ENUM, NAME) \
279 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
280 "__builtin_vec_" NAME, /* NAME */ \
281 RS6000_BTM_VSX, /* MASK */ \
282 (RS6000_BTC_OVERLOADED /* ATTR */ \
283 | RS6000_BTC_TERNARY), \
284 CODE_FOR_nothing) /* ICODE */
286 /* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names
287 instead of __builtin_vec. */
288 #define BU_VSX_OVERLOAD_3V(ENUM, NAME) \
289 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
290 "__builtin_vsx_" NAME, /* NAME */ \
291 RS6000_BTM_VSX, /* MASK */ \
292 (RS6000_BTC_OVERLOADED /* ATTR */ \
293 | RS6000_BTC_TERNARY), \
294 CODE_FOR_nothing) /* ICODE */
296 #define BU_VSX_OVERLOAD_X(ENUM, NAME) \
297 RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
298 "__builtin_vec_" NAME, /* NAME */ \
299 RS6000_BTM_VSX, /* MASK */ \
300 (RS6000_BTC_OVERLOADED /* ATTR */ \
301 | RS6000_BTC_SPECIAL), \
302 CODE_FOR_nothing) /* ICODE */
304 /* SPE convenience macros. */
305 #define BU_SPE_1(ENUM, NAME, ATTR, ICODE) \
306 RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
307 "__builtin_spe_" NAME, /* NAME */ \
308 RS6000_BTM_SPE, /* MASK */ \
309 (RS6000_BTC_ ## ATTR /* ATTR */ \
310 | RS6000_BTC_UNARY), \
311 CODE_FOR_ ## ICODE) /* ICODE */
313 #define BU_SPE_2(ENUM, NAME, ATTR, ICODE) \
314 RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
315 "__builtin_spe_" NAME, /* NAME */ \
316 RS6000_BTM_SPE, /* MASK */ \
317 (RS6000_BTC_ ## ATTR /* ATTR */ \
318 | RS6000_BTC_BINARY), \
319 CODE_FOR_ ## ICODE) /* ICODE */
321 #define BU_SPE_3(ENUM, NAME, ATTR, ICODE) \
322 RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
323 "__builtin_spe_" NAME, /* NAME */ \
324 RS6000_BTM_SPE, /* MASK */ \
325 (RS6000_BTC_ ## ATTR /* ATTR */ \
326 | RS6000_BTC_TERNARY), \
327 CODE_FOR_ ## ICODE) /* ICODE */
329 #define BU_SPE_E(ENUM, NAME, ATTR, ICODE) \
330 RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
331 "__builtin_spe_" NAME, /* NAME */ \
332 RS6000_BTM_SPE, /* MASK */ \
333 (RS6000_BTC_ ## ATTR /* ATTR */ \
334 | RS6000_BTC_EVSEL), \
335 CODE_FOR_ ## ICODE) /* ICODE */
337 #define BU_SPE_P(ENUM, NAME, ATTR, ICODE) \
338 RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
339 "__builtin_spe_" NAME, /* NAME */ \
340 RS6000_BTM_SPE, /* MASK */ \
341 (RS6000_BTC_ ## ATTR /* ATTR */ \
342 | RS6000_BTC_PREDICATE), \
343 CODE_FOR_ ## ICODE) /* ICODE */
345 #define BU_SPE_X(ENUM, NAME, ATTR) \
346 RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
347 "__builtin_spe_" NAME, /* NAME */ \
348 RS6000_BTM_SPE, /* MASK */ \
349 (RS6000_BTC_ ## ATTR /* ATTR */ \
350 | RS6000_BTC_SPECIAL), \
351 CODE_FOR_nothing) /* ICODE */
353 /* Paired floating point convenience macros. */
354 #define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE) \
355 RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
356 "__builtin_paired_" NAME, /* NAME */ \
357 RS6000_BTM_PAIRED, /* MASK */ \
358 (RS6000_BTC_ ## ATTR /* ATTR */ \
359 | RS6000_BTC_UNARY), \
360 CODE_FOR_ ## ICODE) /* ICODE */
362 #define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE) \
363 RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
364 "__builtin_paired_" NAME, /* NAME */ \
365 RS6000_BTM_PAIRED, /* MASK */ \
366 (RS6000_BTC_ ## ATTR /* ATTR */ \
367 | RS6000_BTC_BINARY), \
368 CODE_FOR_ ## ICODE) /* ICODE */
370 #define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE) \
371 RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
372 "__builtin_paired_" NAME, /* NAME */ \
373 RS6000_BTM_PAIRED, /* MASK */ \
374 (RS6000_BTC_ ## ATTR /* ATTR */ \
375 | RS6000_BTC_TERNARY), \
376 CODE_FOR_ ## ICODE) /* ICODE */
378 #define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE) \
379 RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
380 "__builtin_paired_" NAME, /* NAME */ \
381 RS6000_BTM_PAIRED, /* MASK */ \
382 (RS6000_BTC_ ## ATTR /* ATTR */ \
383 | RS6000_BTC_PREDICATE), \
384 CODE_FOR_ ## ICODE) /* ICODE */
386 #define BU_PAIRED_X(ENUM, NAME, ATTR) \
387 RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
388 "__builtin_paired_" NAME, /* NAME */ \
389 RS6000_BTM_PAIRED, /* MASK */ \
390 (RS6000_BTC_ ## ATTR /* ATTR */ \
391 | RS6000_BTC_SPECIAL), \
392 CODE_FOR_nothing) /* ICODE */
394 #define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR) \
395 RS6000_BUILTIN_X (ENUM, /* ENUM */ \
396 NAME, /* NAME */ \
397 MASK, /* MASK */ \
398 (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \
399 CODE_FOR_nothing) /* ICODE */
400 #endif
402 /* Insure 0 is not a legitimate index. */
403 BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC)
405 /* 3 argument Altivec builtins. */
406 BU_ALTIVEC_3 (VMADDFP, "vmaddfp", FP, fmav4sf4)
407 BU_ALTIVEC_3 (VMHADDSHS, "vmhaddshs", SAT, altivec_vmhaddshs)
408 BU_ALTIVEC_3 (VMHRADDSHS, "vmhraddshs", SAT, altivec_vmhraddshs)
409 BU_ALTIVEC_3 (VMLADDUHM, "vmladduhm", CONST, altivec_vmladduhm)
410 BU_ALTIVEC_3 (VMSUMUBM, "vmsumubm", CONST, altivec_vmsumubm)
411 BU_ALTIVEC_3 (VMSUMMBM, "vmsummbm", CONST, altivec_vmsummbm)
412 BU_ALTIVEC_3 (VMSUMUHM, "vmsumuhm", CONST, altivec_vmsumuhm)
413 BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm)
414 BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs)
415 BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs)
416 BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4)
417 BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
418 BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
419 BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
420 BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
421 BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
422 BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns)
423 BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
424 BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
425 BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
426 BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
427 BU_ALTIVEC_3 (VSEL_4SF, "vsel_4sf", CONST, vector_select_v4sf)
428 BU_ALTIVEC_3 (VSEL_4SI, "vsel_4si", CONST, vector_select_v4si)
429 BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi)
430 BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi)
431 BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df)
432 BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di)
433 BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns)
434 BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns)
435 BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns)
436 BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns)
437 BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi)
438 BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi)
439 BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si)
440 BU_ALTIVEC_3 (VSLDOI_4SF, "vsldoi_4sf", CONST, altivec_vsldoi_v4sf)
442 /* Altivec DST builtins. */
443 BU_ALTIVEC_D (DST, "dst", MISC, altivec_dst)
444 BU_ALTIVEC_D (DSTT, "dstt", MISC, altivec_dstt)
445 BU_ALTIVEC_D (DSTST, "dstst", MISC, altivec_dstst)
446 BU_ALTIVEC_D (DSTSTT, "dststt", MISC, altivec_dststt)
448 /* Altivec 2 argument builtin functions. */
449 BU_ALTIVEC_2 (VADDUBM, "vaddubm", CONST, addv16qi3)
450 BU_ALTIVEC_2 (VADDUHM, "vadduhm", CONST, addv8hi3)
451 BU_ALTIVEC_2 (VADDUWM, "vadduwm", CONST, addv4si3)
452 BU_ALTIVEC_2 (VADDFP, "vaddfp", CONST, addv4sf3)
453 BU_ALTIVEC_2 (VADDCUW, "vaddcuw", CONST, altivec_vaddcuw)
454 BU_ALTIVEC_2 (VADDUBS, "vaddubs", CONST, altivec_vaddubs)
455 BU_ALTIVEC_2 (VADDSBS, "vaddsbs", CONST, altivec_vaddsbs)
456 BU_ALTIVEC_2 (VADDUHS, "vadduhs", CONST, altivec_vadduhs)
457 BU_ALTIVEC_2 (VADDSHS, "vaddshs", CONST, altivec_vaddshs)
458 BU_ALTIVEC_2 (VADDUWS, "vadduws", CONST, altivec_vadduws)
459 BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws)
460 BU_ALTIVEC_2 (VAND, "vand", CONST, andv4si3)
461 BU_ALTIVEC_2 (VANDC, "vandc", CONST, andcv4si3)
462 BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, altivec_vavgub)
463 BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, altivec_vavgsb)
464 BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, altivec_vavguh)
465 BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, altivec_vavgsh)
466 BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, altivec_vavguw)
467 BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, altivec_vavgsw)
468 BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux)
469 BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx)
470 BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp)
471 BU_ALTIVEC_2 (VCMPEQUB, "vcmpequb", CONST, vector_eqv16qi)
472 BU_ALTIVEC_2 (VCMPEQUH, "vcmpequh", CONST, vector_eqv8hi)
473 BU_ALTIVEC_2 (VCMPEQUW, "vcmpequw", CONST, vector_eqv4si)
474 BU_ALTIVEC_2 (VCMPEQFP, "vcmpeqfp", CONST, vector_eqv4sf)
475 BU_ALTIVEC_2 (VCMPGEFP, "vcmpgefp", CONST, vector_gev4sf)
476 BU_ALTIVEC_2 (VCMPGTUB, "vcmpgtub", CONST, vector_gtuv16qi)
477 BU_ALTIVEC_2 (VCMPGTSB, "vcmpgtsb", CONST, vector_gtv16qi)
478 BU_ALTIVEC_2 (VCMPGTUH, "vcmpgtuh", CONST, vector_gtuv8hi)
479 BU_ALTIVEC_2 (VCMPGTSH, "vcmpgtsh", CONST, vector_gtv8hi)
480 BU_ALTIVEC_2 (VCMPGTUW, "vcmpgtuw", CONST, vector_gtuv4si)
481 BU_ALTIVEC_2 (VCMPGTSW, "vcmpgtsw", CONST, vector_gtv4si)
482 BU_ALTIVEC_2 (VCMPGTFP, "vcmpgtfp", CONST, vector_gtv4sf)
483 BU_ALTIVEC_2 (VCTSXS, "vctsxs", CONST, altivec_vctsxs)
484 BU_ALTIVEC_2 (VCTUXS, "vctuxs", CONST, altivec_vctuxs)
485 BU_ALTIVEC_2 (VMAXUB, "vmaxub", CONST, umaxv16qi3)
486 BU_ALTIVEC_2 (VMAXSB, "vmaxsb", CONST, smaxv16qi3)
487 BU_ALTIVEC_2 (VMAXUH, "vmaxuh", CONST, umaxv8hi3)
488 BU_ALTIVEC_2 (VMAXSH, "vmaxsh", CONST, smaxv8hi3)
489 BU_ALTIVEC_2 (VMAXUW, "vmaxuw", CONST, umaxv4si3)
490 BU_ALTIVEC_2 (VMAXSW, "vmaxsw", CONST, smaxv4si3)
491 BU_ALTIVEC_2 (VMAXFP, "vmaxfp", CONST, smaxv4sf3)
492 BU_ALTIVEC_2 (VMRGHB, "vmrghb", CONST, altivec_vmrghb)
493 BU_ALTIVEC_2 (VMRGHH, "vmrghh", CONST, altivec_vmrghh)
494 BU_ALTIVEC_2 (VMRGHW, "vmrghw", CONST, altivec_vmrghw)
495 BU_ALTIVEC_2 (VMRGLB, "vmrglb", CONST, altivec_vmrglb)
496 BU_ALTIVEC_2 (VMRGLH, "vmrglh", CONST, altivec_vmrglh)
497 BU_ALTIVEC_2 (VMRGLW, "vmrglw", CONST, altivec_vmrglw)
498 BU_ALTIVEC_2 (VMINUB, "vminub", CONST, uminv16qi3)
499 BU_ALTIVEC_2 (VMINSB, "vminsb", CONST, sminv16qi3)
500 BU_ALTIVEC_2 (VMINUH, "vminuh", CONST, uminv8hi3)
501 BU_ALTIVEC_2 (VMINSH, "vminsh", CONST, sminv8hi3)
502 BU_ALTIVEC_2 (VMINUW, "vminuw", CONST, uminv4si3)
503 BU_ALTIVEC_2 (VMINSW, "vminsw", CONST, sminv4si3)
504 BU_ALTIVEC_2 (VMINFP, "vminfp", CONST, sminv4sf3)
505 BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi)
506 BU_ALTIVEC_2 (VMULEUB_UNS, "vmuleub_uns", CONST, vec_widen_umult_even_v16qi)
507 BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi)
508 BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi)
509 BU_ALTIVEC_2 (VMULEUH_UNS, "vmuleuh_uns", CONST, vec_widen_umult_even_v8hi)
510 BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi)
511 BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi)
512 BU_ALTIVEC_2 (VMULOUB_UNS, "vmuloub_uns", CONST, vec_widen_umult_odd_v16qi)
513 BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi)
514 BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi)
515 BU_ALTIVEC_2 (VMULOUH_UNS, "vmulouh_uns", CONST, vec_widen_umult_odd_v8hi)
516 BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi)
517 BU_ALTIVEC_2 (VNOR, "vnor", CONST, norv4si3)
518 BU_ALTIVEC_2 (VOR, "vor", CONST, iorv4si3)
519 BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum)
520 BU_ALTIVEC_2 (VPKUWUM, "vpkuwum", CONST, altivec_vpkuwum)
521 BU_ALTIVEC_2 (VPKPX, "vpkpx", CONST, altivec_vpkpx)
522 BU_ALTIVEC_2 (VPKSHSS, "vpkshss", CONST, altivec_vpkshss)
523 BU_ALTIVEC_2 (VPKSWSS, "vpkswss", CONST, altivec_vpkswss)
524 BU_ALTIVEC_2 (VPKUHUS, "vpkuhus", CONST, altivec_vpkuhus)
525 BU_ALTIVEC_2 (VPKSHUS, "vpkshus", CONST, altivec_vpkshus)
526 BU_ALTIVEC_2 (VPKUWUS, "vpkuwus", CONST, altivec_vpkuwus)
527 BU_ALTIVEC_2 (VPKSWUS, "vpkswus", CONST, altivec_vpkswus)
528 BU_ALTIVEC_2 (VRECIPFP, "vrecipdivfp", CONST, recipv4sf3)
529 BU_ALTIVEC_2 (VRLB, "vrlb", CONST, vrotlv16qi3)
530 BU_ALTIVEC_2 (VRLH, "vrlh", CONST, vrotlv8hi3)
531 BU_ALTIVEC_2 (VRLW, "vrlw", CONST, vrotlv4si3)
532 BU_ALTIVEC_2 (VSLB, "vslb", CONST, vashlv16qi3)
533 BU_ALTIVEC_2 (VSLH, "vslh", CONST, vashlv8hi3)
534 BU_ALTIVEC_2 (VSLW, "vslw", CONST, vashlv4si3)
535 BU_ALTIVEC_2 (VSL, "vsl", CONST, altivec_vsl)
536 BU_ALTIVEC_2 (VSLO, "vslo", CONST, altivec_vslo)
537 BU_ALTIVEC_2 (VSPLTB, "vspltb", CONST, altivec_vspltb)
538 BU_ALTIVEC_2 (VSPLTH, "vsplth", CONST, altivec_vsplth)
539 BU_ALTIVEC_2 (VSPLTW, "vspltw", CONST, altivec_vspltw)
540 BU_ALTIVEC_2 (VSRB, "vsrb", CONST, vlshrv16qi3)
541 BU_ALTIVEC_2 (VSRH, "vsrh", CONST, vlshrv8hi3)
542 BU_ALTIVEC_2 (VSRW, "vsrw", CONST, vlshrv4si3)
543 BU_ALTIVEC_2 (VSRAB, "vsrab", CONST, vashrv16qi3)
544 BU_ALTIVEC_2 (VSRAH, "vsrah", CONST, vashrv8hi3)
545 BU_ALTIVEC_2 (VSRAW, "vsraw", CONST, vashrv4si3)
546 BU_ALTIVEC_2 (VSR, "vsr", CONST, altivec_vsr)
547 BU_ALTIVEC_2 (VSRO, "vsro", CONST, altivec_vsro)
548 BU_ALTIVEC_2 (VSUBUBM, "vsububm", CONST, subv16qi3)
549 BU_ALTIVEC_2 (VSUBUHM, "vsubuhm", CONST, subv8hi3)
550 BU_ALTIVEC_2 (VSUBUWM, "vsubuwm", CONST, subv4si3)
551 BU_ALTIVEC_2 (VSUBFP, "vsubfp", CONST, subv4sf3)
552 BU_ALTIVEC_2 (VSUBCUW, "vsubcuw", CONST, altivec_vsubcuw)
553 BU_ALTIVEC_2 (VSUBUBS, "vsububs", CONST, altivec_vsububs)
554 BU_ALTIVEC_2 (VSUBSBS, "vsubsbs", CONST, altivec_vsubsbs)
555 BU_ALTIVEC_2 (VSUBUHS, "vsubuhs", CONST, altivec_vsubuhs)
556 BU_ALTIVEC_2 (VSUBSHS, "vsubshs", CONST, altivec_vsubshs)
557 BU_ALTIVEC_2 (VSUBUWS, "vsubuws", CONST, altivec_vsubuws)
558 BU_ALTIVEC_2 (VSUBSWS, "vsubsws", CONST, altivec_vsubsws)
559 BU_ALTIVEC_2 (VSUM4UBS, "vsum4ubs", CONST, altivec_vsum4ubs)
560 BU_ALTIVEC_2 (VSUM4SBS, "vsum4sbs", CONST, altivec_vsum4sbs)
561 BU_ALTIVEC_2 (VSUM4SHS, "vsum4shs", CONST, altivec_vsum4shs)
562 BU_ALTIVEC_2 (VSUM2SWS, "vsum2sws", CONST, altivec_vsum2sws)
563 BU_ALTIVEC_2 (VSUMSWS, "vsumsws", CONST, altivec_vsumsws)
564 BU_ALTIVEC_2 (VXOR, "vxor", CONST, xorv4si3)
565 BU_ALTIVEC_2 (COPYSIGN_V4SF, "copysignfp", CONST, vector_copysignv4sf3)
567 /* Altivec ABS functions. */
568 BU_ALTIVEC_A (ABS_V4SI, "abs_v4si", CONST, absv4si2)
569 BU_ALTIVEC_A (ABS_V8HI, "abs_v8hi", CONST, absv8hi2)
570 BU_ALTIVEC_A (ABS_V4SF, "abs_v4sf", CONST, absv4sf2)
571 BU_ALTIVEC_A (ABS_V16QI, "abs_v16qi", CONST, absv16qi2)
572 BU_ALTIVEC_A (ABSS_V4SI, "abss_v4si", SAT, altivec_abss_v4si)
573 BU_ALTIVEC_A (ABSS_V8HI, "abss_v8hi", SAT, altivec_abss_v8hi)
574 BU_ALTIVEC_A (ABSS_V16QI, "abss_v16qi", SAT, altivec_abss_v16qi)
576 /* 1 argument Altivec builtin functions. */
577 BU_ALTIVEC_1 (VEXPTEFP, "vexptefp", FP, altivec_vexptefp)
578 BU_ALTIVEC_1 (VLOGEFP, "vlogefp", FP, altivec_vlogefp)
579 BU_ALTIVEC_1 (VREFP, "vrefp", FP, rev4sf2)
580 BU_ALTIVEC_1 (VRFIM, "vrfim", FP, vector_floorv4sf2)
581 BU_ALTIVEC_1 (VRFIN, "vrfin", FP, altivec_vrfin)
582 BU_ALTIVEC_1 (VRFIP, "vrfip", FP, vector_ceilv4sf2)
583 BU_ALTIVEC_1 (VRFIZ, "vrfiz", FP, vector_btruncv4sf2)
584 BU_ALTIVEC_1 (VRSQRTFP, "vrsqrtfp", FP, rsqrtv4sf2)
585 BU_ALTIVEC_1 (VRSQRTEFP, "vrsqrtefp", FP, rsqrtev4sf2)
586 BU_ALTIVEC_1 (VSPLTISB, "vspltisb", CONST, altivec_vspltisb)
587 BU_ALTIVEC_1 (VSPLTISH, "vspltish", CONST, altivec_vspltish)
588 BU_ALTIVEC_1 (VSPLTISW, "vspltisw", CONST, altivec_vspltisw)
589 BU_ALTIVEC_1 (VUPKHSB, "vupkhsb", CONST, altivec_vupkhsb)
590 BU_ALTIVEC_1 (VUPKHPX, "vupkhpx", CONST, altivec_vupkhpx)
591 BU_ALTIVEC_1 (VUPKHSH, "vupkhsh", CONST, altivec_vupkhsh)
592 BU_ALTIVEC_1 (VUPKLSB, "vupklsb", CONST, altivec_vupklsb)
593 BU_ALTIVEC_1 (VUPKLPX, "vupklpx", CONST, altivec_vupklpx)
594 BU_ALTIVEC_1 (VUPKLSH, "vupklsh", CONST, altivec_vupklsh)
596 BU_ALTIVEC_1 (FLOAT_V4SI_V4SF, "float_sisf", FP, floatv4siv4sf2)
597 BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2)
598 BU_ALTIVEC_1 (FIX_V4SF_V4SI, "fix_sfsi", FP, fix_truncv4sfv4si2)
599 BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI, "fixuns_sfsi", FP, fixuns_truncv4sfv4si2)
601 /* Altivec predicate functions. */
602 BU_ALTIVEC_P (VCMPBFP_P, "vcmpbfp_p", CONST, altivec_vcmpbfp_p)
603 BU_ALTIVEC_P (VCMPEQFP_P, "vcmpeqfp_p", CONST, vector_eq_v4sf_p)
604 BU_ALTIVEC_P (VCMPGEFP_P, "vcmpgefp_p", CONST, vector_ge_v4sf_p)
605 BU_ALTIVEC_P (VCMPGTFP_P, "vcmpgtfp_p", CONST, vector_gt_v4sf_p)
606 BU_ALTIVEC_P (VCMPEQUW_P, "vcmpequw_p", CONST, vector_eq_v4si_p)
607 BU_ALTIVEC_P (VCMPGTSW_P, "vcmpgtsw_p", CONST, vector_gt_v4si_p)
608 BU_ALTIVEC_P (VCMPGTUW_P, "vcmpgtuw_p", CONST, vector_gtu_v4si_p)
609 BU_ALTIVEC_P (VCMPEQUH_P, "vcmpequh_p", CONST, vector_eq_v8hi_p)
610 BU_ALTIVEC_P (VCMPGTSH_P, "vcmpgtsh_p", CONST, vector_gt_v8hi_p)
611 BU_ALTIVEC_P (VCMPGTUH_P, "vcmpgtuh_p", CONST, vector_gtu_v8hi_p)
612 BU_ALTIVEC_P (VCMPEQUB_P, "vcmpequb_p", CONST, vector_eq_v16qi_p)
613 BU_ALTIVEC_P (VCMPGTSB_P, "vcmpgtsb_p", CONST, vector_gt_v16qi_p)
614 BU_ALTIVEC_P (VCMPGTUB_P, "vcmpgtub_p", CONST, vector_gtu_v16qi_p)
616 /* AltiVec builtins that are handled as special cases. */
617 BU_ALTIVEC_X (ST_INTERNAL_4si, "st_internal_4si", MEM)
618 BU_ALTIVEC_X (LD_INTERNAL_4si, "ld_internal_4si", MEM)
619 BU_ALTIVEC_X (ST_INTERNAL_8hi, "st_internal_8hi", MEM)
620 BU_ALTIVEC_X (LD_INTERNAL_8hi, "ld_internal_8hi", MEM)
621 BU_ALTIVEC_X (ST_INTERNAL_16qi, "st_internal_16qi", MEM)
622 BU_ALTIVEC_X (LD_INTERNAL_16qi, "ld_internal_16qi", MEM)
623 BU_ALTIVEC_X (ST_INTERNAL_4sf, "st_internal_16qi", MEM)
624 BU_ALTIVEC_X (LD_INTERNAL_4sf, "ld_internal_4sf", MEM)
625 BU_ALTIVEC_X (ST_INTERNAL_2df, "st_internal_4sf", MEM)
626 BU_ALTIVEC_X (LD_INTERNAL_2df, "ld_internal_2df", MEM)
627 BU_ALTIVEC_X (ST_INTERNAL_2di, "st_internal_2di", MEM)
628 BU_ALTIVEC_X (LD_INTERNAL_2di, "ld_internal_2di", MEM)
629 BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC)
630 BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC)
631 BU_ALTIVEC_X (DSSALL, "dssall", MISC)
632 BU_ALTIVEC_X (DSS, "dss", MISC)
633 BU_ALTIVEC_X (LVSL, "lvsl", MEM)
634 BU_ALTIVEC_X (LVSR, "lvsr", MEM)
635 BU_ALTIVEC_X (LVEBX, "lvebx", MEM)
636 BU_ALTIVEC_X (LVEHX, "lvehx", MEM)
637 BU_ALTIVEC_X (LVEWX, "lvewx", MEM)
638 BU_ALTIVEC_X (LVXL, "lvxl", MEM)
639 BU_ALTIVEC_X (LVX, "lvx", MEM)
640 BU_ALTIVEC_X (STVX, "stvx", MEM)
641 BU_ALTIVEC_C (LVLX, "lvlx", MEM)
642 BU_ALTIVEC_C (LVLXL, "lvlxl", MEM)
643 BU_ALTIVEC_C (LVRX, "lvrx", MEM)
644 BU_ALTIVEC_C (LVRXL, "lvrxl", MEM)
645 BU_ALTIVEC_X (STVEBX, "stvebx", MEM)
646 BU_ALTIVEC_X (STVEHX, "stvehx", MEM)
647 BU_ALTIVEC_X (STVEWX, "stvewx", MEM)
648 BU_ALTIVEC_X (STVXL, "stvxl", MEM)
649 BU_ALTIVEC_C (STVLX, "stvlx", MEM)
650 BU_ALTIVEC_C (STVLXL, "stvlxl", MEM)
651 BU_ALTIVEC_C (STVRX, "stvrx", MEM)
652 BU_ALTIVEC_C (STVRXL, "stvrxl", MEM)
653 BU_ALTIVEC_X (MASK_FOR_LOAD, "mask_for_load", MISC)
654 BU_ALTIVEC_X (MASK_FOR_STORE, "mask_for_store", MISC)
655 BU_ALTIVEC_X (VEC_INIT_V4SI, "vec_init_v4si", CONST)
656 BU_ALTIVEC_X (VEC_INIT_V8HI, "vec_init_v8hi", CONST)
657 BU_ALTIVEC_X (VEC_INIT_V16QI, "vec_init_v16qi", CONST)
658 BU_ALTIVEC_X (VEC_INIT_V4SF, "vec_init_v4sf", CONST)
659 BU_ALTIVEC_X (VEC_SET_V4SI, "vec_set_v4si", CONST)
660 BU_ALTIVEC_X (VEC_SET_V8HI, "vec_set_v8hi", CONST)
661 BU_ALTIVEC_X (VEC_SET_V16QI, "vec_set_v16qi", CONST)
662 BU_ALTIVEC_X (VEC_SET_V4SF, "vec_set_v4sf", CONST)
663 BU_ALTIVEC_X (VEC_EXT_V4SI, "vec_ext_v4si", CONST)
664 BU_ALTIVEC_X (VEC_EXT_V8HI, "vec_ext_v8hi", CONST)
665 BU_ALTIVEC_X (VEC_EXT_V16QI, "vec_ext_v16qi", CONST)
666 BU_ALTIVEC_X (VEC_EXT_V4SF, "vec_ext_v4sf", CONST)
668 /* Altivec overloaded builtins. */
669 /* For now, don't set the classification for overloaded functions.
670 The function should be converted to the type specific instruction
671 before we get to the point about classifying the builtin type. */
673 /* 3 argument Altivec overloaded builtins. */
674 BU_ALTIVEC_OVERLOAD_3 (MADD, "madd")
675 BU_ALTIVEC_OVERLOAD_3 (MADDS, "madds")
676 BU_ALTIVEC_OVERLOAD_3 (MLADD, "mladd")
677 BU_ALTIVEC_OVERLOAD_3 (MRADDS, "mradds")
678 BU_ALTIVEC_OVERLOAD_3 (MSUM, "msum")
679 BU_ALTIVEC_OVERLOAD_3 (MSUMS, "msums")
680 BU_ALTIVEC_OVERLOAD_3 (NMSUB, "nmsub")
681 BU_ALTIVEC_OVERLOAD_3 (PERM, "perm")
682 BU_ALTIVEC_OVERLOAD_3 (SEL, "sel")
683 BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM, "vmsummbm")
684 BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM, "vmsumshm")
685 BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS, "vmsumshs")
686 BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM, "vmsumubm")
687 BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM, "vmsumuhm")
688 BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS, "vmsumuhs")
690 /* Altivec DST overloaded builtins. */
691 BU_ALTIVEC_OVERLOAD_D (DST, "dst")
692 BU_ALTIVEC_OVERLOAD_D (DSTT, "dstt")
693 BU_ALTIVEC_OVERLOAD_D (DSTST, "dstst")
694 BU_ALTIVEC_OVERLOAD_D (DSTSTT, "dststt")
696 /* 2 argument Altivec overloaded builtins. */
697 BU_ALTIVEC_OVERLOAD_2 (ADD, "add")
698 BU_ALTIVEC_OVERLOAD_2 (ADDC, "addc")
699 BU_ALTIVEC_OVERLOAD_2 (ADDS, "adds")
700 BU_ALTIVEC_OVERLOAD_2 (AND, "and")
701 BU_ALTIVEC_OVERLOAD_2 (ANDC, "andc")
702 BU_ALTIVEC_OVERLOAD_2 (AVG, "avg")
703 BU_ALTIVEC_OVERLOAD_2 (CMPB, "cmpb")
704 BU_ALTIVEC_OVERLOAD_2 (CMPEQ, "cmpeq")
705 BU_ALTIVEC_OVERLOAD_2 (CMPGE, "cmpge")
706 BU_ALTIVEC_OVERLOAD_2 (CMPGT, "cmpgt")
707 BU_ALTIVEC_OVERLOAD_2 (CMPLE, "cmple")
708 BU_ALTIVEC_OVERLOAD_2 (CMPLT, "cmplt")
709 BU_ALTIVEC_OVERLOAD_2 (COPYSIGN, "copysign")
710 BU_ALTIVEC_OVERLOAD_2 (MAX, "max")
711 BU_ALTIVEC_OVERLOAD_2 (MERGEH, "mergeh")
712 BU_ALTIVEC_OVERLOAD_2 (MERGEL, "mergel")
713 BU_ALTIVEC_OVERLOAD_2 (MIN, "min")
714 BU_ALTIVEC_OVERLOAD_2 (MULE, "mule")
715 BU_ALTIVEC_OVERLOAD_2 (MULO, "mulo")
716 BU_ALTIVEC_OVERLOAD_2 (NOR, "nor")
717 BU_ALTIVEC_OVERLOAD_2 (OR, "or")
718 BU_ALTIVEC_OVERLOAD_2 (PACK, "pack")
719 BU_ALTIVEC_OVERLOAD_2 (PACKPX, "packpx")
720 BU_ALTIVEC_OVERLOAD_2 (PACKS, "packs")
721 BU_ALTIVEC_OVERLOAD_2 (PACKSU, "packsu")
722 BU_ALTIVEC_OVERLOAD_2 (RECIP, "recipdiv")
723 BU_ALTIVEC_OVERLOAD_2 (RL, "rl")
724 BU_ALTIVEC_OVERLOAD_2 (SL, "sl")
725 BU_ALTIVEC_OVERLOAD_2 (SLL, "sll")
726 BU_ALTIVEC_OVERLOAD_2 (SLO, "slo")
727 BU_ALTIVEC_OVERLOAD_2 (SR, "sr")
728 BU_ALTIVEC_OVERLOAD_2 (SRA, "sra")
729 BU_ALTIVEC_OVERLOAD_2 (SRL, "srl")
730 BU_ALTIVEC_OVERLOAD_2 (SRO, "sro")
731 BU_ALTIVEC_OVERLOAD_2 (SUB, "sub")
732 BU_ALTIVEC_OVERLOAD_2 (SUBC, "subc")
733 BU_ALTIVEC_OVERLOAD_2 (SUBS, "subs")
734 BU_ALTIVEC_OVERLOAD_2 (SUM2S, "sum2s")
735 BU_ALTIVEC_OVERLOAD_2 (SUM4S, "sum4s")
736 BU_ALTIVEC_OVERLOAD_2 (SUMS, "sums")
737 BU_ALTIVEC_OVERLOAD_2 (VADDFP, "vaddfp")
738 BU_ALTIVEC_OVERLOAD_2 (VADDSBS, "vaddsbs")
739 BU_ALTIVEC_OVERLOAD_2 (VADDSHS, "vaddshs")
740 BU_ALTIVEC_OVERLOAD_2 (VADDSWS, "vaddsws")
741 BU_ALTIVEC_OVERLOAD_2 (VADDUBM, "vaddubm")
742 BU_ALTIVEC_OVERLOAD_2 (VADDUBS, "vaddubs")
743 BU_ALTIVEC_OVERLOAD_2 (VADDUHM, "vadduhm")
744 BU_ALTIVEC_OVERLOAD_2 (VADDUHS, "vadduhs")
745 BU_ALTIVEC_OVERLOAD_2 (VADDUWM, "vadduwm")
746 BU_ALTIVEC_OVERLOAD_2 (VADDUWS, "vadduws")
747 BU_ALTIVEC_OVERLOAD_2 (VAVGSB, "vavgsb")
748 BU_ALTIVEC_OVERLOAD_2 (VAVGSH, "vavgsh")
749 BU_ALTIVEC_OVERLOAD_2 (VAVGSW, "vavgsw")
750 BU_ALTIVEC_OVERLOAD_2 (VAVGUB, "vavgub")
751 BU_ALTIVEC_OVERLOAD_2 (VAVGUH, "vavguh")
752 BU_ALTIVEC_OVERLOAD_2 (VAVGUW, "vavguw")
753 BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP, "vcmpeqfp")
754 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB, "vcmpequb")
755 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH, "vcmpequh")
756 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW, "vcmpequw")
757 BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP, "vcmpgtfp")
758 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB, "vcmpgtsb")
759 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH, "vcmpgtsh")
760 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW, "vcmpgtsw")
761 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB, "vcmpgtub")
762 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH, "vcmpgtuh")
763 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW, "vcmpgtuw")
764 BU_ALTIVEC_OVERLOAD_2 (VMAXFP, "vmaxfp")
765 BU_ALTIVEC_OVERLOAD_2 (VMAXSB, "vmaxsb")
766 BU_ALTIVEC_OVERLOAD_2 (VMAXSH, "vmaxsh")
767 BU_ALTIVEC_OVERLOAD_2 (VMAXSW, "vmaxsw")
768 BU_ALTIVEC_OVERLOAD_2 (VMAXUB, "vmaxub")
769 BU_ALTIVEC_OVERLOAD_2 (VMAXUH, "vmaxuh")
770 BU_ALTIVEC_OVERLOAD_2 (VMAXUW, "vmaxuw")
771 BU_ALTIVEC_OVERLOAD_2 (VMINFP, "vminfp")
772 BU_ALTIVEC_OVERLOAD_2 (VMINSB, "vminsb")
773 BU_ALTIVEC_OVERLOAD_2 (VMINSH, "vminsh")
774 BU_ALTIVEC_OVERLOAD_2 (VMINSW, "vminsw")
775 BU_ALTIVEC_OVERLOAD_2 (VMINUB, "vminub")
776 BU_ALTIVEC_OVERLOAD_2 (VMINUH, "vminuh")
777 BU_ALTIVEC_OVERLOAD_2 (VMINUW, "vminuw")
778 BU_ALTIVEC_OVERLOAD_2 (VMRGHB, "vmrghb")
779 BU_ALTIVEC_OVERLOAD_2 (VMRGHH, "vmrghh")
780 BU_ALTIVEC_OVERLOAD_2 (VMRGHW, "vmrghw")
781 BU_ALTIVEC_OVERLOAD_2 (VMRGLB, "vmrglb")
782 BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh")
783 BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw")
784 BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb")
785 BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh")
786 BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub")
787 BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh")
788 BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb")
789 BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh")
790 BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub")
791 BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh")
792 BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss")
793 BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus")
794 BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss")
795 BU_ALTIVEC_OVERLOAD_2 (VPKSWUS, "vpkswus")
796 BU_ALTIVEC_OVERLOAD_2 (VPKUHUM, "vpkuhum")
797 BU_ALTIVEC_OVERLOAD_2 (VPKUHUS, "vpkuhus")
798 BU_ALTIVEC_OVERLOAD_2 (VPKUWUM, "vpkuwum")
799 BU_ALTIVEC_OVERLOAD_2 (VPKUWUS, "vpkuwus")
800 BU_ALTIVEC_OVERLOAD_2 (VRLB, "vrlb")
801 BU_ALTIVEC_OVERLOAD_2 (VRLH, "vrlh")
802 BU_ALTIVEC_OVERLOAD_2 (VRLW, "vrlw")
803 BU_ALTIVEC_OVERLOAD_2 (VSLB, "vslb")
804 BU_ALTIVEC_OVERLOAD_2 (VSLH, "vslh")
805 BU_ALTIVEC_OVERLOAD_2 (VSLW, "vslw")
806 BU_ALTIVEC_OVERLOAD_2 (VSRAB, "vsrab")
807 BU_ALTIVEC_OVERLOAD_2 (VSRAH, "vsrah")
808 BU_ALTIVEC_OVERLOAD_2 (VSRAW, "vsraw")
809 BU_ALTIVEC_OVERLOAD_2 (VSRB, "vsrb")
810 BU_ALTIVEC_OVERLOAD_2 (VSRH, "vsrh")
811 BU_ALTIVEC_OVERLOAD_2 (VSRW, "vsrw")
812 BU_ALTIVEC_OVERLOAD_2 (VSUBFP, "vsubfp")
813 BU_ALTIVEC_OVERLOAD_2 (VSUBSBS, "vsubsbs")
814 BU_ALTIVEC_OVERLOAD_2 (VSUBSHS, "vsubshs")
815 BU_ALTIVEC_OVERLOAD_2 (VSUBSWS, "vsubsws")
816 BU_ALTIVEC_OVERLOAD_2 (VSUBUBM, "vsububm")
817 BU_ALTIVEC_OVERLOAD_2 (VSUBUBS, "vsububs")
818 BU_ALTIVEC_OVERLOAD_2 (VSUBUHM, "vsubuhm")
819 BU_ALTIVEC_OVERLOAD_2 (VSUBUHS, "vsubuhs")
820 BU_ALTIVEC_OVERLOAD_2 (VSUBUWM, "vsubuwm")
821 BU_ALTIVEC_OVERLOAD_2 (VSUBUWS, "vsubuws")
822 BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS, "vsum4sbs")
823 BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS, "vsum4shs")
824 BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS, "vsum4ubs")
825 BU_ALTIVEC_OVERLOAD_2 (XOR, "xor")
827 /* 1 argument Altivec overloaded functions. */
828 BU_ALTIVEC_OVERLOAD_1 (ABS, "abs")
829 BU_ALTIVEC_OVERLOAD_1 (ABSS, "abss")
830 BU_ALTIVEC_OVERLOAD_1 (CEIL, "ceil")
831 BU_ALTIVEC_OVERLOAD_1 (EXPTE, "expte")
832 BU_ALTIVEC_OVERLOAD_1 (FLOOR, "floor")
833 BU_ALTIVEC_OVERLOAD_1 (LOGE, "loge")
834 BU_ALTIVEC_OVERLOAD_1 (MTVSCR, "mtvscr")
835 BU_ALTIVEC_OVERLOAD_1 (NEARBYINT, "nearbyint")
836 BU_ALTIVEC_OVERLOAD_1 (RE, "re")
837 BU_ALTIVEC_OVERLOAD_1 (RINT, "rint")
838 BU_ALTIVEC_OVERLOAD_1 (ROUND, "round")
839 BU_ALTIVEC_OVERLOAD_1 (RSQRT, "rsqrt")
840 BU_ALTIVEC_OVERLOAD_1 (RSQRTE, "rsqrte")
841 BU_ALTIVEC_OVERLOAD_1 (SQRT, "sqrt")
842 BU_ALTIVEC_OVERLOAD_1 (TRUNC, "trunc")
843 BU_ALTIVEC_OVERLOAD_1 (UNPACKH, "unpackh")
844 BU_ALTIVEC_OVERLOAD_1 (UNPACKL, "unpackl")
845 BU_ALTIVEC_OVERLOAD_1 (VUPKHPX, "vupkhpx")
846 BU_ALTIVEC_OVERLOAD_1 (VUPKHSB, "vupkhsb")
847 BU_ALTIVEC_OVERLOAD_1 (VUPKHSH, "vupkhsh")
848 BU_ALTIVEC_OVERLOAD_1 (VUPKLPX, "vupklpx")
849 BU_ALTIVEC_OVERLOAD_1 (VUPKLSB, "vupklsb")
850 BU_ALTIVEC_OVERLOAD_1 (VUPKLSH, "vupklsh")
852 /* Overloaded altivec predicates. */
853 BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P, "vcmpeq_p")
854 BU_ALTIVEC_OVERLOAD_P (VCMPGT_P, "vcmpgt_p")
855 BU_ALTIVEC_OVERLOAD_P (VCMPGE_P, "vcmpge_p")
857 /* Overloaded Altivec builtins that are handled as special cases. */
858 BU_ALTIVEC_OVERLOAD_X (CTF, "ctf")
859 BU_ALTIVEC_OVERLOAD_X (CTS, "cts")
860 BU_ALTIVEC_OVERLOAD_X (CTU, "ctu")
861 BU_ALTIVEC_OVERLOAD_X (EXTRACT, "extract")
862 BU_ALTIVEC_OVERLOAD_X (INSERT, "insert")
863 BU_ALTIVEC_OVERLOAD_X (LD, "ld")
864 BU_ALTIVEC_OVERLOAD_X (LDE, "lde")
865 BU_ALTIVEC_OVERLOAD_X (LDL, "ldl")
866 BU_ALTIVEC_OVERLOAD_X (LVEBX, "lvebx")
867 BU_ALTIVEC_OVERLOAD_X (LVEHX, "lvehx")
868 BU_ALTIVEC_OVERLOAD_X (LVEWX, "lvewx")
869 BU_ALTIVEC_OVERLOAD_X (LVLX, "lvlx")
870 BU_ALTIVEC_OVERLOAD_X (LVLXL, "lvlxl")
871 BU_ALTIVEC_OVERLOAD_X (LVRX, "lvrx")
872 BU_ALTIVEC_OVERLOAD_X (LVRXL, "lvrxl")
873 BU_ALTIVEC_OVERLOAD_X (LVSL, "lvsl")
874 BU_ALTIVEC_OVERLOAD_X (LVSR, "lvsr")
875 BU_ALTIVEC_OVERLOAD_X (PROMOTE, "promote")
876 BU_ALTIVEC_OVERLOAD_X (SLD, "sld")
877 BU_ALTIVEC_OVERLOAD_X (SPLAT, "splat")
878 BU_ALTIVEC_OVERLOAD_X (SPLATS, "splats")
879 BU_ALTIVEC_OVERLOAD_X (ST, "st")
880 BU_ALTIVEC_OVERLOAD_X (STE, "ste")
881 BU_ALTIVEC_OVERLOAD_X (STEP, "step")
882 BU_ALTIVEC_OVERLOAD_X (STL, "stl")
883 BU_ALTIVEC_OVERLOAD_X (STVEBX, "stvebx")
884 BU_ALTIVEC_OVERLOAD_X (STVEHX, "stvehx")
885 BU_ALTIVEC_OVERLOAD_X (STVEWX, "stvewx")
886 BU_ALTIVEC_OVERLOAD_X (STVLX, "stvlx")
887 BU_ALTIVEC_OVERLOAD_X (STVLXL, "stvlxl")
888 BU_ALTIVEC_OVERLOAD_X (STVRX, "stvrx")
889 BU_ALTIVEC_OVERLOAD_X (STVRXL, "stvrxl")
890 BU_ALTIVEC_OVERLOAD_X (VCFSX, "vcfsx")
891 BU_ALTIVEC_OVERLOAD_X (VCFUX, "vcfux")
892 BU_ALTIVEC_OVERLOAD_X (VSPLTB, "vspltb")
893 BU_ALTIVEC_OVERLOAD_X (VSPLTH, "vsplth")
894 BU_ALTIVEC_OVERLOAD_X (VSPLTW, "vspltw")
896 /* 3 argument VSX builtins. */
897 BU_VSX_3 (XVMADDSP, "xvmaddsp", CONST, fmav4sf4)
898 BU_VSX_3 (XVMSUBSP, "xvmsubsp", CONST, fmsv4sf4)
899 BU_VSX_3 (XVNMADDSP, "xvnmaddsp", CONST, nfmav4sf4)
900 BU_VSX_3 (XVNMSUBSP, "xvnmsubsp", CONST, nfmsv4sf4)
902 BU_VSX_3 (XVMADDDP, "xvmadddp", CONST, fmav2df4)
903 BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4)
904 BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4)
905 BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4)
907 BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di)
908 BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df)
909 BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf)
910 BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si)
911 BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi)
912 BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi)
913 BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns)
914 BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns)
915 BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns)
916 BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns)
918 BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
919 BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
920 BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
921 BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
922 BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
923 BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi)
924 BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
925 BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
926 BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
927 BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
929 BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df)
930 BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di)
931 BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf)
932 BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si)
933 BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi)
934 BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi)
935 BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df)
936 BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di)
937 BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di)
938 BU_VSX_3 (XXSLDWI_2DF, "xxsldwi_2df", CONST, vsx_xxsldwi_v2df)
939 BU_VSX_3 (XXSLDWI_4SF, "xxsldwi_4sf", CONST, vsx_xxsldwi_v4sf)
940 BU_VSX_3 (XXSLDWI_4SI, "xxsldwi_4si", CONST, vsx_xxsldwi_v4si)
941 BU_VSX_3 (XXSLDWI_8HI, "xxsldwi_8hi", CONST, vsx_xxsldwi_v8hi)
942 BU_VSX_3 (XXSLDWI_16QI, "xxsldwi_16qi", CONST, vsx_xxsldwi_v16qi)
944 /* 2 argument VSX builtins. */
945 BU_VSX_2 (XVADDDP, "xvadddp", FP, addv2df3)
946 BU_VSX_2 (XVSUBDP, "xvsubdp", FP, subv2df3)
947 BU_VSX_2 (XVMULDP, "xvmuldp", FP, mulv2df3)
948 BU_VSX_2 (XVDIVDP, "xvdivdp", FP, divv2df3)
949 BU_VSX_2 (RECIP_V2DF, "xvrecipdivdp", FP, recipv2df3)
950 BU_VSX_2 (XVMINDP, "xvmindp", CONST, sminv2df3)
951 BU_VSX_2 (XVMAXDP, "xvmaxdp", CONST, smaxv2df3)
952 BU_VSX_2 (XVTDIVDP_FE, "xvtdivdp_fe", CONST, vsx_tdivv2df3_fe)
953 BU_VSX_2 (XVTDIVDP_FG, "xvtdivdp_fg", CONST, vsx_tdivv2df3_fg)
954 BU_VSX_2 (XVCMPEQDP, "xvcmpeqdp", CONST, vector_eqv2df)
955 BU_VSX_2 (XVCMPGTDP, "xvcmpgtdp", CONST, vector_gtv2df)
956 BU_VSX_2 (XVCMPGEDP, "xvcmpgedp", CONST, vector_gev2df)
958 BU_VSX_2 (XVADDSP, "xvaddsp", FP, addv4sf3)
959 BU_VSX_2 (XVSUBSP, "xvsubsp", FP, subv4sf3)
960 BU_VSX_2 (XVMULSP, "xvmulsp", FP, mulv4sf3)
961 BU_VSX_2 (XVDIVSP, "xvdivsp", FP, divv4sf3)
962 BU_VSX_2 (RECIP_V4SF, "xvrecipdivsp", FP, recipv4sf3)
963 BU_VSX_2 (XVMINSP, "xvminsp", CONST, sminv4sf3)
964 BU_VSX_2 (XVMAXSP, "xvmaxsp", CONST, smaxv4sf3)
965 BU_VSX_2 (XVTDIVSP_FE, "xvtdivsp_fe", CONST, vsx_tdivv4sf3_fe)
966 BU_VSX_2 (XVTDIVSP_FG, "xvtdivsp_fg", CONST, vsx_tdivv4sf3_fg)
967 BU_VSX_2 (XVCMPEQSP, "xvcmpeqsp", CONST, vector_eqv4sf)
968 BU_VSX_2 (XVCMPGTSP, "xvcmpgtsp", CONST, vector_gtv4sf)
969 BU_VSX_2 (XVCMPGESP, "xvcmpgesp", CONST, vector_gev4sf)
971 BU_VSX_2 (XSMINDP, "xsmindp", CONST, smindf3)
972 BU_VSX_2 (XSMAXDP, "xsmaxdp", CONST, smaxdf3)
973 BU_VSX_2 (XSTDIVDP_FE, "xstdivdp_fe", CONST, vsx_tdivdf3_fe)
974 BU_VSX_2 (XSTDIVDP_FG, "xstdivdp_fg", CONST, vsx_tdivdf3_fg)
975 BU_VSX_2 (CPSGNDP, "cpsgndp", CONST, vector_copysignv2df3)
976 BU_VSX_2 (CPSGNSP, "cpsgnsp", CONST, vector_copysignv4sf3)
978 BU_VSX_2 (CONCAT_2DF, "concat_2df", CONST, vsx_concat_v2df)
979 BU_VSX_2 (CONCAT_2DI, "concat_2di", CONST, vsx_concat_v2di)
980 BU_VSX_2 (SPLAT_2DF, "splat_2df", CONST, vsx_splat_v2df)
981 BU_VSX_2 (SPLAT_2DI, "splat_2di", CONST, vsx_splat_v2di)
982 BU_VSX_2 (XXMRGHW_4SF, "xxmrghw", CONST, vsx_xxmrghw_v4sf)
983 BU_VSX_2 (XXMRGHW_4SI, "xxmrghw_4si", CONST, vsx_xxmrghw_v4si)
984 BU_VSX_2 (XXMRGLW_4SF, "xxmrglw", CONST, vsx_xxmrglw_v4sf)
985 BU_VSX_2 (XXMRGLW_4SI, "xxmrglw_4si", CONST, vsx_xxmrglw_v4si)
986 BU_VSX_2 (VEC_MERGEL_V2DF, "mergel_2df", CONST, vsx_mergel_v2df)
987 BU_VSX_2 (VEC_MERGEL_V2DI, "mergel_2di", CONST, vsx_mergel_v2di)
988 BU_VSX_2 (VEC_MERGEH_V2DF, "mergeh_2df", CONST, vsx_mergeh_v2df)
989 BU_VSX_2 (VEC_MERGEH_V2DI, "mergeh_2di", CONST, vsx_mergeh_v2di)
991 /* VSX abs builtin functions. */
992 BU_VSX_A (XVABSDP, "xvabsdp", CONST, absv2df2)
993 BU_VSX_A (XVNABSDP, "xvnabsdp", CONST, vsx_nabsv2df2)
994 BU_VSX_A (XVABSSP, "xvabssp", CONST, absv4sf2)
995 BU_VSX_A (XVNABSSP, "xvnabssp", CONST, vsx_nabsv4sf2)
997 /* 1 argument VSX builtin functions. */
998 BU_VSX_1 (XVNEGDP, "xvnegdp", CONST, negv2df2)
999 BU_VSX_1 (XVSQRTDP, "xvsqrtdp", CONST, sqrtv2df2)
1000 BU_VSX_1 (RSQRT_2DF, "xvrsqrtdp", CONST, rsqrtv2df2)
1001 BU_VSX_1 (XVRSQRTEDP, "xvrsqrtedp", CONST, rsqrtev2df2)
1002 BU_VSX_1 (XVTSQRTDP_FE, "xvtsqrtdp_fe", CONST, vsx_tsqrtv2df2_fe)
1003 BU_VSX_1 (XVTSQRTDP_FG, "xvtsqrtdp_fg", CONST, vsx_tsqrtv2df2_fg)
1004 BU_VSX_1 (XVREDP, "xvredp", CONST, vsx_frev2df2)
1006 BU_VSX_1 (XVNEGSP, "xvnegsp", CONST, negv4sf2)
1007 BU_VSX_1 (XVSQRTSP, "xvsqrtsp", CONST, sqrtv4sf2)
1008 BU_VSX_1 (RSQRT_4SF, "xvrsqrtsp", CONST, rsqrtv4sf2)
1009 BU_VSX_1 (XVRSQRTESP, "xvrsqrtesp", CONST, rsqrtev4sf2)
1010 BU_VSX_1 (XVTSQRTSP_FE, "xvtsqrtsp_fe", CONST, vsx_tsqrtv4sf2_fe)
1011 BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg)
1012 BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2)
1014 BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp)
1015 BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvdpsp)
1016 BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp)
1017 BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp)
1018 BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe)
1019 BU_VSX_1 (XSTSQRTDP_FG, "xstsqrtdp_fg", CONST, vsx_tsqrtdf2_fg)
1021 BU_VSX_1 (XVCVDPSXDS, "xvcvdpsxds", CONST, vsx_fix_truncv2dfv2di2)
1022 BU_VSX_1 (XVCVDPUXDS, "xvcvdpuxds", CONST, vsx_fixuns_truncv2dfv2di2)
1023 BU_VSX_1 (XVCVDPUXDS_UNS, "xvcvdpuxds_uns", CONST, vsx_fixuns_truncv2dfv2di2)
1024 BU_VSX_1 (XVCVSXDDP, "xvcvsxddp", CONST, vsx_floatv2div2df2)
1025 BU_VSX_1 (XVCVUXDDP, "xvcvuxddp", CONST, vsx_floatunsv2div2df2)
1026 BU_VSX_1 (XVCVUXDDP_UNS, "xvcvuxddp_uns", CONST, vsx_floatunsv2div2df2)
1028 BU_VSX_1 (XVCVSPSXWS, "xvcvspsxws", CONST, vsx_fix_truncv4sfv4si2)
1029 BU_VSX_1 (XVCVSPUXWS, "xvcvspuxws", CONST, vsx_fixuns_truncv4sfv4si2)
1030 BU_VSX_1 (XVCVSXWSP, "xvcvsxwsp", CONST, vsx_floatv4siv4sf2)
1031 BU_VSX_1 (XVCVUXWSP, "xvcvuxwsp", CONST, vsx_floatunsv4siv4sf2)
1033 BU_VSX_1 (XVCVDPSXWS, "xvcvdpsxws", CONST, vsx_xvcvdpsxws)
1034 BU_VSX_1 (XVCVDPUXWS, "xvcvdpuxws", CONST, vsx_xvcvdpuxws)
1035 BU_VSX_1 (XVCVSXWDP, "xvcvsxwdp", CONST, vsx_xvcvsxwdp)
1036 BU_VSX_1 (XVCVUXWDP, "xvcvuxwdp", CONST, vsx_xvcvuxwdp)
1037 BU_VSX_1 (XVRDPI, "xvrdpi", CONST, vsx_xvrdpi)
1038 BU_VSX_1 (XVRDPIC, "xvrdpic", CONST, vsx_xvrdpic)
1039 BU_VSX_1 (XVRDPIM, "xvrdpim", CONST, vsx_floorv2df2)
1040 BU_VSX_1 (XVRDPIP, "xvrdpip", CONST, vsx_ceilv2df2)
1041 BU_VSX_1 (XVRDPIZ, "xvrdpiz", CONST, vsx_btruncv2df2)
1043 BU_VSX_1 (XVCVSPSXDS, "xvcvspsxds", CONST, vsx_xvcvspsxds)
1044 BU_VSX_1 (XVCVSPUXDS, "xvcvspuxds", CONST, vsx_xvcvspuxds)
1045 BU_VSX_1 (XVCVSXDSP, "xvcvsxdsp", CONST, vsx_xvcvsxdsp)
1046 BU_VSX_1 (XVCVUXDSP, "xvcvuxdsp", CONST, vsx_xvcvuxdsp)
1047 BU_VSX_1 (XVRSPI, "xvrspi", CONST, vsx_xvrspi)
1048 BU_VSX_1 (XVRSPIC, "xvrspic", CONST, vsx_xvrspic)
1049 BU_VSX_1 (XVRSPIM, "xvrspim", CONST, vsx_floorv4sf2)
1050 BU_VSX_1 (XVRSPIP, "xvrspip", CONST, vsx_ceilv4sf2)
1051 BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2)
1053 BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi)
1054 BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic)
1055 BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, vsx_floordf2)
1056 BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, vsx_ceildf2)
1057 BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, vsx_btruncdf2)
1059 /* VSX predicate functions. */
1060 BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p)
1061 BU_VSX_P (XVCMPGESP_P, "xvcmpgesp_p", CONST, vector_ge_v4sf_p)
1062 BU_VSX_P (XVCMPGTSP_P, "xvcmpgtsp_p", CONST, vector_gt_v4sf_p)
1063 BU_VSX_P (XVCMPEQDP_P, "xvcmpeqdp_p", CONST, vector_eq_v2df_p)
1064 BU_VSX_P (XVCMPGEDP_P, "xvcmpgedp_p", CONST, vector_ge_v2df_p)
1065 BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p)
1067 /* VSX builtins that are handled as special cases. */
1068 BU_VSX_X (LXSDX, "lxsdx", MEM)
1069 BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM)
1070 BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM)
1071 BU_VSX_X (LXVDSX, "lxvdsx", MEM)
1072 BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM)
1073 BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM)
1074 BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM)
1075 BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM)
1076 BU_VSX_X (STXSDX, "stxsdx", MEM)
1077 BU_VSX_X (STXVD2X_V2DF, "stxsdx_v2df", MEM)
1078 BU_VSX_X (STXVD2X_V2DI, "stxsdx_v2di", MEM)
1079 BU_VSX_X (STXVW4X_V4SF, "stxsdx_v4sf", MEM)
1080 BU_VSX_X (STXVW4X_V4SI, "stxsdx_v4si", MEM)
1081 BU_VSX_X (STXVW4X_V8HI, "stxsdx_v8hi", MEM)
1082 BU_VSX_X (STXVW4X_V16QI, "stxsdx_v16qi", MEM)
1083 BU_VSX_X (XSABSDP, "xsabsdp", CONST)
1084 BU_VSX_X (XSADDDP, "xsadddp", FP)
1085 BU_VSX_X (XSCMPODP, "xscmpodp", FP)
1086 BU_VSX_X (XSCMPUDP, "xscmpudp", FP)
1087 BU_VSX_X (XSCVDPSXDS, "xscvdpsxds", FP)
1088 BU_VSX_X (XSCVDPSXWS, "xscvdpsxws", FP)
1089 BU_VSX_X (XSCVDPUXDS, "xscvdpuxds", FP)
1090 BU_VSX_X (XSCVDPUXWS, "xscvdpuxws", FP)
1091 BU_VSX_X (XSCVSXDDP, "xscvsxddp", FP)
1092 BU_VSX_X (XSCVUXDDP, "xscvuxddp", FP)
1093 BU_VSX_X (XSDIVDP, "xsdivdp", FP)
1094 BU_VSX_X (XSMADDADP, "xsmaddadp", FP)
1095 BU_VSX_X (XSMADDMDP, "xsmaddmdp", FP)
1096 BU_VSX_X (XSMOVDP, "xsmovdp", FP)
1097 BU_VSX_X (XSMSUBADP, "xsmsubadp", FP)
1098 BU_VSX_X (XSMSUBMDP, "xsmsubmdp", FP)
1099 BU_VSX_X (XSMULDP, "xsmuldp", FP)
1100 BU_VSX_X (XSNABSDP, "xsnabsdp", FP)
1101 BU_VSX_X (XSNEGDP, "xsnegdp", FP)
1102 BU_VSX_X (XSNMADDADP, "xsnmaddadp", FP)
1103 BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP)
1104 BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP)
1105 BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP)
1106 BU_VSX_X (XSSUBDP, "xssubdp", FP)
1107 BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST)
1108 BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST)
1109 BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST)
1110 BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST)
1111 BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST)
1112 BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST)
1114 /* VSX overloaded builtins, add the overloaded functions not present in
1115 Altivec. */
1117 /* 3 argument VSX overloaded builtins. */
1118 BU_VSX_OVERLOAD_3 (MSUB, "msub")
1119 BU_VSX_OVERLOAD_3 (NMADD, "nmadd")
1120 BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi")
1121 BU_VSX_OVERLOAD_3V (XXSLDWI, "xxsldwi")
1123 /* 2 argument VSX overloaded builtin functions. */
1124 BU_VSX_OVERLOAD_2 (MUL, "mul")
1125 BU_VSX_OVERLOAD_2 (DIV, "div")
1126 BU_VSX_OVERLOAD_2 (XXMRGHW, "xxmrghw")
1127 BU_VSX_OVERLOAD_2 (XXMRGLW, "xxmrglw")
1128 BU_VSX_OVERLOAD_2 (XXSPLTD, "xxspltd")
1129 BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw")
1131 /* VSX builtins that are handled as special cases. */
1132 BU_VSX_OVERLOAD_X (LD, "ld")
1133 BU_VSX_OVERLOAD_X (ST, "st")
1135 /* 3 argument paired floating point builtins. */
1136 BU_PAIRED_3 (MSUB, "msub", FP, fmsv2sf4)
1137 BU_PAIRED_3 (MADD, "madd", FP, fmav2sf4)
1138 BU_PAIRED_3 (MADDS0, "madds0", FP, paired_madds0)
1139 BU_PAIRED_3 (MADDS1, "madds1", FP, paired_madds1)
1140 BU_PAIRED_3 (NMSUB, "nmsub", FP, nfmsv2sf4)
1141 BU_PAIRED_3 (NMADD, "nmadd", FP, nfmav2sf4)
1142 BU_PAIRED_3 (SUM0, "sum0", FP, paired_sum0)
1143 BU_PAIRED_3 (SUM1, "sum1", FP, paired_sum1)
1144 BU_PAIRED_3 (SELV2SF4, "selv2sf4", CONST, selv2sf4)
1146 /* 2 argument paired floating point builtins. */
1147 BU_PAIRED_2 (DIVV2SF3, "divv2sf3", FP, paired_divv2sf3)
1148 BU_PAIRED_2 (ADDV2SF3, "addv2sf3", FP, paired_addv2sf3)
1149 BU_PAIRED_2 (SUBV2SF3, "subv2sf3", FP, paired_subv2sf3)
1150 BU_PAIRED_2 (MULV2SF3, "mulv2sf3", FP, paired_mulv2sf3)
1151 BU_PAIRED_2 (MULS0, "muls0", FP, paired_muls0)
1152 BU_PAIRED_2 (MULS1, "muls1", FP, paired_muls1)
1153 BU_PAIRED_2 (MERGE00, "merge00", CONST, paired_merge00)
1154 BU_PAIRED_2 (MERGE01, "merge01", CONST, paired_merge01)
1155 BU_PAIRED_2 (MERGE10, "merge10", CONST, paired_merge10)
1156 BU_PAIRED_2 (MERGE11, "merge11", CONST, paired_merge11)
1158 /* 1 argument paired floating point builtin functions. */
1159 BU_PAIRED_1 (ABSV2SF2, "absv2sf2", CONST, paired_absv2sf2)
1160 BU_PAIRED_1 (NABSV2SF2, "nabsv2sf2", CONST, nabsv2sf2)
1161 BU_PAIRED_1 (NEGV2SF2, "negv2sf2", CONST, paired_negv2sf2)
1162 BU_PAIRED_1 (SQRTV2SF2, "sqrtv2sf2", FP, sqrtv2sf2)
1163 BU_PAIRED_1 (RESV2SF, "resv2sf2", FP, resv2sf2)
1165 /* PAIRED builtins that are handled as special cases. */
1166 BU_PAIRED_X (STX, "stx", MISC)
1167 BU_PAIRED_X (LX, "lx", MISC)
1169 /* Paired predicates. */
1170 BU_PAIRED_P (CMPU0, "cmpu0", CONST, paired_cmpu0)
1171 BU_PAIRED_P (CMPU1, "cmpu1", CONST, paired_cmpu1)
1173 /* PowerPC E500 builtins (SPE). */
1175 BU_SPE_2 (EVADDW, "evaddw", MISC, addv2si3)
1176 BU_SPE_2 (EVAND, "evand", MISC, andv2si3)
1177 BU_SPE_2 (EVANDC, "evandc", MISC, spe_evandc)
1178 BU_SPE_2 (EVDIVWS, "evdivws", MISC, divv2si3)
1179 BU_SPE_2 (EVDIVWU, "evdivwu", MISC, spe_evdivwu)
1180 BU_SPE_2 (EVEQV, "eveqv", MISC, spe_eveqv)
1181 BU_SPE_2 (EVFSADD, "evfsadd", MISC, spe_evfsadd)
1182 BU_SPE_2 (EVFSDIV, "evfsdiv", MISC, spe_evfsdiv)
1183 BU_SPE_2 (EVFSMUL, "evfsmul", MISC, spe_evfsmul)
1184 BU_SPE_2 (EVFSSUB, "evfssub", MISC, spe_evfssub)
1185 BU_SPE_2 (EVMERGEHI, "evmergehi", MISC, spe_evmergehi)
1186 BU_SPE_2 (EVMERGEHILO, "evmergehilo", MISC, spe_evmergehilo)
1187 BU_SPE_2 (EVMERGELO, "evmergelo", MISC, spe_evmergelo)
1188 BU_SPE_2 (EVMERGELOHI, "evmergelohi", MISC, spe_evmergelohi)
1189 BU_SPE_2 (EVMHEGSMFAA, "evmhegsmfaa", MISC, spe_evmhegsmfaa)
1190 BU_SPE_2 (EVMHEGSMFAN, "evmhegsmfan", MISC, spe_evmhegsmfan)
1191 BU_SPE_2 (EVMHEGSMIAA, "evmhegsmiaa", MISC, spe_evmhegsmiaa)
1192 BU_SPE_2 (EVMHEGSMIAN, "evmhegsmian", MISC, spe_evmhegsmian)
1193 BU_SPE_2 (EVMHEGUMIAA, "evmhegumiaa", MISC, spe_evmhegumiaa)
1194 BU_SPE_2 (EVMHEGUMIAN, "evmhegumian", MISC, spe_evmhegumian)
1195 BU_SPE_2 (EVMHESMF, "evmhesmf", MISC, spe_evmhesmf)
1196 BU_SPE_2 (EVMHESMFA, "evmhesmfa", MISC, spe_evmhesmfa)
1197 BU_SPE_2 (EVMHESMFAAW, "evmhesmfaaw", MISC, spe_evmhesmfaaw)
1198 BU_SPE_2 (EVMHESMFANW, "evmhesmfanw", MISC, spe_evmhesmfanw)
1199 BU_SPE_2 (EVMHESMI, "evmhesmi", MISC, spe_evmhesmi)
1200 BU_SPE_2 (EVMHESMIA, "evmhesmia", MISC, spe_evmhesmia)
1201 BU_SPE_2 (EVMHESMIAAW, "evmhesmiaaw", MISC, spe_evmhesmiaaw)
1202 BU_SPE_2 (EVMHESMIANW, "evmhesmianw", MISC, spe_evmhesmianw)
1203 BU_SPE_2 (EVMHESSF, "evmhessf", MISC, spe_evmhessf)
1204 BU_SPE_2 (EVMHESSFA, "evmhessfa", MISC, spe_evmhessfa)
1205 BU_SPE_2 (EVMHESSFAAW, "evmhessfaaw", MISC, spe_evmhessfaaw)
1206 BU_SPE_2 (EVMHESSFANW, "evmhessfanw", MISC, spe_evmhessfanw)
1207 BU_SPE_2 (EVMHESSIAAW, "evmhessiaaw", MISC, spe_evmhessiaaw)
1208 BU_SPE_2 (EVMHESSIANW, "evmhessianw", MISC, spe_evmhessianw)
1209 BU_SPE_2 (EVMHEUMI, "evmheumi", MISC, spe_evmheumi)
1210 BU_SPE_2 (EVMHEUMIA, "evmheumia", MISC, spe_evmheumia)
1211 BU_SPE_2 (EVMHEUMIAAW, "evmheumiaaw", MISC, spe_evmheumiaaw)
1212 BU_SPE_2 (EVMHEUMIANW, "evmheumianw", MISC, spe_evmheumianw)
1213 BU_SPE_2 (EVMHEUSIAAW, "evmheusiaaw", MISC, spe_evmheusiaaw)
1214 BU_SPE_2 (EVMHEUSIANW, "evmheusianw", MISC, spe_evmheusianw)
1215 BU_SPE_2 (EVMHOGSMFAA, "evmhogsmfaa", MISC, spe_evmhogsmfaa)
1216 BU_SPE_2 (EVMHOGSMFAN, "evmhogsmfan", MISC, spe_evmhogsmfan)
1217 BU_SPE_2 (EVMHOGSMIAA, "evmhogsmiaa", MISC, spe_evmhogsmiaa)
1218 BU_SPE_2 (EVMHOGSMIAN, "evmhogsmian", MISC, spe_evmhogsmian)
1219 BU_SPE_2 (EVMHOGUMIAA, "evmhogumiaa", MISC, spe_evmhogumiaa)
1220 BU_SPE_2 (EVMHOGUMIAN, "evmhogumian", MISC, spe_evmhogumian)
1221 BU_SPE_2 (EVMHOSMF, "evmhosmf", MISC, spe_evmhosmf)
1222 BU_SPE_2 (EVMHOSMFA, "evmhosmfa", MISC, spe_evmhosmfa)
1223 BU_SPE_2 (EVMHOSMFAAW, "evmhosmfaaw", MISC, spe_evmhosmfaaw)
1224 BU_SPE_2 (EVMHOSMFANW, "evmhosmfanw", MISC, spe_evmhosmfanw)
1225 BU_SPE_2 (EVMHOSMI, "evmhosmi", MISC, spe_evmhosmi)
1226 BU_SPE_2 (EVMHOSMIA, "evmhosmia", MISC, spe_evmhosmia)
1227 BU_SPE_2 (EVMHOSMIAAW, "evmhosmiaaw", MISC, spe_evmhosmiaaw)
1228 BU_SPE_2 (EVMHOSMIANW, "evmhosmianw", MISC, spe_evmhosmianw)
1229 BU_SPE_2 (EVMHOSSF, "evmhossf", MISC, spe_evmhossf)
1230 BU_SPE_2 (EVMHOSSFA, "evmhossfa", MISC, spe_evmhossfa)
1231 BU_SPE_2 (EVMHOSSFAAW, "evmhossfaaw", MISC, spe_evmhossfaaw)
1232 BU_SPE_2 (EVMHOSSFANW, "evmhossfanw", MISC, spe_evmhossfanw)
1233 BU_SPE_2 (EVMHOSSIAAW, "evmhossiaaw", MISC, spe_evmhossiaaw)
1234 BU_SPE_2 (EVMHOSSIANW, "evmhossianw", MISC, spe_evmhossianw)
1235 BU_SPE_2 (EVMHOUMI, "evmhoumi", MISC, spe_evmhoumi)
1236 BU_SPE_2 (EVMHOUMIA, "evmhoumia", MISC, spe_evmhoumia)
1237 BU_SPE_2 (EVMHOUMIAAW, "evmhoumiaaw", MISC, spe_evmhoumiaaw)
1238 BU_SPE_2 (EVMHOUMIANW, "evmhoumianw", MISC, spe_evmhoumianw)
1239 BU_SPE_2 (EVMHOUSIAAW, "evmhousiaaw", MISC, spe_evmhousiaaw)
1240 BU_SPE_2 (EVMHOUSIANW, "evmhousianw", MISC, spe_evmhousianw)
1241 BU_SPE_2 (EVMWHSMF, "evmwhsmf", MISC, spe_evmwhsmf)
1242 BU_SPE_2 (EVMWHSMFA, "evmwhsmfa", MISC, spe_evmwhsmfa)
1243 BU_SPE_2 (EVMWHSMI, "evmwhsmi", MISC, spe_evmwhsmi)
1244 BU_SPE_2 (EVMWHSMIA, "evmwhsmia", MISC, spe_evmwhsmia)
1245 BU_SPE_2 (EVMWHSSF, "evmwhssf", MISC, spe_evmwhssf)
1246 BU_SPE_2 (EVMWHSSFA, "evmwhssfa", MISC, spe_evmwhssfa)
1247 BU_SPE_2 (EVMWHUMI, "evmwhumi", MISC, spe_evmwhumi)
1248 BU_SPE_2 (EVMWHUMIA, "evmwhumia", MISC, spe_evmwhumia)
1249 BU_SPE_2 (EVMWLSMIAAW, "evmwlsmiaaw", MISC, spe_evmwlsmiaaw)
1250 BU_SPE_2 (EVMWLSMIANW, "evmwlsmianw", MISC, spe_evmwlsmianw)
1251 BU_SPE_2 (EVMWLSSIAAW, "evmwlssiaaw", MISC, spe_evmwlssiaaw)
1252 BU_SPE_2 (EVMWLSSIANW, "evmwlssianw", MISC, spe_evmwlssianw)
1253 BU_SPE_2 (EVMWLUMI, "evmwlumi", MISC, spe_evmwlumi)
1254 BU_SPE_2 (EVMWLUMIA, "evmwlumia", MISC, spe_evmwlumia)
1255 BU_SPE_2 (EVMWLUMIAAW, "evmwlumiaaw", MISC, spe_evmwlumiaaw)
1256 BU_SPE_2 (EVMWLUMIANW, "evmwlumianw", MISC, spe_evmwlumianw)
1257 BU_SPE_2 (EVMWLUSIAAW, "evmwlusiaaw", MISC, spe_evmwlusiaaw)
1258 BU_SPE_2 (EVMWLUSIANW, "evmwlusianw", MISC, spe_evmwlusianw)
1259 BU_SPE_2 (EVMWSMF, "evmwsmf", MISC, spe_evmwsmf)
1260 BU_SPE_2 (EVMWSMFA, "evmwsmfa", MISC, spe_evmwsmfa)
1261 BU_SPE_2 (EVMWSMFAA, "evmwsmfaa", MISC, spe_evmwsmfaa)
1262 BU_SPE_2 (EVMWSMFAN, "evmwsmfan", MISC, spe_evmwsmfan)
1263 BU_SPE_2 (EVMWSMI, "evmwsmi", MISC, spe_evmwsmi)
1264 BU_SPE_2 (EVMWSMIA, "evmwsmia", MISC, spe_evmwsmia)
1265 BU_SPE_2 (EVMWSMIAA, "evmwsmiaa", MISC, spe_evmwsmiaa)
1266 BU_SPE_2 (EVMWSMIAN, "evmwsmian", MISC, spe_evmwsmian)
1267 BU_SPE_2 (EVMWSSF, "evmwssf", MISC, spe_evmwssf)
1268 BU_SPE_2 (EVMWSSFA, "evmwssfa", MISC, spe_evmwssfa)
1269 BU_SPE_2 (EVMWSSFAA, "evmwssfaa", MISC, spe_evmwssfaa)
1270 BU_SPE_2 (EVMWSSFAN, "evmwssfan", MISC, spe_evmwssfan)
1271 BU_SPE_2 (EVMWUMI, "evmwumi", MISC, spe_evmwumi)
1272 BU_SPE_2 (EVMWUMIA, "evmwumia", MISC, spe_evmwumia)
1273 BU_SPE_2 (EVMWUMIAA, "evmwumiaa", MISC, spe_evmwumiaa)
1274 BU_SPE_2 (EVMWUMIAN, "evmwumian", MISC, spe_evmwumian)
1275 BU_SPE_2 (EVNAND, "evnand", MISC, spe_evnand)
1276 BU_SPE_2 (EVNOR, "evnor", MISC, spe_evnor)
1277 BU_SPE_2 (EVOR, "evor", MISC, spe_evor)
1278 BU_SPE_2 (EVORC, "evorc", MISC, spe_evorc)
1279 BU_SPE_2 (EVRLW, "evrlw", MISC, spe_evrlw)
1280 BU_SPE_2 (EVSLW, "evslw", MISC, spe_evslw)
1281 BU_SPE_2 (EVSRWS, "evsrws", MISC, spe_evsrws)
1282 BU_SPE_2 (EVSRWU, "evsrwu", MISC, spe_evsrwu)
1283 BU_SPE_2 (EVSUBFW, "evsubfw", MISC, subv2si3)
1285 /* SPE binary operations expecting a 5-bit unsigned literal. */
1286 BU_SPE_2 (EVADDIW, "evaddiw", MISC, spe_evaddiw)
1288 BU_SPE_2 (EVRLWI, "evrlwi", MISC, spe_evrlwi)
1289 BU_SPE_2 (EVSLWI, "evslwi", MISC, spe_evslwi)
1290 BU_SPE_2 (EVSRWIS, "evsrwis", MISC, spe_evsrwis)
1291 BU_SPE_2 (EVSRWIU, "evsrwiu", MISC, spe_evsrwiu)
1292 BU_SPE_2 (EVSUBIFW, "evsubifw", MISC, spe_evsubifw)
1293 BU_SPE_2 (EVMWHSSFAA, "evmwhssfaa", MISC, spe_evmwhssfaa)
1294 BU_SPE_2 (EVMWHSSMAA, "evmwhssmaa", MISC, spe_evmwhssmaa)
1295 BU_SPE_2 (EVMWHSMFAA, "evmwhsmfaa", MISC, spe_evmwhsmfaa)
1296 BU_SPE_2 (EVMWHSMIAA, "evmwhsmiaa", MISC, spe_evmwhsmiaa)
1297 BU_SPE_2 (EVMWHUSIAA, "evmwhusiaa", MISC, spe_evmwhusiaa)
1298 BU_SPE_2 (EVMWHUMIAA, "evmwhumiaa", MISC, spe_evmwhumiaa)
1299 BU_SPE_2 (EVMWHSSFAN, "evmwhssfan", MISC, spe_evmwhssfan)
1300 BU_SPE_2 (EVMWHSSIAN, "evmwhssian", MISC, spe_evmwhssian)
1301 BU_SPE_2 (EVMWHSMFAN, "evmwhsmfan", MISC, spe_evmwhsmfan)
1302 BU_SPE_2 (EVMWHSMIAN, "evmwhsmian", MISC, spe_evmwhsmian)
1303 BU_SPE_2 (EVMWHUSIAN, "evmwhusian", MISC, spe_evmwhusian)
1304 BU_SPE_2 (EVMWHUMIAN, "evmwhumian", MISC, spe_evmwhumian)
1305 BU_SPE_2 (EVMWHGSSFAA, "evmwhgssfaa", MISC, spe_evmwhgssfaa)
1306 BU_SPE_2 (EVMWHGSMFAA, "evmwhgsmfaa", MISC, spe_evmwhgsmfaa)
1307 BU_SPE_2 (EVMWHGSMIAA, "evmwhgsmiaa", MISC, spe_evmwhgsmiaa)
1308 BU_SPE_2 (EVMWHGUMIAA, "evmwhgumiaa", MISC, spe_evmwhgumiaa)
1309 BU_SPE_2 (EVMWHGSSFAN, "evmwhgssfan", MISC, spe_evmwhgssfan)
1310 BU_SPE_2 (EVMWHGSMFAN, "evmwhgsmfan", MISC, spe_evmwhgsmfan)
1311 BU_SPE_2 (EVMWHGSMIAN, "evmwhgsmian", MISC, spe_evmwhgsmian)
1312 BU_SPE_2 (EVMWHGUMIAN, "evmwhgumian", MISC, spe_evmwhgumian)
1313 BU_SPE_2 (BRINC, "brinc", MISC, spe_brinc)
1314 BU_SPE_2 (EVXOR, "evxor", MISC, xorv2si3)
1316 /* SPE predicate builtins. */
1317 BU_SPE_P (EVCMPEQ, "evcmpeq", MISC, spe_evcmpeq)
1318 BU_SPE_P (EVCMPGTS, "evcmpgts", MISC, spe_evcmpgts)
1319 BU_SPE_P (EVCMPGTU, "evcmpgtu", MISC, spe_evcmpgtu)
1320 BU_SPE_P (EVCMPLTS, "evcmplts", MISC, spe_evcmplts)
1321 BU_SPE_P (EVCMPLTU, "evcmpltu", MISC, spe_evcmpltu)
1322 BU_SPE_P (EVFSCMPEQ, "evfscmpeq", MISC, spe_evfscmpeq)
1323 BU_SPE_P (EVFSCMPGT, "evfscmpgt", MISC, spe_evfscmpgt)
1324 BU_SPE_P (EVFSCMPLT, "evfscmplt", MISC, spe_evfscmplt)
1325 BU_SPE_P (EVFSTSTEQ, "evfststeq", MISC, spe_evfststeq)
1326 BU_SPE_P (EVFSTSTGT, "evfststgt", MISC, spe_evfststgt)
1327 BU_SPE_P (EVFSTSTLT, "evfststlt", MISC, spe_evfststlt)
1329 /* SPE evsel builtins. */
1330 BU_SPE_E (EVSEL_CMPGTS, "evsel_gts", MISC, spe_evcmpgts)
1331 BU_SPE_E (EVSEL_CMPGTU, "evsel_gtu", MISC, spe_evcmpgtu)
1332 BU_SPE_E (EVSEL_CMPLTS, "evsel_lts", MISC, spe_evcmplts)
1333 BU_SPE_E (EVSEL_CMPLTU, "evsel_ltu", MISC, spe_evcmpltu)
1334 BU_SPE_E (EVSEL_CMPEQ, "evsel_eq", MISC, spe_evcmpeq)
1335 BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt", MISC, spe_evfscmpgt)
1336 BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt", MISC, spe_evfscmplt)
1337 BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq", MISC, spe_evfscmpeq)
1338 BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC, spe_evfststgt)
1339 BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC, spe_evfststlt)
1340 BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC, spe_evfststeq)
1342 BU_SPE_1 (EVABS, "evabs", CONST, absv2si2)
1343 BU_SPE_1 (EVADDSMIAAW, "evaddsmiaaw", CONST, spe_evaddsmiaaw)
1344 BU_SPE_1 (EVADDSSIAAW, "evaddssiaaw", CONST, spe_evaddssiaaw)
1345 BU_SPE_1 (EVADDUMIAAW, "evaddumiaaw", CONST, spe_evaddumiaaw)
1346 BU_SPE_1 (EVADDUSIAAW, "evaddusiaaw", CONST, spe_evaddusiaaw)
1347 BU_SPE_1 (EVCNTLSW, "evcntlsw", CONST, spe_evcntlsw)
1348 BU_SPE_1 (EVCNTLZW, "evcntlzw", CONST, spe_evcntlzw)
1349 BU_SPE_1 (EVEXTSB, "evextsb", CONST, spe_evextsb)
1350 BU_SPE_1 (EVEXTSH, "evextsh", CONST, spe_evextsh)
1351 BU_SPE_1 (EVFSABS, "evfsabs", CONST, spe_evfsabs)
1352 BU_SPE_1 (EVFSCFSF, "evfscfsf", CONST, spe_evfscfsf)
1353 BU_SPE_1 (EVFSCFSI, "evfscfsi", CONST, spe_evfscfsi)
1354 BU_SPE_1 (EVFSCFUF, "evfscfuf", CONST, spe_evfscfuf)
1355 BU_SPE_1 (EVFSCFUI, "evfscfui", CONST, spe_evfscfui)
1356 BU_SPE_1 (EVFSCTSF, "evfsctsf", CONST, spe_evfsctsf)
1357 BU_SPE_1 (EVFSCTSI, "evfsctsi", CONST, spe_evfsctsi)
1358 BU_SPE_1 (EVFSCTSIZ, "evfsctsiz", CONST, spe_evfsctsiz)
1359 BU_SPE_1 (EVFSCTUF, "evfsctuf", CONST, spe_evfsctuf)
1360 BU_SPE_1 (EVFSCTUI, "evfsctui", CONST, spe_evfsctui)
1361 BU_SPE_1 (EVFSCTUIZ, "evfsctuiz", CONST, spe_evfsctuiz)
1362 BU_SPE_1 (EVFSNABS, "evfsnabs", CONST, spe_evfsnabs)
1363 BU_SPE_1 (EVFSNEG, "evfsneg", CONST, spe_evfsneg)
1364 BU_SPE_1 (EVMRA, "evmra", CONST, spe_evmra)
1365 BU_SPE_1 (EVNEG, "evneg", CONST, negv2si2)
1366 BU_SPE_1 (EVRNDW, "evrndw", CONST, spe_evrndw)
1367 BU_SPE_1 (EVSUBFSMIAAW, "evsubfsmiaaw", CONST, spe_evsubfsmiaaw)
1368 BU_SPE_1 (EVSUBFSSIAAW, "evsubfssiaaw", CONST, spe_evsubfssiaaw)
1369 BU_SPE_1 (EVSUBFUMIAAW, "evsubfumiaaw", CONST, spe_evsubfumiaaw)
1370 BU_SPE_1 (EVSUBFUSIAAW, "evsubfusiaaw", CONST, spe_evsubfusiaaw)
1372 /* SPE builtins that are handled as special cases. */
1373 BU_SPE_X (EVLDD, "evldd", MISC)
1374 BU_SPE_X (EVLDDX, "evlddx", MISC)
1375 BU_SPE_X (EVLDH, "evldh", MISC)
1376 BU_SPE_X (EVLDHX, "evldhx", MISC)
1377 BU_SPE_X (EVLDW, "evldw", MISC)
1378 BU_SPE_X (EVLDWX, "evldwx", MISC)
1379 BU_SPE_X (EVLHHESPLAT, "evlhhesplat", MISC)
1380 BU_SPE_X (EVLHHESPLATX, "evlhhesplatx", MISC)
1381 BU_SPE_X (EVLHHOSSPLAT, "evlhhossplat", MISC)
1382 BU_SPE_X (EVLHHOSSPLATX, "evlhhossplatx", MISC)
1383 BU_SPE_X (EVLHHOUSPLAT, "evlhhousplat", MISC)
1384 BU_SPE_X (EVLHHOUSPLATX, "evlhhousplatx", MISC)
1385 BU_SPE_X (EVLWHE, "evlwhe", MISC)
1386 BU_SPE_X (EVLWHEX, "evlwhex", MISC)
1387 BU_SPE_X (EVLWHOS, "evlwhos", MISC)
1388 BU_SPE_X (EVLWHOSX, "evlwhosx", MISC)
1389 BU_SPE_X (EVLWHOU, "evlwhou", MISC)
1390 BU_SPE_X (EVLWHOUX, "evlwhoux", MISC)
1391 BU_SPE_X (EVLWHSPLAT, "evlwhsplat", MISC)
1392 BU_SPE_X (EVLWHSPLATX, "evlwhsplatx", MISC)
1393 BU_SPE_X (EVLWWSPLAT, "evlwwsplat", MISC)
1394 BU_SPE_X (EVLWWSPLATX, "evlwwsplatx", MISC)
1395 BU_SPE_X (EVSPLATFI, "evsplatfi", MISC)
1396 BU_SPE_X (EVSPLATI, "evsplati", MISC)
1397 BU_SPE_X (EVSTDD, "evstdd", MISC)
1398 BU_SPE_X (EVSTDDX, "evstddx", MISC)
1399 BU_SPE_X (EVSTDH, "evstdh", MISC)
1400 BU_SPE_X (EVSTDHX, "evstdhx", MISC)
1401 BU_SPE_X (EVSTDW, "evstdw", MISC)
1402 BU_SPE_X (EVSTDWX, "evstdwx", MISC)
1403 BU_SPE_X (EVSTWHE, "evstwhe", MISC)
1404 BU_SPE_X (EVSTWHEX, "evstwhex", MISC)
1405 BU_SPE_X (EVSTWHO, "evstwho", MISC)
1406 BU_SPE_X (EVSTWHOX, "evstwhox", MISC)
1407 BU_SPE_X (EVSTWWE, "evstwwe", MISC)
1408 BU_SPE_X (EVSTWWEX, "evstwwex", MISC)
1409 BU_SPE_X (EVSTWWO, "evstwwo", MISC)
1410 BU_SPE_X (EVSTWWOX, "evstwwox", MISC)
1411 BU_SPE_X (MFSPEFSCR, "mfspefscr", MISC)
1412 BU_SPE_X (MTSPEFSCR, "mtspefscr", MISC)
1415 /* Power7 builtins, that aren't VSX instructions. */
1416 BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
1417 RS6000_BTC_CONST)
1419 /* Miscellaneous builtins. */
1420 BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE,
1421 RS6000_BTC_FP)
1423 BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES,
1424 RS6000_BTC_FP)
1426 BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE,
1427 RS6000_BTC_FP)
1429 BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES,
1430 RS6000_BTC_FP)
1432 /* Darwin CfString builtin. */
1433 BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS,
1434 RS6000_BTC_MISC)