altivec.h (vec_adde): New define.
[gcc.git] / gcc / config / rs6000 / rs6000-builtin.def
1 /* Builtin functions for rs6000/powerpc.
2 Copyright (C) 2009-2015 Free Software Foundation, Inc.
3 Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
4
5 This file is part of GCC.
6
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.
11
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.
16
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.
20
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/>. */
25
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_H -- HTM builtins
34 RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins
35 RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
36 RS6000_BUILTIN_S -- SPE predicate builtins
37 RS6000_BUILTIN_X -- special builtins
38
39 Each of the above macros takes 4 arguments:
40 ENUM Enumeration name
41 NAME String literal for the name
42 MASK Mask of bits that indicate which options enables the builtin
43 ATTR builtin attribute information.
44 ICODE Insn code of the function that implents the builtin. */
45
46 #ifndef RS6000_BUILTIN_1
47 #error "RS6000_BUILTIN_1 is not defined."
48 #endif
49
50 #ifndef RS6000_BUILTIN_2
51 #error "RS6000_BUILTIN_2 is not defined."
52 #endif
53
54 #ifndef RS6000_BUILTIN_3
55 #error "RS6000_BUILTIN_3 is not defined."
56 #endif
57
58 #ifndef RS6000_BUILTIN_A
59 #error "RS6000_BUILTIN_A is not defined."
60 #endif
61
62 #ifndef RS6000_BUILTIN_D
63 #error "RS6000_BUILTIN_D is not defined."
64 #endif
65
66 #ifndef RS6000_BUILTIN_E
67 #error "RS6000_BUILTIN_E is not defined."
68 #endif
69
70 #ifndef RS6000_BUILTIN_H
71 #error "RS6000_BUILTIN_H is not defined."
72 #endif
73
74 #ifndef RS6000_BUILTIN_P
75 #error "RS6000_BUILTIN_P is not defined."
76 #endif
77
78 #ifndef RS6000_BUILTIN_Q
79 #error "RS6000_BUILTIN_Q is not defined."
80 #endif
81
82 #ifndef RS6000_BUILTIN_S
83 #error "RS6000_BUILTIN_S is not defined."
84 #endif
85
86 #ifndef RS6000_BUILTIN_X
87 #error "RS6000_BUILTIN_X is not defined."
88 #endif
89
90 #ifndef BU_AV_1
91 /* Define convenience macros using token pasting to allow fitting everything in
92 one line. */
93
94 /* Altivec convenience macros. */
95 #define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE) \
96 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
97 "__builtin_altivec_" NAME, /* NAME */ \
98 RS6000_BTM_ALTIVEC, /* MASK */ \
99 (RS6000_BTC_ ## ATTR /* ATTR */ \
100 | RS6000_BTC_UNARY), \
101 CODE_FOR_ ## ICODE) /* ICODE */
102
103 #define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE) \
104 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
105 "__builtin_altivec_" NAME, /* NAME */ \
106 RS6000_BTM_ALTIVEC, /* MASK */ \
107 (RS6000_BTC_ ## ATTR /* ATTR */ \
108 | RS6000_BTC_BINARY), \
109 CODE_FOR_ ## ICODE) /* ICODE */
110
111 #define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE) \
112 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
113 "__builtin_altivec_" NAME, /* NAME */ \
114 RS6000_BTM_ALTIVEC, /* MASK */ \
115 (RS6000_BTC_ ## ATTR /* ATTR */ \
116 | RS6000_BTC_TERNARY), \
117 CODE_FOR_ ## ICODE) /* ICODE */
118
119 #define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE) \
120 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
121 "__builtin_altivec_" NAME, /* NAME */ \
122 RS6000_BTM_ALTIVEC, /* MASK */ \
123 (RS6000_BTC_ ## ATTR /* ATTR */ \
124 | RS6000_BTC_ABS), \
125 CODE_FOR_ ## ICODE) /* ICODE */
126
127 #define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE) \
128 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
129 "__builtin_altivec_" NAME, /* NAME */ \
130 RS6000_BTM_ALTIVEC, /* MASK */ \
131 (RS6000_BTC_ ## ATTR /* ATTR */ \
132 | RS6000_BTC_DST), \
133 CODE_FOR_ ## ICODE) /* ICODE */
134
135 #define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE) \
136 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
137 "__builtin_altivec_" NAME, /* NAME */ \
138 RS6000_BTM_ALTIVEC, /* MASK */ \
139 (RS6000_BTC_ ## ATTR /* ATTR */ \
140 | RS6000_BTC_PREDICATE), \
141 CODE_FOR_ ## ICODE) /* ICODE */
142
143 #define BU_ALTIVEC_X(ENUM, NAME, ATTR) \
144 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
145 "__builtin_altivec_" NAME, /* NAME */ \
146 RS6000_BTM_ALTIVEC, /* MASK */ \
147 (RS6000_BTC_ ## ATTR /* ATTR */ \
148 | RS6000_BTC_SPECIAL), \
149 CODE_FOR_nothing) /* ICODE */
150
151 #define BU_ALTIVEC_C(ENUM, NAME, ATTR) \
152 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
153 "__builtin_altivec_" NAME, /* NAME */ \
154 (RS6000_BTM_ALTIVEC /* MASK */ \
155 | RS6000_BTM_CELL), \
156 (RS6000_BTC_ ## ATTR /* ATTR */ \
157 | RS6000_BTC_SPECIAL), \
158 CODE_FOR_nothing) /* ICODE */
159
160 /* Altivec overloaded builtin function macros. */
161 #define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME) \
162 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
163 "__builtin_vec_" NAME, /* NAME */ \
164 RS6000_BTM_ALTIVEC, /* MASK */ \
165 (RS6000_BTC_OVERLOADED /* ATTR */ \
166 | RS6000_BTC_UNARY), \
167 CODE_FOR_nothing) /* ICODE */
168
169 #define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME) \
170 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
171 "__builtin_vec_" NAME, /* NAME */ \
172 RS6000_BTM_ALTIVEC, /* MASK */ \
173 (RS6000_BTC_OVERLOADED /* ATTR */ \
174 | RS6000_BTC_BINARY), \
175 CODE_FOR_nothing) /* ICODE */
176
177 #define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME) \
178 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
179 "__builtin_vec_" NAME, /* NAME */ \
180 RS6000_BTM_ALTIVEC, /* MASK */ \
181 (RS6000_BTC_OVERLOADED /* ATTR */ \
182 | RS6000_BTC_TERNARY), \
183 CODE_FOR_nothing) /* ICODE */
184
185 #define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME) \
186 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
187 "__builtin_vec_" NAME, /* NAME */ \
188 RS6000_BTM_ALTIVEC, /* MASK */ \
189 (RS6000_BTC_OVERLOADED /* ATTR */ \
190 | RS6000_BTC_ABS), \
191 CODE_FOR_nothing) /* ICODE */
192
193 #define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME) \
194 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
195 "__builtin_vec_" NAME, /* NAME */ \
196 RS6000_BTM_ALTIVEC, /* MASK */ \
197 (RS6000_BTC_OVERLOADED /* ATTR */ \
198 | RS6000_BTC_DST), \
199 CODE_FOR_nothing) /* ICODE */
200
201 #define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME) \
202 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
203 "__builtin_vec_" NAME, /* NAME */ \
204 RS6000_BTM_ALTIVEC, /* MASK */ \
205 (RS6000_BTC_OVERLOADED /* ATTR */ \
206 | RS6000_BTC_PREDICATE), \
207 CODE_FOR_nothing) /* ICODE */
208
209 #define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME) \
210 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
211 "__builtin_vec_" NAME, /* NAME */ \
212 RS6000_BTM_ALTIVEC, /* MASK */ \
213 (RS6000_BTC_OVERLOADED /* ATTR */ \
214 | RS6000_BTC_SPECIAL), \
215 CODE_FOR_nothing) /* ICODE */
216
217 /* VSX convenience macros. */
218 #define BU_VSX_1(ENUM, NAME, ATTR, ICODE) \
219 RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
220 "__builtin_vsx_" NAME, /* NAME */ \
221 RS6000_BTM_VSX, /* MASK */ \
222 (RS6000_BTC_ ## ATTR /* ATTR */ \
223 | RS6000_BTC_UNARY), \
224 CODE_FOR_ ## ICODE) /* ICODE */
225
226 #define BU_VSX_2(ENUM, NAME, ATTR, ICODE) \
227 RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
228 "__builtin_vsx_" NAME, /* NAME */ \
229 RS6000_BTM_VSX, /* MASK */ \
230 (RS6000_BTC_ ## ATTR /* ATTR */ \
231 | RS6000_BTC_BINARY), \
232 CODE_FOR_ ## ICODE) /* ICODE */
233
234 #define BU_VSX_3(ENUM, NAME, ATTR, ICODE) \
235 RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
236 "__builtin_vsx_" NAME, /* NAME */ \
237 RS6000_BTM_VSX, /* MASK */ \
238 (RS6000_BTC_ ## ATTR /* ATTR */ \
239 | RS6000_BTC_TERNARY), \
240 CODE_FOR_ ## ICODE) /* ICODE */
241
242 #define BU_VSX_A(ENUM, NAME, ATTR, ICODE) \
243 RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
244 "__builtin_vsx_" NAME, /* NAME */ \
245 RS6000_BTM_VSX, /* MASK */ \
246 (RS6000_BTC_ ## ATTR /* ATTR */ \
247 | RS6000_BTC_ABS), \
248 CODE_FOR_ ## ICODE) /* ICODE */
249
250 #define BU_VSX_P(ENUM, NAME, ATTR, ICODE) \
251 RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
252 "__builtin_vsx_" NAME, /* NAME */ \
253 RS6000_BTM_VSX, /* MASK */ \
254 (RS6000_BTC_ ## ATTR /* ATTR */ \
255 | RS6000_BTC_PREDICATE), \
256 CODE_FOR_ ## ICODE) /* ICODE */
257
258 #define BU_VSX_X(ENUM, NAME, ATTR) \
259 RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
260 "__builtin_vsx_" NAME, /* NAME */ \
261 RS6000_BTM_VSX, /* MASK */ \
262 (RS6000_BTC_ ## ATTR /* ATTR */ \
263 | RS6000_BTC_SPECIAL), \
264 CODE_FOR_nothing) /* ICODE */
265
266 /* VSX overloaded builtin function macros. */
267 #define BU_VSX_OVERLOAD_1(ENUM, NAME) \
268 RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
269 "__builtin_vec_" NAME, /* NAME */ \
270 RS6000_BTM_VSX, /* MASK */ \
271 (RS6000_BTC_OVERLOADED /* ATTR */ \
272 | RS6000_BTC_UNARY), \
273 CODE_FOR_nothing) /* ICODE */
274
275 #define BU_VSX_OVERLOAD_2(ENUM, NAME) \
276 RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
277 "__builtin_vec_" NAME, /* NAME */ \
278 RS6000_BTM_VSX, /* MASK */ \
279 (RS6000_BTC_OVERLOADED /* ATTR */ \
280 | RS6000_BTC_BINARY), \
281 CODE_FOR_nothing) /* ICODE */
282
283 #define BU_VSX_OVERLOAD_3(ENUM, NAME) \
284 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
285 "__builtin_vec_" NAME, /* NAME */ \
286 RS6000_BTM_VSX, /* MASK */ \
287 (RS6000_BTC_OVERLOADED /* ATTR */ \
288 | RS6000_BTC_TERNARY), \
289 CODE_FOR_nothing) /* ICODE */
290
291 /* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names
292 instead of __builtin_vec. */
293 #define BU_VSX_OVERLOAD_3V(ENUM, NAME) \
294 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
295 "__builtin_vsx_" NAME, /* NAME */ \
296 RS6000_BTM_VSX, /* MASK */ \
297 (RS6000_BTC_OVERLOADED /* ATTR */ \
298 | RS6000_BTC_TERNARY), \
299 CODE_FOR_nothing) /* ICODE */
300
301 #define BU_VSX_OVERLOAD_X(ENUM, NAME) \
302 RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
303 "__builtin_vec_" NAME, /* NAME */ \
304 RS6000_BTM_VSX, /* MASK */ \
305 (RS6000_BTC_OVERLOADED /* ATTR */ \
306 | RS6000_BTC_SPECIAL), \
307 CODE_FOR_nothing) /* ICODE */
308
309 /* ISA 2.07 (power8) vector convenience macros. */
310 /* For the instructions that are encoded as altivec instructions use
311 __builtin_altivec_ as the builtin name. */
312 #define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE) \
313 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
314 "__builtin_altivec_" NAME, /* NAME */ \
315 RS6000_BTM_P8_VECTOR, /* MASK */ \
316 (RS6000_BTC_ ## ATTR /* ATTR */ \
317 | RS6000_BTC_UNARY), \
318 CODE_FOR_ ## ICODE) /* ICODE */
319
320 #define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE) \
321 RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
322 "__builtin_altivec_" NAME, /* NAME */ \
323 RS6000_BTM_P8_VECTOR, /* MASK */ \
324 (RS6000_BTC_ ## ATTR /* ATTR */ \
325 | RS6000_BTC_BINARY), \
326 CODE_FOR_ ## ICODE) /* ICODE */
327
328 #define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE) \
329 RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
330 "__builtin_altivec_" NAME, /* NAME */ \
331 RS6000_BTM_P8_VECTOR, /* MASK */ \
332 (RS6000_BTC_ ## ATTR /* ATTR */ \
333 | RS6000_BTC_TERNARY), \
334 CODE_FOR_ ## ICODE) /* ICODE */
335
336 #define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE) \
337 RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
338 "__builtin_altivec_" NAME, /* NAME */ \
339 RS6000_BTM_P8_VECTOR, /* MASK */ \
340 (RS6000_BTC_ ## ATTR /* ATTR */ \
341 | RS6000_BTC_PREDICATE), \
342 CODE_FOR_ ## ICODE) /* ICODE */
343
344 /* For the instructions encoded as VSX instructions use __builtin_vsx as the
345 builtin name. */
346 #define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE) \
347 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
348 "__builtin_vsx_" NAME, /* NAME */ \
349 RS6000_BTM_P8_VECTOR, /* MASK */ \
350 (RS6000_BTC_ ## ATTR /* ATTR */ \
351 | RS6000_BTC_UNARY), \
352 CODE_FOR_ ## ICODE) /* ICODE */
353
354 #define BU_P8V_OVERLOAD_1(ENUM, NAME) \
355 RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
356 "__builtin_vec_" NAME, /* NAME */ \
357 RS6000_BTM_P8_VECTOR, /* MASK */ \
358 (RS6000_BTC_OVERLOADED /* ATTR */ \
359 | RS6000_BTC_UNARY), \
360 CODE_FOR_nothing) /* ICODE */
361
362 #define BU_P8V_OVERLOAD_2(ENUM, NAME) \
363 RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
364 "__builtin_vec_" NAME, /* NAME */ \
365 RS6000_BTM_P8_VECTOR, /* MASK */ \
366 (RS6000_BTC_OVERLOADED /* ATTR */ \
367 | RS6000_BTC_BINARY), \
368 CODE_FOR_nothing) /* ICODE */
369
370 #define BU_P8V_OVERLOAD_3(ENUM, NAME) \
371 RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
372 "__builtin_vec_" NAME, /* NAME */ \
373 RS6000_BTM_P8_VECTOR, /* MASK */ \
374 (RS6000_BTC_OVERLOADED /* ATTR */ \
375 | RS6000_BTC_TERNARY), \
376 CODE_FOR_nothing) /* ICODE */
377
378 /* Crypto convenience macros. */
379 #define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE) \
380 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
381 "__builtin_crypto_" NAME, /* NAME */ \
382 RS6000_BTM_CRYPTO, /* MASK */ \
383 (RS6000_BTC_ ## ATTR /* ATTR */ \
384 | RS6000_BTC_UNARY), \
385 CODE_FOR_ ## ICODE) /* ICODE */
386
387 #define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE) \
388 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
389 "__builtin_crypto_" NAME, /* NAME */ \
390 RS6000_BTM_CRYPTO, /* MASK */ \
391 (RS6000_BTC_ ## ATTR /* ATTR */ \
392 | RS6000_BTC_BINARY), \
393 CODE_FOR_ ## ICODE) /* ICODE */
394
395 #define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE) \
396 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
397 "__builtin_crypto_" NAME, /* NAME */ \
398 RS6000_BTM_P8_VECTOR, /* MASK */ \
399 (RS6000_BTC_ ## ATTR /* ATTR */ \
400 | RS6000_BTC_BINARY), \
401 CODE_FOR_ ## ICODE) /* ICODE */
402
403 #define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE) \
404 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
405 "__builtin_crypto_" NAME, /* NAME */ \
406 RS6000_BTM_CRYPTO, /* MASK */ \
407 (RS6000_BTC_ ## ATTR /* ATTR */ \
408 | RS6000_BTC_TERNARY), \
409 CODE_FOR_ ## ICODE) /* ICODE */
410
411 #define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE) \
412 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
413 "__builtin_crypto_" NAME, /* NAME */ \
414 RS6000_BTM_P8_VECTOR, /* MASK */ \
415 (RS6000_BTC_ ## ATTR /* ATTR */ \
416 | RS6000_BTC_TERNARY), \
417 CODE_FOR_ ## ICODE) /* ICODE */
418
419 #define BU_CRYPTO_OVERLOAD_1(ENUM, NAME) \
420 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
421 "__builtin_crypto_" NAME, /* NAME */ \
422 RS6000_BTM_CRYPTO, /* MASK */ \
423 (RS6000_BTC_OVERLOADED /* ATTR */ \
424 | RS6000_BTC_UNARY), \
425 CODE_FOR_nothing) /* ICODE */
426
427 #define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME) \
428 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
429 "__builtin_crypto_" NAME, /* NAME */ \
430 RS6000_BTM_P8_VECTOR, /* MASK */ \
431 (RS6000_BTC_OVERLOADED /* ATTR */ \
432 | RS6000_BTC_BINARY), \
433 CODE_FOR_nothing) /* ICODE */
434
435 #define BU_CRYPTO_OVERLOAD_3(ENUM, NAME) \
436 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
437 "__builtin_crypto_" NAME, /* NAME */ \
438 RS6000_BTM_CRYPTO, /* MASK */ \
439 (RS6000_BTC_OVERLOADED /* ATTR */ \
440 | RS6000_BTC_TERNARY), \
441 CODE_FOR_nothing) /* ICODE */
442
443 #define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME) \
444 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
445 "__builtin_crypto_" NAME, /* NAME */ \
446 RS6000_BTM_P8_VECTOR, /* MASK */ \
447 (RS6000_BTC_OVERLOADED /* ATTR */ \
448 | RS6000_BTC_TERNARY), \
449 CODE_FOR_nothing) /* ICODE */
450
451 /* HTM convenience macros. */
452 #define BU_HTM_0(ENUM, NAME, ATTR, ICODE) \
453 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
454 "__builtin_" NAME, /* NAME */ \
455 RS6000_BTM_HTM, /* MASK */ \
456 RS6000_BTC_ ## ATTR, /* ATTR */ \
457 CODE_FOR_ ## ICODE) /* ICODE */
458
459 #define BU_HTM_1(ENUM, NAME, ATTR, ICODE) \
460 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
461 "__builtin_" NAME, /* NAME */ \
462 RS6000_BTM_HTM, /* MASK */ \
463 (RS6000_BTC_ ## ATTR /* ATTR */ \
464 | RS6000_BTC_UNARY), \
465 CODE_FOR_ ## ICODE) /* ICODE */
466
467 #define BU_HTM_2(ENUM, NAME, ATTR, ICODE) \
468 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
469 "__builtin_" NAME, /* NAME */ \
470 RS6000_BTM_HTM, /* MASK */ \
471 (RS6000_BTC_ ## ATTR /* ATTR */ \
472 | RS6000_BTC_BINARY), \
473 CODE_FOR_ ## ICODE) /* ICODE */
474
475 #define BU_HTM_3(ENUM, NAME, ATTR, ICODE) \
476 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
477 "__builtin_" NAME, /* NAME */ \
478 RS6000_BTM_HTM, /* MASK */ \
479 (RS6000_BTC_ ## ATTR /* ATTR */ \
480 | RS6000_BTC_TERNARY), \
481 CODE_FOR_ ## ICODE) /* ICODE */
482
483 #define BU_HTM_V1(ENUM, NAME, ATTR, ICODE) \
484 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
485 "__builtin_" NAME, /* NAME */ \
486 RS6000_BTM_HTM, /* MASK */ \
487 (RS6000_BTC_ ## ATTR /* ATTR */ \
488 | RS6000_BTC_UNARY \
489 | RS6000_BTC_VOID), \
490 CODE_FOR_ ## ICODE) /* ICODE */
491
492 /* SPE convenience macros. */
493 #define BU_SPE_1(ENUM, NAME, ATTR, ICODE) \
494 RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
495 "__builtin_spe_" NAME, /* NAME */ \
496 RS6000_BTM_SPE, /* MASK */ \
497 (RS6000_BTC_ ## ATTR /* ATTR */ \
498 | RS6000_BTC_UNARY), \
499 CODE_FOR_ ## ICODE) /* ICODE */
500
501 #define BU_SPE_2(ENUM, NAME, ATTR, ICODE) \
502 RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
503 "__builtin_spe_" NAME, /* NAME */ \
504 RS6000_BTM_SPE, /* MASK */ \
505 (RS6000_BTC_ ## ATTR /* ATTR */ \
506 | RS6000_BTC_BINARY), \
507 CODE_FOR_ ## ICODE) /* ICODE */
508
509 #define BU_SPE_3(ENUM, NAME, ATTR, ICODE) \
510 RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
511 "__builtin_spe_" NAME, /* NAME */ \
512 RS6000_BTM_SPE, /* MASK */ \
513 (RS6000_BTC_ ## ATTR /* ATTR */ \
514 | RS6000_BTC_TERNARY), \
515 CODE_FOR_ ## ICODE) /* ICODE */
516
517 #define BU_SPE_E(ENUM, NAME, ATTR, ICODE) \
518 RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
519 "__builtin_spe_" NAME, /* NAME */ \
520 RS6000_BTM_SPE, /* MASK */ \
521 (RS6000_BTC_ ## ATTR /* ATTR */ \
522 | RS6000_BTC_EVSEL), \
523 CODE_FOR_ ## ICODE) /* ICODE */
524
525 #define BU_SPE_P(ENUM, NAME, ATTR, ICODE) \
526 RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
527 "__builtin_spe_" NAME, /* NAME */ \
528 RS6000_BTM_SPE, /* MASK */ \
529 (RS6000_BTC_ ## ATTR /* ATTR */ \
530 | RS6000_BTC_PREDICATE), \
531 CODE_FOR_ ## ICODE) /* ICODE */
532
533 #define BU_SPE_X(ENUM, NAME, ATTR) \
534 RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM, /* ENUM */ \
535 "__builtin_spe_" NAME, /* NAME */ \
536 RS6000_BTM_SPE, /* MASK */ \
537 (RS6000_BTC_ ## ATTR /* ATTR */ \
538 | RS6000_BTC_SPECIAL), \
539 CODE_FOR_nothing) /* ICODE */
540
541 /* Paired floating point convenience macros. */
542 #define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE) \
543 RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
544 "__builtin_paired_" NAME, /* NAME */ \
545 RS6000_BTM_PAIRED, /* MASK */ \
546 (RS6000_BTC_ ## ATTR /* ATTR */ \
547 | RS6000_BTC_UNARY), \
548 CODE_FOR_ ## ICODE) /* ICODE */
549
550 #define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE) \
551 RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
552 "__builtin_paired_" NAME, /* NAME */ \
553 RS6000_BTM_PAIRED, /* MASK */ \
554 (RS6000_BTC_ ## ATTR /* ATTR */ \
555 | RS6000_BTC_BINARY), \
556 CODE_FOR_ ## ICODE) /* ICODE */
557
558 #define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE) \
559 RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
560 "__builtin_paired_" NAME, /* NAME */ \
561 RS6000_BTM_PAIRED, /* MASK */ \
562 (RS6000_BTC_ ## ATTR /* ATTR */ \
563 | RS6000_BTC_TERNARY), \
564 CODE_FOR_ ## ICODE) /* ICODE */
565
566 #define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE) \
567 RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
568 "__builtin_paired_" NAME, /* NAME */ \
569 RS6000_BTM_PAIRED, /* MASK */ \
570 (RS6000_BTC_ ## ATTR /* ATTR */ \
571 | RS6000_BTC_PREDICATE), \
572 CODE_FOR_ ## ICODE) /* ICODE */
573
574 #define BU_PAIRED_X(ENUM, NAME, ATTR) \
575 RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
576 "__builtin_paired_" NAME, /* NAME */ \
577 RS6000_BTM_PAIRED, /* MASK */ \
578 (RS6000_BTC_ ## ATTR /* ATTR */ \
579 | RS6000_BTC_SPECIAL), \
580 CODE_FOR_nothing) /* ICODE */
581
582 #define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR) \
583 RS6000_BUILTIN_X (ENUM, /* ENUM */ \
584 NAME, /* NAME */ \
585 MASK, /* MASK */ \
586 (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \
587 CODE_FOR_nothing) /* ICODE */
588
589
590 /* Decimal floating point builtins for instructions. */
591 #define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \
592 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
593 "__builtin_" NAME, /* NAME */ \
594 RS6000_BTM_DFP, /* MASK */ \
595 (RS6000_BTC_ ## ATTR /* ATTR */ \
596 | RS6000_BTC_UNARY), \
597 CODE_FOR_ ## ICODE) /* ICODE */
598
599 #define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \
600 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
601 "__builtin_" NAME, /* NAME */ \
602 RS6000_BTM_DFP, /* MASK */ \
603 (RS6000_BTC_ ## ATTR /* ATTR */ \
604 | RS6000_BTC_BINARY), \
605 CODE_FOR_ ## ICODE) /* ICODE */
606
607
608 /* Miscellaneous builtins for instructions added in ISA 2.06. These
609 instructions don't require either the DFP or VSX options, just the basic ISA
610 2.06 (popcntd) enablement since they operate on general purpose
611 registers. */
612 #define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \
613 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
614 "__builtin_" NAME, /* NAME */ \
615 RS6000_BTM_POPCNTD, /* MASK */ \
616 (RS6000_BTC_ ## ATTR /* ATTR */ \
617 | RS6000_BTC_UNARY), \
618 CODE_FOR_ ## ICODE) /* ICODE */
619
620 #define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \
621 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
622 "__builtin_" NAME, /* NAME */ \
623 RS6000_BTM_POPCNTD, /* MASK */ \
624 (RS6000_BTC_ ## ATTR /* ATTR */ \
625 | RS6000_BTC_BINARY), \
626 CODE_FOR_ ## ICODE) /* ICODE */
627
628
629 /* Miscellaneous builtins for instructions added in ISA 2.07. These
630 instructions do require the ISA 2.07 vector support, but they aren't vector
631 instructions. */
632 #define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \
633 RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
634 "__builtin_" NAME, /* NAME */ \
635 RS6000_BTM_P8_VECTOR, /* MASK */ \
636 (RS6000_BTC_ ## ATTR /* ATTR */ \
637 | RS6000_BTC_TERNARY), \
638 CODE_FOR_ ## ICODE) /* ICODE */
639
640 /* 128-bit long double floating point builtins. */
641 #define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \
642 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
643 "__builtin_" NAME, /* NAME */ \
644 (RS6000_BTM_HARD_FLOAT /* MASK */ \
645 | RS6000_BTM_LDBL128), \
646 (RS6000_BTC_ ## ATTR /* ATTR */ \
647 | RS6000_BTC_BINARY), \
648 CODE_FOR_ ## ICODE) /* ICODE */
649
650 #endif
651
652 /* Insure 0 is not a legitimate index. */
653 BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC)
654
655 /* 3 argument Altivec builtins. */
656 BU_ALTIVEC_3 (VMADDFP, "vmaddfp", FP, fmav4sf4)
657 BU_ALTIVEC_3 (VMHADDSHS, "vmhaddshs", SAT, altivec_vmhaddshs)
658 BU_ALTIVEC_3 (VMHRADDSHS, "vmhraddshs", SAT, altivec_vmhraddshs)
659 BU_ALTIVEC_3 (VMLADDUHM, "vmladduhm", CONST, altivec_vmladduhm)
660 BU_ALTIVEC_3 (VMSUMUBM, "vmsumubm", CONST, altivec_vmsumubm)
661 BU_ALTIVEC_3 (VMSUMMBM, "vmsummbm", CONST, altivec_vmsummbm)
662 BU_ALTIVEC_3 (VMSUMUHM, "vmsumuhm", CONST, altivec_vmsumuhm)
663 BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm)
664 BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs)
665 BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs)
666 BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4)
667 BU_ALTIVEC_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
668 BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
669 BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
670 BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
671 BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
672 BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
673 BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns)
674 BU_ALTIVEC_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
675 BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
676 BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
677 BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
678 BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
679 BU_ALTIVEC_3 (VSEL_4SF, "vsel_4sf", CONST, vector_select_v4sf)
680 BU_ALTIVEC_3 (VSEL_4SI, "vsel_4si", CONST, vector_select_v4si)
681 BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi)
682 BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi)
683 BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df)
684 BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di)
685 BU_ALTIVEC_3 (VSEL_1TI, "vsel_1ti", CONST, vector_select_v1ti)
686 BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns)
687 BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns)
688 BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns)
689 BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns)
690 BU_ALTIVEC_3 (VSEL_1TI_UNS, "vsel_1ti_uns", CONST, vector_select_v1ti_uns)
691 BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi)
692 BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi)
693 BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si)
694 BU_ALTIVEC_3 (VSLDOI_4SF, "vsldoi_4sf", CONST, altivec_vsldoi_v4sf)
695
696 /* Altivec DST builtins. */
697 BU_ALTIVEC_D (DST, "dst", MISC, altivec_dst)
698 BU_ALTIVEC_D (DSTT, "dstt", MISC, altivec_dstt)
699 BU_ALTIVEC_D (DSTST, "dstst", MISC, altivec_dstst)
700 BU_ALTIVEC_D (DSTSTT, "dststt", MISC, altivec_dststt)
701
702 /* Altivec 2 argument builtin functions. */
703 BU_ALTIVEC_2 (VADDUBM, "vaddubm", CONST, addv16qi3)
704 BU_ALTIVEC_2 (VADDUHM, "vadduhm", CONST, addv8hi3)
705 BU_ALTIVEC_2 (VADDUWM, "vadduwm", CONST, addv4si3)
706 BU_ALTIVEC_2 (VADDFP, "vaddfp", CONST, addv4sf3)
707 BU_ALTIVEC_2 (VADDCUW, "vaddcuw", CONST, altivec_vaddcuw)
708 BU_ALTIVEC_2 (VADDUBS, "vaddubs", CONST, altivec_vaddubs)
709 BU_ALTIVEC_2 (VADDSBS, "vaddsbs", CONST, altivec_vaddsbs)
710 BU_ALTIVEC_2 (VADDUHS, "vadduhs", CONST, altivec_vadduhs)
711 BU_ALTIVEC_2 (VADDSHS, "vaddshs", CONST, altivec_vaddshs)
712 BU_ALTIVEC_2 (VADDUWS, "vadduws", CONST, altivec_vadduws)
713 BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws)
714 BU_ALTIVEC_2 (VAND, "vand", CONST, andv4si3)
715 BU_ALTIVEC_2 (VANDC, "vandc", CONST, andcv4si3)
716 BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, altivec_vavgub)
717 BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, altivec_vavgsb)
718 BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, altivec_vavguh)
719 BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, altivec_vavgsh)
720 BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, altivec_vavguw)
721 BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, altivec_vavgsw)
722 BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux)
723 BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx)
724 BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp)
725 BU_ALTIVEC_2 (VCMPEQUB, "vcmpequb", CONST, vector_eqv16qi)
726 BU_ALTIVEC_2 (VCMPEQUH, "vcmpequh", CONST, vector_eqv8hi)
727 BU_ALTIVEC_2 (VCMPEQUW, "vcmpequw", CONST, vector_eqv4si)
728 BU_ALTIVEC_2 (VCMPEQFP, "vcmpeqfp", CONST, vector_eqv4sf)
729 BU_ALTIVEC_2 (VCMPGEFP, "vcmpgefp", CONST, vector_gev4sf)
730 BU_ALTIVEC_2 (VCMPGTUB, "vcmpgtub", CONST, vector_gtuv16qi)
731 BU_ALTIVEC_2 (VCMPGTSB, "vcmpgtsb", CONST, vector_gtv16qi)
732 BU_ALTIVEC_2 (VCMPGTUH, "vcmpgtuh", CONST, vector_gtuv8hi)
733 BU_ALTIVEC_2 (VCMPGTSH, "vcmpgtsh", CONST, vector_gtv8hi)
734 BU_ALTIVEC_2 (VCMPGTUW, "vcmpgtuw", CONST, vector_gtuv4si)
735 BU_ALTIVEC_2 (VCMPGTSW, "vcmpgtsw", CONST, vector_gtv4si)
736 BU_ALTIVEC_2 (VCMPGTFP, "vcmpgtfp", CONST, vector_gtv4sf)
737 BU_ALTIVEC_2 (VCTSXS, "vctsxs", CONST, altivec_vctsxs)
738 BU_ALTIVEC_2 (VCTUXS, "vctuxs", CONST, altivec_vctuxs)
739 BU_ALTIVEC_2 (VMAXUB, "vmaxub", CONST, umaxv16qi3)
740 BU_ALTIVEC_2 (VMAXSB, "vmaxsb", CONST, smaxv16qi3)
741 BU_ALTIVEC_2 (VMAXUH, "vmaxuh", CONST, umaxv8hi3)
742 BU_ALTIVEC_2 (VMAXSH, "vmaxsh", CONST, smaxv8hi3)
743 BU_ALTIVEC_2 (VMAXUW, "vmaxuw", CONST, umaxv4si3)
744 BU_ALTIVEC_2 (VMAXSW, "vmaxsw", CONST, smaxv4si3)
745 BU_ALTIVEC_2 (VMAXFP, "vmaxfp", CONST, smaxv4sf3)
746 BU_ALTIVEC_2 (VMRGHB, "vmrghb", CONST, altivec_vmrghb)
747 BU_ALTIVEC_2 (VMRGHH, "vmrghh", CONST, altivec_vmrghh)
748 BU_ALTIVEC_2 (VMRGHW, "vmrghw", CONST, altivec_vmrghw)
749 BU_ALTIVEC_2 (VMRGLB, "vmrglb", CONST, altivec_vmrglb)
750 BU_ALTIVEC_2 (VMRGLH, "vmrglh", CONST, altivec_vmrglh)
751 BU_ALTIVEC_2 (VMRGLW, "vmrglw", CONST, altivec_vmrglw)
752 BU_ALTIVEC_2 (VMINUB, "vminub", CONST, uminv16qi3)
753 BU_ALTIVEC_2 (VMINSB, "vminsb", CONST, sminv16qi3)
754 BU_ALTIVEC_2 (VMINUH, "vminuh", CONST, uminv8hi3)
755 BU_ALTIVEC_2 (VMINSH, "vminsh", CONST, sminv8hi3)
756 BU_ALTIVEC_2 (VMINUW, "vminuw", CONST, uminv4si3)
757 BU_ALTIVEC_2 (VMINSW, "vminsw", CONST, sminv4si3)
758 BU_ALTIVEC_2 (VMINFP, "vminfp", CONST, sminv4sf3)
759 BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi)
760 BU_ALTIVEC_2 (VMULEUB_UNS, "vmuleub_uns", CONST, vec_widen_umult_even_v16qi)
761 BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi)
762 BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi)
763 BU_ALTIVEC_2 (VMULEUH_UNS, "vmuleuh_uns", CONST, vec_widen_umult_even_v8hi)
764 BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi)
765 BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi)
766 BU_ALTIVEC_2 (VMULOUB_UNS, "vmuloub_uns", CONST, vec_widen_umult_odd_v16qi)
767 BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi)
768 BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi)
769 BU_ALTIVEC_2 (VMULOUH_UNS, "vmulouh_uns", CONST, vec_widen_umult_odd_v8hi)
770 BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi)
771 BU_ALTIVEC_2 (VNOR, "vnor", CONST, norv4si3)
772 BU_ALTIVEC_2 (VOR, "vor", CONST, iorv4si3)
773 BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum)
774 BU_ALTIVEC_2 (VPKUWUM, "vpkuwum", CONST, altivec_vpkuwum)
775 BU_ALTIVEC_2 (VPKPX, "vpkpx", CONST, altivec_vpkpx)
776 BU_ALTIVEC_2 (VPKSHSS, "vpkshss", CONST, altivec_vpkshss)
777 BU_ALTIVEC_2 (VPKSWSS, "vpkswss", CONST, altivec_vpkswss)
778 BU_ALTIVEC_2 (VPKUHUS, "vpkuhus", CONST, altivec_vpkuhus)
779 BU_ALTIVEC_2 (VPKSHUS, "vpkshus", CONST, altivec_vpkshus)
780 BU_ALTIVEC_2 (VPKUWUS, "vpkuwus", CONST, altivec_vpkuwus)
781 BU_ALTIVEC_2 (VPKSWUS, "vpkswus", CONST, altivec_vpkswus)
782 BU_ALTIVEC_2 (VRECIPFP, "vrecipdivfp", CONST, recipv4sf3)
783 BU_ALTIVEC_2 (VRLB, "vrlb", CONST, vrotlv16qi3)
784 BU_ALTIVEC_2 (VRLH, "vrlh", CONST, vrotlv8hi3)
785 BU_ALTIVEC_2 (VRLW, "vrlw", CONST, vrotlv4si3)
786 BU_ALTIVEC_2 (VSLB, "vslb", CONST, vashlv16qi3)
787 BU_ALTIVEC_2 (VSLH, "vslh", CONST, vashlv8hi3)
788 BU_ALTIVEC_2 (VSLW, "vslw", CONST, vashlv4si3)
789 BU_ALTIVEC_2 (VSL, "vsl", CONST, altivec_vsl)
790 BU_ALTIVEC_2 (VSLO, "vslo", CONST, altivec_vslo)
791 BU_ALTIVEC_2 (VSPLTB, "vspltb", CONST, altivec_vspltb)
792 BU_ALTIVEC_2 (VSPLTH, "vsplth", CONST, altivec_vsplth)
793 BU_ALTIVEC_2 (VSPLTW, "vspltw", CONST, altivec_vspltw)
794 BU_ALTIVEC_2 (VSRB, "vsrb", CONST, vlshrv16qi3)
795 BU_ALTIVEC_2 (VSRH, "vsrh", CONST, vlshrv8hi3)
796 BU_ALTIVEC_2 (VSRW, "vsrw", CONST, vlshrv4si3)
797 BU_ALTIVEC_2 (VSRAB, "vsrab", CONST, vashrv16qi3)
798 BU_ALTIVEC_2 (VSRAH, "vsrah", CONST, vashrv8hi3)
799 BU_ALTIVEC_2 (VSRAW, "vsraw", CONST, vashrv4si3)
800 BU_ALTIVEC_2 (VSR, "vsr", CONST, altivec_vsr)
801 BU_ALTIVEC_2 (VSRO, "vsro", CONST, altivec_vsro)
802 BU_ALTIVEC_2 (VSUBUBM, "vsububm", CONST, subv16qi3)
803 BU_ALTIVEC_2 (VSUBUHM, "vsubuhm", CONST, subv8hi3)
804 BU_ALTIVEC_2 (VSUBUWM, "vsubuwm", CONST, subv4si3)
805 BU_ALTIVEC_2 (VSUBFP, "vsubfp", CONST, subv4sf3)
806 BU_ALTIVEC_2 (VSUBCUW, "vsubcuw", CONST, altivec_vsubcuw)
807 BU_ALTIVEC_2 (VSUBUBS, "vsububs", CONST, altivec_vsububs)
808 BU_ALTIVEC_2 (VSUBSBS, "vsubsbs", CONST, altivec_vsubsbs)
809 BU_ALTIVEC_2 (VSUBUHS, "vsubuhs", CONST, altivec_vsubuhs)
810 BU_ALTIVEC_2 (VSUBSHS, "vsubshs", CONST, altivec_vsubshs)
811 BU_ALTIVEC_2 (VSUBUWS, "vsubuws", CONST, altivec_vsubuws)
812 BU_ALTIVEC_2 (VSUBSWS, "vsubsws", CONST, altivec_vsubsws)
813 BU_ALTIVEC_2 (VSUM4UBS, "vsum4ubs", CONST, altivec_vsum4ubs)
814 BU_ALTIVEC_2 (VSUM4SBS, "vsum4sbs", CONST, altivec_vsum4sbs)
815 BU_ALTIVEC_2 (VSUM4SHS, "vsum4shs", CONST, altivec_vsum4shs)
816 BU_ALTIVEC_2 (VSUM2SWS, "vsum2sws", CONST, altivec_vsum2sws)
817 BU_ALTIVEC_2 (VSUMSWS, "vsumsws", CONST, altivec_vsumsws)
818 BU_ALTIVEC_2 (VXOR, "vxor", CONST, xorv4si3)
819 BU_ALTIVEC_2 (COPYSIGN_V4SF, "copysignfp", CONST, vector_copysignv4sf3)
820
821 /* Altivec ABS functions. */
822 BU_ALTIVEC_A (ABS_V4SI, "abs_v4si", CONST, absv4si2)
823 BU_ALTIVEC_A (ABS_V8HI, "abs_v8hi", CONST, absv8hi2)
824 BU_ALTIVEC_A (ABS_V4SF, "abs_v4sf", CONST, absv4sf2)
825 BU_ALTIVEC_A (ABS_V16QI, "abs_v16qi", CONST, absv16qi2)
826 BU_ALTIVEC_A (ABSS_V4SI, "abss_v4si", SAT, altivec_abss_v4si)
827 BU_ALTIVEC_A (ABSS_V8HI, "abss_v8hi", SAT, altivec_abss_v8hi)
828 BU_ALTIVEC_A (ABSS_V16QI, "abss_v16qi", SAT, altivec_abss_v16qi)
829
830 /* 1 argument Altivec builtin functions. */
831 BU_ALTIVEC_1 (VEXPTEFP, "vexptefp", FP, altivec_vexptefp)
832 BU_ALTIVEC_1 (VLOGEFP, "vlogefp", FP, altivec_vlogefp)
833 BU_ALTIVEC_1 (VREFP, "vrefp", FP, rev4sf2)
834 BU_ALTIVEC_1 (VRFIM, "vrfim", FP, vector_floorv4sf2)
835 BU_ALTIVEC_1 (VRFIN, "vrfin", FP, altivec_vrfin)
836 BU_ALTIVEC_1 (VRFIP, "vrfip", FP, vector_ceilv4sf2)
837 BU_ALTIVEC_1 (VRFIZ, "vrfiz", FP, vector_btruncv4sf2)
838 BU_ALTIVEC_1 (VRSQRTFP, "vrsqrtfp", FP, rsqrtv4sf2)
839 BU_ALTIVEC_1 (VRSQRTEFP, "vrsqrtefp", FP, rsqrtev4sf2)
840 BU_ALTIVEC_1 (VSPLTISB, "vspltisb", CONST, altivec_vspltisb)
841 BU_ALTIVEC_1 (VSPLTISH, "vspltish", CONST, altivec_vspltish)
842 BU_ALTIVEC_1 (VSPLTISW, "vspltisw", CONST, altivec_vspltisw)
843 BU_ALTIVEC_1 (VUPKHSB, "vupkhsb", CONST, altivec_vupkhsb)
844 BU_ALTIVEC_1 (VUPKHPX, "vupkhpx", CONST, altivec_vupkhpx)
845 BU_ALTIVEC_1 (VUPKHSH, "vupkhsh", CONST, altivec_vupkhsh)
846 BU_ALTIVEC_1 (VUPKLSB, "vupklsb", CONST, altivec_vupklsb)
847 BU_ALTIVEC_1 (VUPKLPX, "vupklpx", CONST, altivec_vupklpx)
848 BU_ALTIVEC_1 (VUPKLSH, "vupklsh", CONST, altivec_vupklsh)
849
850 BU_ALTIVEC_1 (FLOAT_V4SI_V4SF, "float_sisf", FP, floatv4siv4sf2)
851 BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2)
852 BU_ALTIVEC_1 (FIX_V4SF_V4SI, "fix_sfsi", FP, fix_truncv4sfv4si2)
853 BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI, "fixuns_sfsi", FP, fixuns_truncv4sfv4si2)
854
855 /* Altivec predicate functions. */
856 BU_ALTIVEC_P (VCMPBFP_P, "vcmpbfp_p", CONST, altivec_vcmpbfp_p)
857 BU_ALTIVEC_P (VCMPEQFP_P, "vcmpeqfp_p", CONST, vector_eq_v4sf_p)
858 BU_ALTIVEC_P (VCMPGEFP_P, "vcmpgefp_p", CONST, vector_ge_v4sf_p)
859 BU_ALTIVEC_P (VCMPGTFP_P, "vcmpgtfp_p", CONST, vector_gt_v4sf_p)
860 BU_ALTIVEC_P (VCMPEQUW_P, "vcmpequw_p", CONST, vector_eq_v4si_p)
861 BU_ALTIVEC_P (VCMPGTSW_P, "vcmpgtsw_p", CONST, vector_gt_v4si_p)
862 BU_ALTIVEC_P (VCMPGTUW_P, "vcmpgtuw_p", CONST, vector_gtu_v4si_p)
863 BU_ALTIVEC_P (VCMPEQUH_P, "vcmpequh_p", CONST, vector_eq_v8hi_p)
864 BU_ALTIVEC_P (VCMPGTSH_P, "vcmpgtsh_p", CONST, vector_gt_v8hi_p)
865 BU_ALTIVEC_P (VCMPGTUH_P, "vcmpgtuh_p", CONST, vector_gtu_v8hi_p)
866 BU_ALTIVEC_P (VCMPEQUB_P, "vcmpequb_p", CONST, vector_eq_v16qi_p)
867 BU_ALTIVEC_P (VCMPGTSB_P, "vcmpgtsb_p", CONST, vector_gt_v16qi_p)
868 BU_ALTIVEC_P (VCMPGTUB_P, "vcmpgtub_p", CONST, vector_gtu_v16qi_p)
869
870 /* AltiVec builtins that are handled as special cases. */
871 BU_ALTIVEC_X (ST_INTERNAL_4si, "st_internal_4si", MEM)
872 BU_ALTIVEC_X (LD_INTERNAL_4si, "ld_internal_4si", MEM)
873 BU_ALTIVEC_X (ST_INTERNAL_8hi, "st_internal_8hi", MEM)
874 BU_ALTIVEC_X (LD_INTERNAL_8hi, "ld_internal_8hi", MEM)
875 BU_ALTIVEC_X (ST_INTERNAL_16qi, "st_internal_16qi", MEM)
876 BU_ALTIVEC_X (LD_INTERNAL_16qi, "ld_internal_16qi", MEM)
877 BU_ALTIVEC_X (ST_INTERNAL_4sf, "st_internal_16qi", MEM)
878 BU_ALTIVEC_X (LD_INTERNAL_4sf, "ld_internal_4sf", MEM)
879 BU_ALTIVEC_X (ST_INTERNAL_2df, "st_internal_4sf", MEM)
880 BU_ALTIVEC_X (LD_INTERNAL_2df, "ld_internal_2df", MEM)
881 BU_ALTIVEC_X (ST_INTERNAL_2di, "st_internal_2di", MEM)
882 BU_ALTIVEC_X (LD_INTERNAL_2di, "ld_internal_2di", MEM)
883 BU_ALTIVEC_X (ST_INTERNAL_1ti, "st_internal_1ti", MEM)
884 BU_ALTIVEC_X (LD_INTERNAL_1ti, "ld_internal_1ti", MEM)
885 BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC)
886 BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC)
887 BU_ALTIVEC_X (DSSALL, "dssall", MISC)
888 BU_ALTIVEC_X (DSS, "dss", MISC)
889 BU_ALTIVEC_X (LVSL, "lvsl", MEM)
890 BU_ALTIVEC_X (LVSR, "lvsr", MEM)
891 BU_ALTIVEC_X (LVEBX, "lvebx", MEM)
892 BU_ALTIVEC_X (LVEHX, "lvehx", MEM)
893 BU_ALTIVEC_X (LVEWX, "lvewx", MEM)
894 BU_ALTIVEC_X (LVXL, "lvxl", MEM)
895 BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", MEM)
896 BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", MEM)
897 BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", MEM)
898 BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", MEM)
899 BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", MEM)
900 BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", MEM)
901 BU_ALTIVEC_X (LVX, "lvx", MEM)
902 BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", MEM)
903 BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", MEM)
904 BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", MEM)
905 BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", MEM)
906 BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", MEM)
907 BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", MEM)
908 BU_ALTIVEC_X (STVX, "stvx", MEM)
909 BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM)
910 BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM)
911 BU_ALTIVEC_X (STVX_V4SF, "stvx_v4sf", MEM)
912 BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM)
913 BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM)
914 BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM)
915 BU_ALTIVEC_C (LVLX, "lvlx", MEM)
916 BU_ALTIVEC_C (LVLXL, "lvlxl", MEM)
917 BU_ALTIVEC_C (LVRX, "lvrx", MEM)
918 BU_ALTIVEC_C (LVRXL, "lvrxl", MEM)
919 BU_ALTIVEC_X (STVEBX, "stvebx", MEM)
920 BU_ALTIVEC_X (STVEHX, "stvehx", MEM)
921 BU_ALTIVEC_X (STVEWX, "stvewx", MEM)
922 BU_ALTIVEC_X (STVXL, "stvxl", MEM)
923 BU_ALTIVEC_X (STVXL_V2DF, "stvxl_v2df", MEM)
924 BU_ALTIVEC_X (STVXL_V2DI, "stvxl_v2di", MEM)
925 BU_ALTIVEC_X (STVXL_V4SF, "stvxl_v4sf", MEM)
926 BU_ALTIVEC_X (STVXL_V4SI, "stvxl_v4si", MEM)
927 BU_ALTIVEC_X (STVXL_V8HI, "stvxl_v8hi", MEM)
928 BU_ALTIVEC_X (STVXL_V16QI, "stvxl_v16qi", MEM)
929 BU_ALTIVEC_C (STVLX, "stvlx", MEM)
930 BU_ALTIVEC_C (STVLXL, "stvlxl", MEM)
931 BU_ALTIVEC_C (STVRX, "stvrx", MEM)
932 BU_ALTIVEC_C (STVRXL, "stvrxl", MEM)
933 BU_ALTIVEC_X (MASK_FOR_LOAD, "mask_for_load", MISC)
934 BU_ALTIVEC_X (MASK_FOR_STORE, "mask_for_store", MISC)
935 BU_ALTIVEC_X (VEC_INIT_V4SI, "vec_init_v4si", CONST)
936 BU_ALTIVEC_X (VEC_INIT_V8HI, "vec_init_v8hi", CONST)
937 BU_ALTIVEC_X (VEC_INIT_V16QI, "vec_init_v16qi", CONST)
938 BU_ALTIVEC_X (VEC_INIT_V4SF, "vec_init_v4sf", CONST)
939 BU_ALTIVEC_X (VEC_SET_V4SI, "vec_set_v4si", CONST)
940 BU_ALTIVEC_X (VEC_SET_V8HI, "vec_set_v8hi", CONST)
941 BU_ALTIVEC_X (VEC_SET_V16QI, "vec_set_v16qi", CONST)
942 BU_ALTIVEC_X (VEC_SET_V4SF, "vec_set_v4sf", CONST)
943 BU_ALTIVEC_X (VEC_EXT_V4SI, "vec_ext_v4si", CONST)
944 BU_ALTIVEC_X (VEC_EXT_V8HI, "vec_ext_v8hi", CONST)
945 BU_ALTIVEC_X (VEC_EXT_V16QI, "vec_ext_v16qi", CONST)
946 BU_ALTIVEC_X (VEC_EXT_V4SF, "vec_ext_v4sf", CONST)
947
948 /* Altivec overloaded builtins. */
949 /* For now, don't set the classification for overloaded functions.
950 The function should be converted to the type specific instruction
951 before we get to the point about classifying the builtin type. */
952
953 /* 3 argument Altivec overloaded builtins. */
954 BU_ALTIVEC_OVERLOAD_3 (ADDE, "adde")
955 BU_ALTIVEC_OVERLOAD_3 (ADDEC, "addec")
956 BU_ALTIVEC_OVERLOAD_3 (MADD, "madd")
957 BU_ALTIVEC_OVERLOAD_3 (MADDS, "madds")
958 BU_ALTIVEC_OVERLOAD_3 (MLADD, "mladd")
959 BU_ALTIVEC_OVERLOAD_3 (MRADDS, "mradds")
960 BU_ALTIVEC_OVERLOAD_3 (MSUM, "msum")
961 BU_ALTIVEC_OVERLOAD_3 (MSUMS, "msums")
962 BU_ALTIVEC_OVERLOAD_3 (NMSUB, "nmsub")
963 BU_ALTIVEC_OVERLOAD_3 (PERM, "perm")
964 BU_ALTIVEC_OVERLOAD_3 (SEL, "sel")
965 BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM, "vmsummbm")
966 BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM, "vmsumshm")
967 BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS, "vmsumshs")
968 BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM, "vmsumubm")
969 BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM, "vmsumuhm")
970 BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS, "vmsumuhs")
971
972 /* Altivec DST overloaded builtins. */
973 BU_ALTIVEC_OVERLOAD_D (DST, "dst")
974 BU_ALTIVEC_OVERLOAD_D (DSTT, "dstt")
975 BU_ALTIVEC_OVERLOAD_D (DSTST, "dstst")
976 BU_ALTIVEC_OVERLOAD_D (DSTSTT, "dststt")
977
978 /* 2 argument Altivec overloaded builtins. */
979 BU_ALTIVEC_OVERLOAD_2 (ADD, "add")
980 BU_ALTIVEC_OVERLOAD_2 (ADDC, "addc")
981 BU_ALTIVEC_OVERLOAD_2 (ADDS, "adds")
982 BU_ALTIVEC_OVERLOAD_2 (AND, "and")
983 BU_ALTIVEC_OVERLOAD_2 (ANDC, "andc")
984 BU_ALTIVEC_OVERLOAD_2 (AVG, "avg")
985 BU_ALTIVEC_OVERLOAD_2 (CMPB, "cmpb")
986 BU_ALTIVEC_OVERLOAD_2 (CMPEQ, "cmpeq")
987 BU_ALTIVEC_OVERLOAD_2 (CMPGE, "cmpge")
988 BU_ALTIVEC_OVERLOAD_2 (CMPGT, "cmpgt")
989 BU_ALTIVEC_OVERLOAD_2 (CMPLE, "cmple")
990 BU_ALTIVEC_OVERLOAD_2 (CMPLT, "cmplt")
991 BU_ALTIVEC_OVERLOAD_2 (COPYSIGN, "copysign")
992 BU_ALTIVEC_OVERLOAD_2 (MAX, "max")
993 BU_ALTIVEC_OVERLOAD_2 (MERGEH, "mergeh")
994 BU_ALTIVEC_OVERLOAD_2 (MERGEL, "mergel")
995 BU_ALTIVEC_OVERLOAD_2 (MIN, "min")
996 BU_ALTIVEC_OVERLOAD_2 (MULE, "mule")
997 BU_ALTIVEC_OVERLOAD_2 (MULO, "mulo")
998 BU_ALTIVEC_OVERLOAD_2 (NOR, "nor")
999 BU_ALTIVEC_OVERLOAD_2 (OR, "or")
1000 BU_ALTIVEC_OVERLOAD_2 (PACK, "pack")
1001 BU_ALTIVEC_OVERLOAD_2 (PACKPX, "packpx")
1002 BU_ALTIVEC_OVERLOAD_2 (PACKS, "packs")
1003 BU_ALTIVEC_OVERLOAD_2 (PACKSU, "packsu")
1004 BU_ALTIVEC_OVERLOAD_2 (RECIP, "recipdiv")
1005 BU_ALTIVEC_OVERLOAD_2 (RL, "rl")
1006 BU_ALTIVEC_OVERLOAD_2 (SL, "sl")
1007 BU_ALTIVEC_OVERLOAD_2 (SLL, "sll")
1008 BU_ALTIVEC_OVERLOAD_2 (SLO, "slo")
1009 BU_ALTIVEC_OVERLOAD_2 (SR, "sr")
1010 BU_ALTIVEC_OVERLOAD_2 (SRA, "sra")
1011 BU_ALTIVEC_OVERLOAD_2 (SRL, "srl")
1012 BU_ALTIVEC_OVERLOAD_2 (SRO, "sro")
1013 BU_ALTIVEC_OVERLOAD_2 (SUB, "sub")
1014 BU_ALTIVEC_OVERLOAD_2 (SUBC, "subc")
1015 BU_ALTIVEC_OVERLOAD_2 (SUBS, "subs")
1016 BU_ALTIVEC_OVERLOAD_2 (SUM2S, "sum2s")
1017 BU_ALTIVEC_OVERLOAD_2 (SUM4S, "sum4s")
1018 BU_ALTIVEC_OVERLOAD_2 (SUMS, "sums")
1019 BU_ALTIVEC_OVERLOAD_2 (VADDFP, "vaddfp")
1020 BU_ALTIVEC_OVERLOAD_2 (VADDSBS, "vaddsbs")
1021 BU_ALTIVEC_OVERLOAD_2 (VADDSHS, "vaddshs")
1022 BU_ALTIVEC_OVERLOAD_2 (VADDSWS, "vaddsws")
1023 BU_ALTIVEC_OVERLOAD_2 (VADDUBM, "vaddubm")
1024 BU_ALTIVEC_OVERLOAD_2 (VADDUBS, "vaddubs")
1025 BU_ALTIVEC_OVERLOAD_2 (VADDUHM, "vadduhm")
1026 BU_ALTIVEC_OVERLOAD_2 (VADDUHS, "vadduhs")
1027 BU_ALTIVEC_OVERLOAD_2 (VADDUWM, "vadduwm")
1028 BU_ALTIVEC_OVERLOAD_2 (VADDUWS, "vadduws")
1029 BU_ALTIVEC_OVERLOAD_2 (VAVGSB, "vavgsb")
1030 BU_ALTIVEC_OVERLOAD_2 (VAVGSH, "vavgsh")
1031 BU_ALTIVEC_OVERLOAD_2 (VAVGSW, "vavgsw")
1032 BU_ALTIVEC_OVERLOAD_2 (VAVGUB, "vavgub")
1033 BU_ALTIVEC_OVERLOAD_2 (VAVGUH, "vavguh")
1034 BU_ALTIVEC_OVERLOAD_2 (VAVGUW, "vavguw")
1035 BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP, "vcmpeqfp")
1036 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB, "vcmpequb")
1037 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH, "vcmpequh")
1038 BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW, "vcmpequw")
1039 BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP, "vcmpgtfp")
1040 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB, "vcmpgtsb")
1041 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH, "vcmpgtsh")
1042 BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW, "vcmpgtsw")
1043 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB, "vcmpgtub")
1044 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH, "vcmpgtuh")
1045 BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW, "vcmpgtuw")
1046 BU_ALTIVEC_OVERLOAD_2 (VMAXFP, "vmaxfp")
1047 BU_ALTIVEC_OVERLOAD_2 (VMAXSB, "vmaxsb")
1048 BU_ALTIVEC_OVERLOAD_2 (VMAXSH, "vmaxsh")
1049 BU_ALTIVEC_OVERLOAD_2 (VMAXSW, "vmaxsw")
1050 BU_ALTIVEC_OVERLOAD_2 (VMAXUB, "vmaxub")
1051 BU_ALTIVEC_OVERLOAD_2 (VMAXUH, "vmaxuh")
1052 BU_ALTIVEC_OVERLOAD_2 (VMAXUW, "vmaxuw")
1053 BU_ALTIVEC_OVERLOAD_2 (VMINFP, "vminfp")
1054 BU_ALTIVEC_OVERLOAD_2 (VMINSB, "vminsb")
1055 BU_ALTIVEC_OVERLOAD_2 (VMINSH, "vminsh")
1056 BU_ALTIVEC_OVERLOAD_2 (VMINSW, "vminsw")
1057 BU_ALTIVEC_OVERLOAD_2 (VMINUB, "vminub")
1058 BU_ALTIVEC_OVERLOAD_2 (VMINUH, "vminuh")
1059 BU_ALTIVEC_OVERLOAD_2 (VMINUW, "vminuw")
1060 BU_ALTIVEC_OVERLOAD_2 (VMRGHB, "vmrghb")
1061 BU_ALTIVEC_OVERLOAD_2 (VMRGHH, "vmrghh")
1062 BU_ALTIVEC_OVERLOAD_2 (VMRGHW, "vmrghw")
1063 BU_ALTIVEC_OVERLOAD_2 (VMRGLB, "vmrglb")
1064 BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh")
1065 BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw")
1066 BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb")
1067 BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh")
1068 BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub")
1069 BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh")
1070 BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb")
1071 BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh")
1072 BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub")
1073 BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh")
1074 BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss")
1075 BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus")
1076 BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss")
1077 BU_ALTIVEC_OVERLOAD_2 (VPKSWUS, "vpkswus")
1078 BU_ALTIVEC_OVERLOAD_2 (VPKUHUM, "vpkuhum")
1079 BU_ALTIVEC_OVERLOAD_2 (VPKUHUS, "vpkuhus")
1080 BU_ALTIVEC_OVERLOAD_2 (VPKUWUM, "vpkuwum")
1081 BU_ALTIVEC_OVERLOAD_2 (VPKUWUS, "vpkuwus")
1082 BU_ALTIVEC_OVERLOAD_2 (VRLB, "vrlb")
1083 BU_ALTIVEC_OVERLOAD_2 (VRLH, "vrlh")
1084 BU_ALTIVEC_OVERLOAD_2 (VRLW, "vrlw")
1085 BU_ALTIVEC_OVERLOAD_2 (VSLB, "vslb")
1086 BU_ALTIVEC_OVERLOAD_2 (VSLH, "vslh")
1087 BU_ALTIVEC_OVERLOAD_2 (VSLW, "vslw")
1088 BU_ALTIVEC_OVERLOAD_2 (VSRAB, "vsrab")
1089 BU_ALTIVEC_OVERLOAD_2 (VSRAH, "vsrah")
1090 BU_ALTIVEC_OVERLOAD_2 (VSRAW, "vsraw")
1091 BU_ALTIVEC_OVERLOAD_2 (VSRB, "vsrb")
1092 BU_ALTIVEC_OVERLOAD_2 (VSRH, "vsrh")
1093 BU_ALTIVEC_OVERLOAD_2 (VSRW, "vsrw")
1094 BU_ALTIVEC_OVERLOAD_2 (VSUBFP, "vsubfp")
1095 BU_ALTIVEC_OVERLOAD_2 (VSUBSBS, "vsubsbs")
1096 BU_ALTIVEC_OVERLOAD_2 (VSUBSHS, "vsubshs")
1097 BU_ALTIVEC_OVERLOAD_2 (VSUBSWS, "vsubsws")
1098 BU_ALTIVEC_OVERLOAD_2 (VSUBUBM, "vsububm")
1099 BU_ALTIVEC_OVERLOAD_2 (VSUBUBS, "vsububs")
1100 BU_ALTIVEC_OVERLOAD_2 (VSUBUHM, "vsubuhm")
1101 BU_ALTIVEC_OVERLOAD_2 (VSUBUHS, "vsubuhs")
1102 BU_ALTIVEC_OVERLOAD_2 (VSUBUWM, "vsubuwm")
1103 BU_ALTIVEC_OVERLOAD_2 (VSUBUWS, "vsubuws")
1104 BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS, "vsum4sbs")
1105 BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS, "vsum4shs")
1106 BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS, "vsum4ubs")
1107 BU_ALTIVEC_OVERLOAD_2 (XOR, "xor")
1108
1109 /* 1 argument Altivec overloaded functions. */
1110 BU_ALTIVEC_OVERLOAD_1 (ABS, "abs")
1111 BU_ALTIVEC_OVERLOAD_1 (ABSS, "abss")
1112 BU_ALTIVEC_OVERLOAD_1 (CEIL, "ceil")
1113 BU_ALTIVEC_OVERLOAD_1 (EXPTE, "expte")
1114 BU_ALTIVEC_OVERLOAD_1 (FLOOR, "floor")
1115 BU_ALTIVEC_OVERLOAD_1 (LOGE, "loge")
1116 BU_ALTIVEC_OVERLOAD_1 (MTVSCR, "mtvscr")
1117 BU_ALTIVEC_OVERLOAD_1 (NEARBYINT, "nearbyint")
1118 BU_ALTIVEC_OVERLOAD_1 (RE, "re")
1119 BU_ALTIVEC_OVERLOAD_1 (RINT, "rint")
1120 BU_ALTIVEC_OVERLOAD_1 (ROUND, "round")
1121 BU_ALTIVEC_OVERLOAD_1 (RSQRT, "rsqrt")
1122 BU_ALTIVEC_OVERLOAD_1 (RSQRTE, "rsqrte")
1123 BU_ALTIVEC_OVERLOAD_1 (SQRT, "sqrt")
1124 BU_ALTIVEC_OVERLOAD_1 (TRUNC, "trunc")
1125 BU_ALTIVEC_OVERLOAD_1 (UNPACKH, "unpackh")
1126 BU_ALTIVEC_OVERLOAD_1 (UNPACKL, "unpackl")
1127 BU_ALTIVEC_OVERLOAD_1 (VUPKHPX, "vupkhpx")
1128 BU_ALTIVEC_OVERLOAD_1 (VUPKHSB, "vupkhsb")
1129 BU_ALTIVEC_OVERLOAD_1 (VUPKHSH, "vupkhsh")
1130 BU_ALTIVEC_OVERLOAD_1 (VUPKLPX, "vupklpx")
1131 BU_ALTIVEC_OVERLOAD_1 (VUPKLSB, "vupklsb")
1132 BU_ALTIVEC_OVERLOAD_1 (VUPKLSH, "vupklsh")
1133
1134 /* Overloaded altivec predicates. */
1135 BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P, "vcmpeq_p")
1136 BU_ALTIVEC_OVERLOAD_P (VCMPGT_P, "vcmpgt_p")
1137 BU_ALTIVEC_OVERLOAD_P (VCMPGE_P, "vcmpge_p")
1138
1139 /* Overloaded Altivec builtins that are handled as special cases. */
1140 BU_ALTIVEC_OVERLOAD_X (CTF, "ctf")
1141 BU_ALTIVEC_OVERLOAD_X (CTS, "cts")
1142 BU_ALTIVEC_OVERLOAD_X (CTU, "ctu")
1143 BU_ALTIVEC_OVERLOAD_X (EXTRACT, "extract")
1144 BU_ALTIVEC_OVERLOAD_X (INSERT, "insert")
1145 BU_ALTIVEC_OVERLOAD_X (LD, "ld")
1146 BU_ALTIVEC_OVERLOAD_X (LDE, "lde")
1147 BU_ALTIVEC_OVERLOAD_X (LDL, "ldl")
1148 BU_ALTIVEC_OVERLOAD_X (LVEBX, "lvebx")
1149 BU_ALTIVEC_OVERLOAD_X (LVEHX, "lvehx")
1150 BU_ALTIVEC_OVERLOAD_X (LVEWX, "lvewx")
1151 BU_ALTIVEC_OVERLOAD_X (LVLX, "lvlx")
1152 BU_ALTIVEC_OVERLOAD_X (LVLXL, "lvlxl")
1153 BU_ALTIVEC_OVERLOAD_X (LVRX, "lvrx")
1154 BU_ALTIVEC_OVERLOAD_X (LVRXL, "lvrxl")
1155 BU_ALTIVEC_OVERLOAD_X (LVSL, "lvsl")
1156 BU_ALTIVEC_OVERLOAD_X (LVSR, "lvsr")
1157 BU_ALTIVEC_OVERLOAD_X (PROMOTE, "promote")
1158 BU_ALTIVEC_OVERLOAD_X (SLD, "sld")
1159 BU_ALTIVEC_OVERLOAD_X (SPLAT, "splat")
1160 BU_ALTIVEC_OVERLOAD_X (SPLATS, "splats")
1161 BU_ALTIVEC_OVERLOAD_X (ST, "st")
1162 BU_ALTIVEC_OVERLOAD_X (STE, "ste")
1163 BU_ALTIVEC_OVERLOAD_X (STEP, "step")
1164 BU_ALTIVEC_OVERLOAD_X (STL, "stl")
1165 BU_ALTIVEC_OVERLOAD_X (STVEBX, "stvebx")
1166 BU_ALTIVEC_OVERLOAD_X (STVEHX, "stvehx")
1167 BU_ALTIVEC_OVERLOAD_X (STVEWX, "stvewx")
1168 BU_ALTIVEC_OVERLOAD_X (STVLX, "stvlx")
1169 BU_ALTIVEC_OVERLOAD_X (STVLXL, "stvlxl")
1170 BU_ALTIVEC_OVERLOAD_X (STVRX, "stvrx")
1171 BU_ALTIVEC_OVERLOAD_X (STVRXL, "stvrxl")
1172 BU_ALTIVEC_OVERLOAD_X (VCFSX, "vcfsx")
1173 BU_ALTIVEC_OVERLOAD_X (VCFUX, "vcfux")
1174 BU_ALTIVEC_OVERLOAD_X (VSPLTB, "vspltb")
1175 BU_ALTIVEC_OVERLOAD_X (VSPLTH, "vsplth")
1176 BU_ALTIVEC_OVERLOAD_X (VSPLTW, "vspltw")
1177 \f
1178 /* 3 argument VSX builtins. */
1179 BU_VSX_3 (XVMADDSP, "xvmaddsp", CONST, fmav4sf4)
1180 BU_VSX_3 (XVMSUBSP, "xvmsubsp", CONST, fmsv4sf4)
1181 BU_VSX_3 (XVNMADDSP, "xvnmaddsp", CONST, nfmav4sf4)
1182 BU_VSX_3 (XVNMSUBSP, "xvnmsubsp", CONST, nfmsv4sf4)
1183
1184 BU_VSX_3 (XVMADDDP, "xvmadddp", CONST, fmav2df4)
1185 BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4)
1186 BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4)
1187 BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4)
1188
1189 BU_VSX_3 (XXSEL_1TI, "xxsel_1ti", CONST, vector_select_v1ti)
1190 BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di)
1191 BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df)
1192 BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf)
1193 BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si)
1194 BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi)
1195 BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi)
1196 BU_VSX_3 (XXSEL_1TI_UNS, "xxsel_1ti_uns", CONST, vector_select_v1ti_uns)
1197 BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns)
1198 BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns)
1199 BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns)
1200 BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns)
1201
1202 BU_VSX_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
1203 BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
1204 BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
1205 BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
1206 BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
1207 BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
1208 BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi)
1209 BU_VSX_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
1210 BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
1211 BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
1212 BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
1213 BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
1214
1215 BU_VSX_3 (XXPERMDI_1TI, "xxpermdi_1ti", CONST, vsx_xxpermdi_v1ti)
1216 BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df)
1217 BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di)
1218 BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf)
1219 BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si)
1220 BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi)
1221 BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi)
1222 BU_VSX_3 (SET_1TI, "set_1ti", CONST, vsx_set_v1ti)
1223 BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df)
1224 BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di)
1225 BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di)
1226 BU_VSX_3 (XXSLDWI_2DF, "xxsldwi_2df", CONST, vsx_xxsldwi_v2df)
1227 BU_VSX_3 (XXSLDWI_4SF, "xxsldwi_4sf", CONST, vsx_xxsldwi_v4sf)
1228 BU_VSX_3 (XXSLDWI_4SI, "xxsldwi_4si", CONST, vsx_xxsldwi_v4si)
1229 BU_VSX_3 (XXSLDWI_8HI, "xxsldwi_8hi", CONST, vsx_xxsldwi_v8hi)
1230 BU_VSX_3 (XXSLDWI_16QI, "xxsldwi_16qi", CONST, vsx_xxsldwi_v16qi)
1231
1232 /* 2 argument VSX builtins. */
1233 BU_VSX_2 (XVADDDP, "xvadddp", FP, addv2df3)
1234 BU_VSX_2 (XVSUBDP, "xvsubdp", FP, subv2df3)
1235 BU_VSX_2 (XVMULDP, "xvmuldp", FP, mulv2df3)
1236 BU_VSX_2 (XVDIVDP, "xvdivdp", FP, divv2df3)
1237 BU_VSX_2 (RECIP_V2DF, "xvrecipdivdp", FP, recipv2df3)
1238 BU_VSX_2 (XVMINDP, "xvmindp", CONST, sminv2df3)
1239 BU_VSX_2 (XVMAXDP, "xvmaxdp", CONST, smaxv2df3)
1240 BU_VSX_2 (XVTDIVDP_FE, "xvtdivdp_fe", CONST, vsx_tdivv2df3_fe)
1241 BU_VSX_2 (XVTDIVDP_FG, "xvtdivdp_fg", CONST, vsx_tdivv2df3_fg)
1242 BU_VSX_2 (XVCMPEQDP, "xvcmpeqdp", CONST, vector_eqv2df)
1243 BU_VSX_2 (XVCMPGTDP, "xvcmpgtdp", CONST, vector_gtv2df)
1244 BU_VSX_2 (XVCMPGEDP, "xvcmpgedp", CONST, vector_gev2df)
1245
1246 BU_VSX_2 (XVADDSP, "xvaddsp", FP, addv4sf3)
1247 BU_VSX_2 (XVSUBSP, "xvsubsp", FP, subv4sf3)
1248 BU_VSX_2 (XVMULSP, "xvmulsp", FP, mulv4sf3)
1249 BU_VSX_2 (XVDIVSP, "xvdivsp", FP, divv4sf3)
1250 BU_VSX_2 (RECIP_V4SF, "xvrecipdivsp", FP, recipv4sf3)
1251 BU_VSX_2 (XVMINSP, "xvminsp", CONST, sminv4sf3)
1252 BU_VSX_2 (XVMAXSP, "xvmaxsp", CONST, smaxv4sf3)
1253 BU_VSX_2 (XVTDIVSP_FE, "xvtdivsp_fe", CONST, vsx_tdivv4sf3_fe)
1254 BU_VSX_2 (XVTDIVSP_FG, "xvtdivsp_fg", CONST, vsx_tdivv4sf3_fg)
1255 BU_VSX_2 (XVCMPEQSP, "xvcmpeqsp", CONST, vector_eqv4sf)
1256 BU_VSX_2 (XVCMPGTSP, "xvcmpgtsp", CONST, vector_gtv4sf)
1257 BU_VSX_2 (XVCMPGESP, "xvcmpgesp", CONST, vector_gev4sf)
1258
1259 BU_VSX_2 (XSMINDP, "xsmindp", CONST, smindf3)
1260 BU_VSX_2 (XSMAXDP, "xsmaxdp", CONST, smaxdf3)
1261 BU_VSX_2 (XSTDIVDP_FE, "xstdivdp_fe", CONST, vsx_tdivdf3_fe)
1262 BU_VSX_2 (XSTDIVDP_FG, "xstdivdp_fg", CONST, vsx_tdivdf3_fg)
1263 BU_VSX_2 (CPSGNDP, "cpsgndp", CONST, vector_copysignv2df3)
1264 BU_VSX_2 (CPSGNSP, "cpsgnsp", CONST, vector_copysignv4sf3)
1265
1266 BU_VSX_2 (CONCAT_2DF, "concat_2df", CONST, vsx_concat_v2df)
1267 BU_VSX_2 (CONCAT_2DI, "concat_2di", CONST, vsx_concat_v2di)
1268 BU_VSX_2 (SPLAT_2DF, "splat_2df", CONST, vsx_splat_v2df)
1269 BU_VSX_2 (SPLAT_2DI, "splat_2di", CONST, vsx_splat_v2di)
1270 BU_VSX_2 (XXMRGHW_4SF, "xxmrghw", CONST, vsx_xxmrghw_v4sf)
1271 BU_VSX_2 (XXMRGHW_4SI, "xxmrghw_4si", CONST, vsx_xxmrghw_v4si)
1272 BU_VSX_2 (XXMRGLW_4SF, "xxmrglw", CONST, vsx_xxmrglw_v4sf)
1273 BU_VSX_2 (XXMRGLW_4SI, "xxmrglw_4si", CONST, vsx_xxmrglw_v4si)
1274 BU_VSX_2 (VEC_MERGEL_V2DF, "mergel_2df", CONST, vsx_mergel_v2df)
1275 BU_VSX_2 (VEC_MERGEL_V2DI, "mergel_2di", CONST, vsx_mergel_v2di)
1276 BU_VSX_2 (VEC_MERGEH_V2DF, "mergeh_2df", CONST, vsx_mergeh_v2df)
1277 BU_VSX_2 (VEC_MERGEH_V2DI, "mergeh_2di", CONST, vsx_mergeh_v2di)
1278 BU_VSX_2 (XXSPLTD_V2DF, "xxspltd_2df", CONST, vsx_xxspltd_v2df)
1279 BU_VSX_2 (XXSPLTD_V2DI, "xxspltd_2di", CONST, vsx_xxspltd_v2di)
1280 BU_VSX_2 (DIV_V2DI, "div_2di", CONST, vsx_div_v2di)
1281 BU_VSX_2 (UDIV_V2DI, "udiv_2di", CONST, vsx_udiv_v2di)
1282 BU_VSX_2 (MUL_V2DI, "mul_2di", CONST, vsx_mul_v2di)
1283
1284 BU_VSX_2 (XVCVSXDDP_SCALE, "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale)
1285 BU_VSX_2 (XVCVUXDDP_SCALE, "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale)
1286 BU_VSX_2 (XVCVDPSXDS_SCALE, "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale)
1287 BU_VSX_2 (XVCVDPUXDS_SCALE, "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale)
1288
1289 BU_VSX_2 (CMPGE_16QI, "cmpge_16qi", CONST, vector_nltv16qi)
1290 BU_VSX_2 (CMPGE_8HI, "cmpge_8hi", CONST, vector_nltv8hi)
1291 BU_VSX_2 (CMPGE_4SI, "cmpge_4si", CONST, vector_nltv4si)
1292 BU_VSX_2 (CMPGE_2DI, "cmpge_2di", CONST, vector_nltv2di)
1293 BU_VSX_2 (CMPGE_U16QI, "cmpge_u16qi", CONST, vector_nltuv16qi)
1294 BU_VSX_2 (CMPGE_U8HI, "cmpge_u8hi", CONST, vector_nltuv8hi)
1295 BU_VSX_2 (CMPGE_U4SI, "cmpge_u4si", CONST, vector_nltuv4si)
1296 BU_VSX_2 (CMPGE_U2DI, "cmpge_u2di", CONST, vector_nltuv2di)
1297
1298 BU_VSX_2 (CMPLE_16QI, "cmple_16qi", CONST, vector_ngtv16qi)
1299 BU_VSX_2 (CMPLE_8HI, "cmple_8hi", CONST, vector_ngtv8hi)
1300 BU_VSX_2 (CMPLE_4SI, "cmple_4si", CONST, vector_ngtv4si)
1301 BU_VSX_2 (CMPLE_2DI, "cmple_2di", CONST, vector_ngtv2di)
1302 BU_VSX_2 (CMPLE_U16QI, "cmple_u16qi", CONST, vector_ngtuv16qi)
1303 BU_VSX_2 (CMPLE_U8HI, "cmple_u8hi", CONST, vector_ngtuv8hi)
1304 BU_VSX_2 (CMPLE_U4SI, "cmple_u4si", CONST, vector_ngtuv4si)
1305 BU_VSX_2 (CMPLE_U2DI, "cmple_u2di", CONST, vector_ngtuv2di)
1306
1307 /* VSX abs builtin functions. */
1308 BU_VSX_A (XVABSDP, "xvabsdp", CONST, absv2df2)
1309 BU_VSX_A (XVNABSDP, "xvnabsdp", CONST, vsx_nabsv2df2)
1310 BU_VSX_A (XVABSSP, "xvabssp", CONST, absv4sf2)
1311 BU_VSX_A (XVNABSSP, "xvnabssp", CONST, vsx_nabsv4sf2)
1312
1313 /* 1 argument VSX builtin functions. */
1314 BU_VSX_1 (XVNEGDP, "xvnegdp", CONST, negv2df2)
1315 BU_VSX_1 (XVSQRTDP, "xvsqrtdp", CONST, sqrtv2df2)
1316 BU_VSX_1 (RSQRT_2DF, "xvrsqrtdp", CONST, rsqrtv2df2)
1317 BU_VSX_1 (XVRSQRTEDP, "xvrsqrtedp", CONST, rsqrtev2df2)
1318 BU_VSX_1 (XVTSQRTDP_FE, "xvtsqrtdp_fe", CONST, vsx_tsqrtv2df2_fe)
1319 BU_VSX_1 (XVTSQRTDP_FG, "xvtsqrtdp_fg", CONST, vsx_tsqrtv2df2_fg)
1320 BU_VSX_1 (XVREDP, "xvredp", CONST, vsx_frev2df2)
1321
1322 BU_VSX_1 (XVNEGSP, "xvnegsp", CONST, negv4sf2)
1323 BU_VSX_1 (XVSQRTSP, "xvsqrtsp", CONST, sqrtv4sf2)
1324 BU_VSX_1 (RSQRT_4SF, "xvrsqrtsp", CONST, rsqrtv4sf2)
1325 BU_VSX_1 (XVRSQRTESP, "xvrsqrtesp", CONST, rsqrtev4sf2)
1326 BU_VSX_1 (XVTSQRTSP_FE, "xvtsqrtsp_fe", CONST, vsx_tsqrtv4sf2_fe)
1327 BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg)
1328 BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2)
1329
1330 BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp)
1331 BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvspdp)
1332 BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp)
1333 BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp)
1334 BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe)
1335 BU_VSX_1 (XSTSQRTDP_FG, "xstsqrtdp_fg", CONST, vsx_tsqrtdf2_fg)
1336
1337 BU_VSX_1 (XVCVDPSXDS, "xvcvdpsxds", CONST, vsx_fix_truncv2dfv2di2)
1338 BU_VSX_1 (XVCVDPUXDS, "xvcvdpuxds", CONST, vsx_fixuns_truncv2dfv2di2)
1339 BU_VSX_1 (XVCVDPUXDS_UNS, "xvcvdpuxds_uns", CONST, vsx_fixuns_truncv2dfv2di2)
1340 BU_VSX_1 (XVCVSXDDP, "xvcvsxddp", CONST, vsx_floatv2div2df2)
1341 BU_VSX_1 (XVCVUXDDP, "xvcvuxddp", CONST, vsx_floatunsv2div2df2)
1342 BU_VSX_1 (XVCVUXDDP_UNS, "xvcvuxddp_uns", CONST, vsx_floatunsv2div2df2)
1343
1344 BU_VSX_1 (XVCVSPSXWS, "xvcvspsxws", CONST, vsx_fix_truncv4sfv4si2)
1345 BU_VSX_1 (XVCVSPUXWS, "xvcvspuxws", CONST, vsx_fixuns_truncv4sfv4si2)
1346 BU_VSX_1 (XVCVSXWSP, "xvcvsxwsp", CONST, vsx_floatv4siv4sf2)
1347 BU_VSX_1 (XVCVUXWSP, "xvcvuxwsp", CONST, vsx_floatunsv4siv4sf2)
1348
1349 BU_VSX_1 (XVCVDPSXWS, "xvcvdpsxws", CONST, vsx_xvcvdpsxws)
1350 BU_VSX_1 (XVCVDPUXWS, "xvcvdpuxws", CONST, vsx_xvcvdpuxws)
1351 BU_VSX_1 (XVCVSXWDP, "xvcvsxwdp", CONST, vsx_xvcvsxwdp)
1352 BU_VSX_1 (XVCVUXWDP, "xvcvuxwdp", CONST, vsx_xvcvuxwdp)
1353 BU_VSX_1 (XVRDPI, "xvrdpi", CONST, vsx_xvrdpi)
1354 BU_VSX_1 (XVRDPIC, "xvrdpic", CONST, vsx_xvrdpic)
1355 BU_VSX_1 (XVRDPIM, "xvrdpim", CONST, vsx_floorv2df2)
1356 BU_VSX_1 (XVRDPIP, "xvrdpip", CONST, vsx_ceilv2df2)
1357 BU_VSX_1 (XVRDPIZ, "xvrdpiz", CONST, vsx_btruncv2df2)
1358
1359 BU_VSX_1 (XVCVSPSXDS, "xvcvspsxds", CONST, vsx_xvcvspsxds)
1360 BU_VSX_1 (XVCVSPUXDS, "xvcvspuxds", CONST, vsx_xvcvspuxds)
1361 BU_VSX_1 (XVCVSXDSP, "xvcvsxdsp", CONST, vsx_xvcvsxdsp)
1362 BU_VSX_1 (XVCVUXDSP, "xvcvuxdsp", CONST, vsx_xvcvuxdsp)
1363 BU_VSX_1 (XVRSPI, "xvrspi", CONST, vsx_xvrspi)
1364 BU_VSX_1 (XVRSPIC, "xvrspic", CONST, vsx_xvrspic)
1365 BU_VSX_1 (XVRSPIM, "xvrspim", CONST, vsx_floorv4sf2)
1366 BU_VSX_1 (XVRSPIP, "xvrspip", CONST, vsx_ceilv4sf2)
1367 BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2)
1368
1369 BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi)
1370 BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic)
1371 BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, floordf2)
1372 BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, ceildf2)
1373 BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, btruncdf2)
1374
1375 /* VSX predicate functions. */
1376 BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p)
1377 BU_VSX_P (XVCMPGESP_P, "xvcmpgesp_p", CONST, vector_ge_v4sf_p)
1378 BU_VSX_P (XVCMPGTSP_P, "xvcmpgtsp_p", CONST, vector_gt_v4sf_p)
1379 BU_VSX_P (XVCMPEQDP_P, "xvcmpeqdp_p", CONST, vector_eq_v2df_p)
1380 BU_VSX_P (XVCMPGEDP_P, "xvcmpgedp_p", CONST, vector_ge_v2df_p)
1381 BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p)
1382
1383 /* VSX builtins that are handled as special cases. */
1384 BU_VSX_X (LXSDX, "lxsdx", MEM)
1385 BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", MEM)
1386 BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM)
1387 BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM)
1388 BU_VSX_X (LXVDSX, "lxvdsx", MEM)
1389 BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM)
1390 BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM)
1391 BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM)
1392 BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM)
1393 BU_VSX_X (STXSDX, "stxsdx", MEM)
1394 BU_VSX_X (STXVD2X_V1TI, "stxsdx_v1ti", MEM)
1395 BU_VSX_X (STXVD2X_V2DF, "stxsdx_v2df", MEM)
1396 BU_VSX_X (STXVD2X_V2DI, "stxsdx_v2di", MEM)
1397 BU_VSX_X (STXVW4X_V4SF, "stxsdx_v4sf", MEM)
1398 BU_VSX_X (STXVW4X_V4SI, "stxsdx_v4si", MEM)
1399 BU_VSX_X (STXVW4X_V8HI, "stxsdx_v8hi", MEM)
1400 BU_VSX_X (STXVW4X_V16QI, "stxsdx_v16qi", MEM)
1401 BU_VSX_X (XSABSDP, "xsabsdp", CONST)
1402 BU_VSX_X (XSADDDP, "xsadddp", FP)
1403 BU_VSX_X (XSCMPODP, "xscmpodp", FP)
1404 BU_VSX_X (XSCMPUDP, "xscmpudp", FP)
1405 BU_VSX_X (XSCVDPSXDS, "xscvdpsxds", FP)
1406 BU_VSX_X (XSCVDPSXWS, "xscvdpsxws", FP)
1407 BU_VSX_X (XSCVDPUXDS, "xscvdpuxds", FP)
1408 BU_VSX_X (XSCVDPUXWS, "xscvdpuxws", FP)
1409 BU_VSX_X (XSCVSXDDP, "xscvsxddp", FP)
1410 BU_VSX_X (XSCVUXDDP, "xscvuxddp", FP)
1411 BU_VSX_X (XSDIVDP, "xsdivdp", FP)
1412 BU_VSX_X (XSMADDADP, "xsmaddadp", FP)
1413 BU_VSX_X (XSMADDMDP, "xsmaddmdp", FP)
1414 BU_VSX_X (XSMOVDP, "xsmovdp", FP)
1415 BU_VSX_X (XSMSUBADP, "xsmsubadp", FP)
1416 BU_VSX_X (XSMSUBMDP, "xsmsubmdp", FP)
1417 BU_VSX_X (XSMULDP, "xsmuldp", FP)
1418 BU_VSX_X (XSNABSDP, "xsnabsdp", FP)
1419 BU_VSX_X (XSNEGDP, "xsnegdp", FP)
1420 BU_VSX_X (XSNMADDADP, "xsnmaddadp", FP)
1421 BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP)
1422 BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP)
1423 BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP)
1424 BU_VSX_X (XSSUBDP, "xssubdp", FP)
1425 BU_VSX_X (VEC_INIT_V1TI, "vec_init_v1ti", CONST)
1426 BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST)
1427 BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST)
1428 BU_VSX_X (VEC_SET_V1TI, "vec_set_v1ti", CONST)
1429 BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST)
1430 BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST)
1431 BU_VSX_X (VEC_EXT_V1TI, "vec_ext_v1ti", CONST)
1432 BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST)
1433 BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST)
1434
1435 /* VSX overloaded builtins, add the overloaded functions not present in
1436 Altivec. */
1437
1438 /* 3 argument VSX overloaded builtins. */
1439 BU_VSX_OVERLOAD_3 (MSUB, "msub")
1440 BU_VSX_OVERLOAD_3 (NMADD, "nmadd")
1441 BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi")
1442 BU_VSX_OVERLOAD_3V (XXSLDWI, "xxsldwi")
1443
1444 /* 2 argument VSX overloaded builtin functions. */
1445 BU_VSX_OVERLOAD_2 (MUL, "mul")
1446 BU_VSX_OVERLOAD_2 (DIV, "div")
1447 BU_VSX_OVERLOAD_2 (XXMRGHW, "xxmrghw")
1448 BU_VSX_OVERLOAD_2 (XXMRGLW, "xxmrglw")
1449 BU_VSX_OVERLOAD_2 (XXSPLTD, "xxspltd")
1450 BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw")
1451
1452 /* 1 argument VSX overloaded builtin functions. */
1453 BU_VSX_OVERLOAD_1 (DOUBLE, "double")
1454
1455 /* VSX builtins that are handled as special cases. */
1456 BU_VSX_OVERLOAD_X (LD, "ld")
1457 BU_VSX_OVERLOAD_X (ST, "st")
1458 \f
1459 /* 1 argument VSX instructions added in ISA 2.07. */
1460 BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn)
1461 BU_P8V_VSX_1 (XSCVDPSPN, "xscvdpspn", CONST, vsx_xscvdpspn)
1462
1463 /* 1 argument altivec instructions added in ISA 2.07. */
1464 BU_P8V_AV_1 (ABS_V2DI, "abs_v2di", CONST, absv2di2)
1465 BU_P8V_AV_1 (VUPKHSW, "vupkhsw", CONST, altivec_vupkhsw)
1466 BU_P8V_AV_1 (VUPKLSW, "vupklsw", CONST, altivec_vupklsw)
1467 BU_P8V_AV_1 (VCLZB, "vclzb", CONST, clzv16qi2)
1468 BU_P8V_AV_1 (VCLZH, "vclzh", CONST, clzv8hi2)
1469 BU_P8V_AV_1 (VCLZW, "vclzw", CONST, clzv4si2)
1470 BU_P8V_AV_1 (VCLZD, "vclzd", CONST, clzv2di2)
1471 BU_P8V_AV_1 (VPOPCNTB, "vpopcntb", CONST, popcountv16qi2)
1472 BU_P8V_AV_1 (VPOPCNTH, "vpopcnth", CONST, popcountv8hi2)
1473 BU_P8V_AV_1 (VPOPCNTW, "vpopcntw", CONST, popcountv4si2)
1474 BU_P8V_AV_1 (VPOPCNTD, "vpopcntd", CONST, popcountv2di2)
1475 BU_P8V_AV_1 (VGBBD, "vgbbd", CONST, p8v_vgbbd)
1476
1477 /* 2 argument altivec instructions added in ISA 2.07. */
1478 BU_P8V_AV_2 (VADDCUQ, "vaddcuq", CONST, altivec_vaddcuq)
1479 BU_P8V_AV_2 (VADDUDM, "vaddudm", CONST, addv2di3)
1480 BU_P8V_AV_2 (VADDUQM, "vadduqm", CONST, altivec_vadduqm)
1481 BU_P8V_AV_2 (VMINSD, "vminsd", CONST, sminv2di3)
1482 BU_P8V_AV_2 (VMAXSD, "vmaxsd", CONST, smaxv2di3)
1483 BU_P8V_AV_2 (VMINUD, "vminud", CONST, uminv2di3)
1484 BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3)
1485 BU_P8V_AV_2 (VMRGEW, "vmrgew", CONST, p8_vmrgew)
1486 BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow)
1487 BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq)
1488 BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum)
1489 BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss)
1490 BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus)
1491 BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus)
1492 BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3)
1493 BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3)
1494 BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3)
1495 BU_P8V_AV_2 (VSRAD, "vsrad", CONST, vashrv2di3)
1496 BU_P8V_AV_2 (VSUBCUQ, "vsubcuq", CONST, altivec_vsubcuq)
1497 BU_P8V_AV_2 (VSUBUDM, "vsubudm", CONST, subv2di3)
1498 BU_P8V_AV_2 (VSUBUQM, "vsubuqm", CONST, altivec_vsubuqm)
1499
1500 BU_P8V_AV_2 (EQV_V16QI, "eqv_v16qi", CONST, eqvv16qi3)
1501 BU_P8V_AV_2 (EQV_V8HI, "eqv_v8hi", CONST, eqvv8hi3)
1502 BU_P8V_AV_2 (EQV_V4SI, "eqv_v4si", CONST, eqvv4si3)
1503 BU_P8V_AV_2 (EQV_V2DI, "eqv_v2di", CONST, eqvv2di3)
1504 BU_P8V_AV_2 (EQV_V1TI, "eqv_v1ti", CONST, eqvv1ti3)
1505 BU_P8V_AV_2 (EQV_V4SF, "eqv_v4sf", CONST, eqvv4sf3)
1506 BU_P8V_AV_2 (EQV_V2DF, "eqv_v2df", CONST, eqvv2df3)
1507
1508 BU_P8V_AV_2 (NAND_V16QI, "nand_v16qi", CONST, nandv16qi3)
1509 BU_P8V_AV_2 (NAND_V8HI, "nand_v8hi", CONST, nandv8hi3)
1510 BU_P8V_AV_2 (NAND_V4SI, "nand_v4si", CONST, nandv4si3)
1511 BU_P8V_AV_2 (NAND_V2DI, "nand_v2di", CONST, nandv2di3)
1512 BU_P8V_AV_2 (NAND_V1TI, "nand_v1ti", CONST, nandv1ti3)
1513 BU_P8V_AV_2 (NAND_V4SF, "nand_v4sf", CONST, nandv4sf3)
1514 BU_P8V_AV_2 (NAND_V2DF, "nand_v2df", CONST, nandv2df3)
1515
1516 BU_P8V_AV_2 (ORC_V16QI, "orc_v16qi", CONST, orcv16qi3)
1517 BU_P8V_AV_2 (ORC_V8HI, "orc_v8hi", CONST, orcv8hi3)
1518 BU_P8V_AV_2 (ORC_V4SI, "orc_v4si", CONST, orcv4si3)
1519 BU_P8V_AV_2 (ORC_V2DI, "orc_v2di", CONST, orcv2di3)
1520 BU_P8V_AV_2 (ORC_V1TI, "orc_v1ti", CONST, orcv1ti3)
1521 BU_P8V_AV_2 (ORC_V4SF, "orc_v4sf", CONST, orcv4sf3)
1522 BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3)
1523
1524 /* 3 argument altivec instructions added in ISA 2.07. */
1525 BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm)
1526 BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq)
1527 BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm)
1528 BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq)
1529
1530 /* Vector comparison instructions added in ISA 2.07. */
1531 BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di)
1532 BU_P8V_AV_2 (VCMPGTSD, "vcmpgtsd", CONST, vector_gtv2di)
1533 BU_P8V_AV_2 (VCMPGTUD, "vcmpgtud", CONST, vector_gtuv2di)
1534
1535 /* Vector comparison predicate instructions added in ISA 2.07. */
1536 BU_P8V_AV_P (VCMPEQUD_P, "vcmpequd_p", CONST, vector_eq_v2di_p)
1537 BU_P8V_AV_P (VCMPGTSD_P, "vcmpgtsd_p", CONST, vector_gt_v2di_p)
1538 BU_P8V_AV_P (VCMPGTUD_P, "vcmpgtud_p", CONST, vector_gtu_v2di_p)
1539
1540 /* ISA 2.07 vector overloaded 1 argument functions. */
1541 BU_P8V_OVERLOAD_1 (VUPKHSW, "vupkhsw")
1542 BU_P8V_OVERLOAD_1 (VUPKLSW, "vupklsw")
1543 BU_P8V_OVERLOAD_1 (VCLZ, "vclz")
1544 BU_P8V_OVERLOAD_1 (VCLZB, "vclzb")
1545 BU_P8V_OVERLOAD_1 (VCLZH, "vclzh")
1546 BU_P8V_OVERLOAD_1 (VCLZW, "vclzw")
1547 BU_P8V_OVERLOAD_1 (VCLZD, "vclzd")
1548 BU_P8V_OVERLOAD_1 (VPOPCNT, "vpopcnt")
1549 BU_P8V_OVERLOAD_1 (VPOPCNTB, "vpopcntb")
1550 BU_P8V_OVERLOAD_1 (VPOPCNTH, "vpopcnth")
1551 BU_P8V_OVERLOAD_1 (VPOPCNTW, "vpopcntw")
1552 BU_P8V_OVERLOAD_1 (VPOPCNTD, "vpopcntd")
1553 BU_P8V_OVERLOAD_1 (VGBBD, "vgbbd")
1554
1555 /* ISA 2.07 vector overloaded 2 argument functions. */
1556 BU_P8V_OVERLOAD_2 (EQV, "eqv")
1557 BU_P8V_OVERLOAD_2 (NAND, "nand")
1558 BU_P8V_OVERLOAD_2 (ORC, "orc")
1559 BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq")
1560 BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm")
1561 BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm")
1562 BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq")
1563 BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd")
1564 BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud")
1565 BU_P8V_OVERLOAD_2 (VMINSD, "vminsd")
1566 BU_P8V_OVERLOAD_2 (VMINUD, "vminud")
1567 BU_P8V_OVERLOAD_2 (VMRGEW, "vmrgew")
1568 BU_P8V_OVERLOAD_2 (VMRGOW, "vmrgow")
1569 BU_P8V_OVERLOAD_2 (VPKSDSS, "vpksdss")
1570 BU_P8V_OVERLOAD_2 (VPKSDUS, "vpksdus")
1571 BU_P8V_OVERLOAD_2 (VPKUDUM, "vpkudum")
1572 BU_P8V_OVERLOAD_2 (VPKUDUS, "vpkudus")
1573 BU_P8V_OVERLOAD_2 (VRLD, "vrld")
1574 BU_P8V_OVERLOAD_2 (VSLD, "vsld")
1575 BU_P8V_OVERLOAD_2 (VSRAD, "vsrad")
1576 BU_P8V_OVERLOAD_2 (VSRD, "vsrd")
1577 BU_P8V_OVERLOAD_2 (VSUBCUQ, "vsubcuq")
1578 BU_P8V_OVERLOAD_2 (VSUBUDM, "vsubudm")
1579 BU_P8V_OVERLOAD_2 (VSUBUQM, "vsubuqm")
1580
1581 /* ISA 2.07 vector overloaded 3 argument functions. */
1582 BU_P8V_OVERLOAD_3 (VADDECUQ, "vaddecuq")
1583 BU_P8V_OVERLOAD_3 (VADDEUQM, "vaddeuqm")
1584 BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq")
1585 BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm")
1586
1587 \f
1588 /* 2 argument extended divide functions added in ISA 2.06. */
1589 BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si)
1590 BU_P7_MISC_2 (DIVWEO, "divweo", CONST, diveo_si)
1591 BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si)
1592 BU_P7_MISC_2 (DIVWEUO, "divweuo", CONST, diveuo_si)
1593 BU_P7_MISC_2 (DIVDE, "divde", CONST, dive_di)
1594 BU_P7_MISC_2 (DIVDEO, "divdeo", CONST, diveo_di)
1595 BU_P7_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di)
1596 BU_P7_MISC_2 (DIVDEUO, "divdeuo", CONST, diveuo_di)
1597
1598 /* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */
1599 BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd)
1600 BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td)
1601
1602 /* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */
1603 BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd)
1604 BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td)
1605 BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd)
1606 BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td)
1607 BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd)
1608 BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td)
1609 BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd)
1610 BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td)
1611 BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd)
1612 BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td)
1613
1614 /* 1 argument BCD functions added in ISA 2.06. */
1615 BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd)
1616 BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd)
1617
1618 /* 2 argument BCD functions added in ISA 2.06. */
1619 BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s)
1620
1621 /* 3 argument BCD functions added in ISA 2.07. */
1622 BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd)
1623 BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt)
1624 BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq)
1625 BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt)
1626 BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered)
1627 BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub)
1628 BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt)
1629 BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq)
1630 BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt)
1631 BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered)
1632
1633 /* 2 argument pack/unpack 128-bit floating point types. */
1634 BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
1635 BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
1636
1637 BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf)
1638 BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
1639
1640 BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
1641 BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
1642
1643 \f
1644 /* 1 argument crypto functions. */
1645 BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox)
1646
1647 /* 2 argument crypto functions. */
1648 BU_CRYPTO_2 (VCIPHER, "vcipher", CONST, crypto_vcipher)
1649 BU_CRYPTO_2 (VCIPHERLAST, "vcipherlast", CONST, crypto_vcipherlast)
1650 BU_CRYPTO_2 (VNCIPHER, "vncipher", CONST, crypto_vncipher)
1651 BU_CRYPTO_2 (VNCIPHERLAST, "vncipherlast", CONST, crypto_vncipherlast)
1652 BU_CRYPTO_2A (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb)
1653 BU_CRYPTO_2A (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh)
1654 BU_CRYPTO_2A (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw)
1655 BU_CRYPTO_2A (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd)
1656
1657 /* 3 argument crypto functions. */
1658 BU_CRYPTO_3A (VPERMXOR_V2DI, "vpermxor_v2di", CONST, crypto_vpermxor_v2di)
1659 BU_CRYPTO_3A (VPERMXOR_V4SI, "vpermxor_v4si", CONST, crypto_vpermxor_v4si)
1660 BU_CRYPTO_3A (VPERMXOR_V8HI, "vpermxor_v8hi", CONST, crypto_vpermxor_v8hi)
1661 BU_CRYPTO_3A (VPERMXOR_V16QI, "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
1662 BU_CRYPTO_3 (VSHASIGMAW, "vshasigmaw", CONST, crypto_vshasigmaw)
1663 BU_CRYPTO_3 (VSHASIGMAD, "vshasigmad", CONST, crypto_vshasigmad)
1664
1665 /* 2 argument crypto overloaded functions. */
1666 BU_CRYPTO_OVERLOAD_2A (VPMSUM, "vpmsum")
1667
1668 /* 3 argument crypto overloaded functions. */
1669 BU_CRYPTO_OVERLOAD_3A (VPERMXOR, "vpermxor")
1670 BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
1671
1672 \f
1673 /* HTM functions. */
1674 BU_HTM_1 (TABORT, "tabort", CR, tabort)
1675 BU_HTM_3 (TABORTDC, "tabortdc", CR, tabortdc)
1676 BU_HTM_3 (TABORTDCI, "tabortdci", CR, tabortdci)
1677 BU_HTM_3 (TABORTWC, "tabortwc", CR, tabortwc)
1678 BU_HTM_3 (TABORTWCI, "tabortwci", CR, tabortwci)
1679 BU_HTM_1 (TBEGIN, "tbegin", CR, tbegin)
1680 BU_HTM_0 (TCHECK, "tcheck", CR, tcheck)
1681 BU_HTM_1 (TEND, "tend", CR, tend)
1682 BU_HTM_0 (TENDALL, "tendall", CR, tend)
1683 BU_HTM_0 (TRECHKPT, "trechkpt", CR, trechkpt)
1684 BU_HTM_1 (TRECLAIM, "treclaim", CR, treclaim)
1685 BU_HTM_0 (TRESUME, "tresume", CR, tsr)
1686 BU_HTM_0 (TSUSPEND, "tsuspend", CR, tsr)
1687 BU_HTM_1 (TSR, "tsr", CR, tsr)
1688 BU_HTM_0 (TTEST, "ttest", CR, ttest)
1689
1690 BU_HTM_0 (GET_TFHAR, "get_tfhar", SPR, nothing)
1691 BU_HTM_V1 (SET_TFHAR, "set_tfhar", SPR, nothing)
1692 BU_HTM_0 (GET_TFIAR, "get_tfiar", SPR, nothing)
1693 BU_HTM_V1 (SET_TFIAR, "set_tfiar", SPR, nothing)
1694 BU_HTM_0 (GET_TEXASR, "get_texasr", SPR, nothing)
1695 BU_HTM_V1 (SET_TEXASR, "set_texasr", SPR, nothing)
1696 BU_HTM_0 (GET_TEXASRU, "get_texasru", SPR, nothing)
1697 BU_HTM_V1 (SET_TEXASRU, "set_texasru", SPR, nothing)
1698
1699 \f
1700 /* 3 argument paired floating point builtins. */
1701 BU_PAIRED_3 (MSUB, "msub", FP, fmsv2sf4)
1702 BU_PAIRED_3 (MADD, "madd", FP, fmav2sf4)
1703 BU_PAIRED_3 (MADDS0, "madds0", FP, paired_madds0)
1704 BU_PAIRED_3 (MADDS1, "madds1", FP, paired_madds1)
1705 BU_PAIRED_3 (NMSUB, "nmsub", FP, nfmsv2sf4)
1706 BU_PAIRED_3 (NMADD, "nmadd", FP, nfmav2sf4)
1707 BU_PAIRED_3 (SUM0, "sum0", FP, paired_sum0)
1708 BU_PAIRED_3 (SUM1, "sum1", FP, paired_sum1)
1709 BU_PAIRED_3 (SELV2SF4, "selv2sf4", CONST, selv2sf4)
1710
1711 /* 2 argument paired floating point builtins. */
1712 BU_PAIRED_2 (DIVV2SF3, "divv2sf3", FP, paired_divv2sf3)
1713 BU_PAIRED_2 (ADDV2SF3, "addv2sf3", FP, paired_addv2sf3)
1714 BU_PAIRED_2 (SUBV2SF3, "subv2sf3", FP, paired_subv2sf3)
1715 BU_PAIRED_2 (MULV2SF3, "mulv2sf3", FP, paired_mulv2sf3)
1716 BU_PAIRED_2 (MULS0, "muls0", FP, paired_muls0)
1717 BU_PAIRED_2 (MULS1, "muls1", FP, paired_muls1)
1718 BU_PAIRED_2 (MERGE00, "merge00", CONST, paired_merge00)
1719 BU_PAIRED_2 (MERGE01, "merge01", CONST, paired_merge01)
1720 BU_PAIRED_2 (MERGE10, "merge10", CONST, paired_merge10)
1721 BU_PAIRED_2 (MERGE11, "merge11", CONST, paired_merge11)
1722
1723 /* 1 argument paired floating point builtin functions. */
1724 BU_PAIRED_1 (ABSV2SF2, "absv2sf2", CONST, paired_absv2sf2)
1725 BU_PAIRED_1 (NABSV2SF2, "nabsv2sf2", CONST, nabsv2sf2)
1726 BU_PAIRED_1 (NEGV2SF2, "negv2sf2", CONST, paired_negv2sf2)
1727 BU_PAIRED_1 (SQRTV2SF2, "sqrtv2sf2", FP, sqrtv2sf2)
1728 BU_PAIRED_1 (RESV2SF, "resv2sf2", FP, resv2sf2)
1729
1730 /* PAIRED builtins that are handled as special cases. */
1731 BU_PAIRED_X (STX, "stx", MISC)
1732 BU_PAIRED_X (LX, "lx", MISC)
1733
1734 /* Paired predicates. */
1735 BU_PAIRED_P (CMPU0, "cmpu0", CONST, paired_cmpu0)
1736 BU_PAIRED_P (CMPU1, "cmpu1", CONST, paired_cmpu1)
1737 \f
1738 /* PowerPC E500 builtins (SPE). */
1739
1740 BU_SPE_2 (EVADDW, "evaddw", MISC, addv2si3)
1741 BU_SPE_2 (EVAND, "evand", MISC, andv2si3)
1742 BU_SPE_2 (EVANDC, "evandc", MISC, spe_evandc)
1743 BU_SPE_2 (EVDIVWS, "evdivws", MISC, divv2si3)
1744 BU_SPE_2 (EVDIVWU, "evdivwu", MISC, spe_evdivwu)
1745 BU_SPE_2 (EVEQV, "eveqv", MISC, spe_eveqv)
1746 BU_SPE_2 (EVFSADD, "evfsadd", MISC, spe_evfsadd)
1747 BU_SPE_2 (EVFSDIV, "evfsdiv", MISC, spe_evfsdiv)
1748 BU_SPE_2 (EVFSMUL, "evfsmul", MISC, spe_evfsmul)
1749 BU_SPE_2 (EVFSSUB, "evfssub", MISC, spe_evfssub)
1750 BU_SPE_2 (EVMERGEHI, "evmergehi", MISC, spe_evmergehi)
1751 BU_SPE_2 (EVMERGEHILO, "evmergehilo", MISC, spe_evmergehilo)
1752 BU_SPE_2 (EVMERGELO, "evmergelo", MISC, spe_evmergelo)
1753 BU_SPE_2 (EVMERGELOHI, "evmergelohi", MISC, spe_evmergelohi)
1754 BU_SPE_2 (EVMHEGSMFAA, "evmhegsmfaa", MISC, spe_evmhegsmfaa)
1755 BU_SPE_2 (EVMHEGSMFAN, "evmhegsmfan", MISC, spe_evmhegsmfan)
1756 BU_SPE_2 (EVMHEGSMIAA, "evmhegsmiaa", MISC, spe_evmhegsmiaa)
1757 BU_SPE_2 (EVMHEGSMIAN, "evmhegsmian", MISC, spe_evmhegsmian)
1758 BU_SPE_2 (EVMHEGUMIAA, "evmhegumiaa", MISC, spe_evmhegumiaa)
1759 BU_SPE_2 (EVMHEGUMIAN, "evmhegumian", MISC, spe_evmhegumian)
1760 BU_SPE_2 (EVMHESMF, "evmhesmf", MISC, spe_evmhesmf)
1761 BU_SPE_2 (EVMHESMFA, "evmhesmfa", MISC, spe_evmhesmfa)
1762 BU_SPE_2 (EVMHESMFAAW, "evmhesmfaaw", MISC, spe_evmhesmfaaw)
1763 BU_SPE_2 (EVMHESMFANW, "evmhesmfanw", MISC, spe_evmhesmfanw)
1764 BU_SPE_2 (EVMHESMI, "evmhesmi", MISC, spe_evmhesmi)
1765 BU_SPE_2 (EVMHESMIA, "evmhesmia", MISC, spe_evmhesmia)
1766 BU_SPE_2 (EVMHESMIAAW, "evmhesmiaaw", MISC, spe_evmhesmiaaw)
1767 BU_SPE_2 (EVMHESMIANW, "evmhesmianw", MISC, spe_evmhesmianw)
1768 BU_SPE_2 (EVMHESSF, "evmhessf", MISC, spe_evmhessf)
1769 BU_SPE_2 (EVMHESSFA, "evmhessfa", MISC, spe_evmhessfa)
1770 BU_SPE_2 (EVMHESSFAAW, "evmhessfaaw", MISC, spe_evmhessfaaw)
1771 BU_SPE_2 (EVMHESSFANW, "evmhessfanw", MISC, spe_evmhessfanw)
1772 BU_SPE_2 (EVMHESSIAAW, "evmhessiaaw", MISC, spe_evmhessiaaw)
1773 BU_SPE_2 (EVMHESSIANW, "evmhessianw", MISC, spe_evmhessianw)
1774 BU_SPE_2 (EVMHEUMI, "evmheumi", MISC, spe_evmheumi)
1775 BU_SPE_2 (EVMHEUMIA, "evmheumia", MISC, spe_evmheumia)
1776 BU_SPE_2 (EVMHEUMIAAW, "evmheumiaaw", MISC, spe_evmheumiaaw)
1777 BU_SPE_2 (EVMHEUMIANW, "evmheumianw", MISC, spe_evmheumianw)
1778 BU_SPE_2 (EVMHEUSIAAW, "evmheusiaaw", MISC, spe_evmheusiaaw)
1779 BU_SPE_2 (EVMHEUSIANW, "evmheusianw", MISC, spe_evmheusianw)
1780 BU_SPE_2 (EVMHOGSMFAA, "evmhogsmfaa", MISC, spe_evmhogsmfaa)
1781 BU_SPE_2 (EVMHOGSMFAN, "evmhogsmfan", MISC, spe_evmhogsmfan)
1782 BU_SPE_2 (EVMHOGSMIAA, "evmhogsmiaa", MISC, spe_evmhogsmiaa)
1783 BU_SPE_2 (EVMHOGSMIAN, "evmhogsmian", MISC, spe_evmhogsmian)
1784 BU_SPE_2 (EVMHOGUMIAA, "evmhogumiaa", MISC, spe_evmhogumiaa)
1785 BU_SPE_2 (EVMHOGUMIAN, "evmhogumian", MISC, spe_evmhogumian)
1786 BU_SPE_2 (EVMHOSMF, "evmhosmf", MISC, spe_evmhosmf)
1787 BU_SPE_2 (EVMHOSMFA, "evmhosmfa", MISC, spe_evmhosmfa)
1788 BU_SPE_2 (EVMHOSMFAAW, "evmhosmfaaw", MISC, spe_evmhosmfaaw)
1789 BU_SPE_2 (EVMHOSMFANW, "evmhosmfanw", MISC, spe_evmhosmfanw)
1790 BU_SPE_2 (EVMHOSMI, "evmhosmi", MISC, spe_evmhosmi)
1791 BU_SPE_2 (EVMHOSMIA, "evmhosmia", MISC, spe_evmhosmia)
1792 BU_SPE_2 (EVMHOSMIAAW, "evmhosmiaaw", MISC, spe_evmhosmiaaw)
1793 BU_SPE_2 (EVMHOSMIANW, "evmhosmianw", MISC, spe_evmhosmianw)
1794 BU_SPE_2 (EVMHOSSF, "evmhossf", MISC, spe_evmhossf)
1795 BU_SPE_2 (EVMHOSSFA, "evmhossfa", MISC, spe_evmhossfa)
1796 BU_SPE_2 (EVMHOSSFAAW, "evmhossfaaw", MISC, spe_evmhossfaaw)
1797 BU_SPE_2 (EVMHOSSFANW, "evmhossfanw", MISC, spe_evmhossfanw)
1798 BU_SPE_2 (EVMHOSSIAAW, "evmhossiaaw", MISC, spe_evmhossiaaw)
1799 BU_SPE_2 (EVMHOSSIANW, "evmhossianw", MISC, spe_evmhossianw)
1800 BU_SPE_2 (EVMHOUMI, "evmhoumi", MISC, spe_evmhoumi)
1801 BU_SPE_2 (EVMHOUMIA, "evmhoumia", MISC, spe_evmhoumia)
1802 BU_SPE_2 (EVMHOUMIAAW, "evmhoumiaaw", MISC, spe_evmhoumiaaw)
1803 BU_SPE_2 (EVMHOUMIANW, "evmhoumianw", MISC, spe_evmhoumianw)
1804 BU_SPE_2 (EVMHOUSIAAW, "evmhousiaaw", MISC, spe_evmhousiaaw)
1805 BU_SPE_2 (EVMHOUSIANW, "evmhousianw", MISC, spe_evmhousianw)
1806 BU_SPE_2 (EVMWHSMF, "evmwhsmf", MISC, spe_evmwhsmf)
1807 BU_SPE_2 (EVMWHSMFA, "evmwhsmfa", MISC, spe_evmwhsmfa)
1808 BU_SPE_2 (EVMWHSMI, "evmwhsmi", MISC, spe_evmwhsmi)
1809 BU_SPE_2 (EVMWHSMIA, "evmwhsmia", MISC, spe_evmwhsmia)
1810 BU_SPE_2 (EVMWHSSF, "evmwhssf", MISC, spe_evmwhssf)
1811 BU_SPE_2 (EVMWHSSFA, "evmwhssfa", MISC, spe_evmwhssfa)
1812 BU_SPE_2 (EVMWHUMI, "evmwhumi", MISC, spe_evmwhumi)
1813 BU_SPE_2 (EVMWHUMIA, "evmwhumia", MISC, spe_evmwhumia)
1814 BU_SPE_2 (EVMWLSMIAAW, "evmwlsmiaaw", MISC, spe_evmwlsmiaaw)
1815 BU_SPE_2 (EVMWLSMIANW, "evmwlsmianw", MISC, spe_evmwlsmianw)
1816 BU_SPE_2 (EVMWLSSIAAW, "evmwlssiaaw", MISC, spe_evmwlssiaaw)
1817 BU_SPE_2 (EVMWLSSIANW, "evmwlssianw", MISC, spe_evmwlssianw)
1818 BU_SPE_2 (EVMWLUMI, "evmwlumi", MISC, spe_evmwlumi)
1819 BU_SPE_2 (EVMWLUMIA, "evmwlumia", MISC, spe_evmwlumia)
1820 BU_SPE_2 (EVMWLUMIAAW, "evmwlumiaaw", MISC, spe_evmwlumiaaw)
1821 BU_SPE_2 (EVMWLUMIANW, "evmwlumianw", MISC, spe_evmwlumianw)
1822 BU_SPE_2 (EVMWLUSIAAW, "evmwlusiaaw", MISC, spe_evmwlusiaaw)
1823 BU_SPE_2 (EVMWLUSIANW, "evmwlusianw", MISC, spe_evmwlusianw)
1824 BU_SPE_2 (EVMWSMF, "evmwsmf", MISC, spe_evmwsmf)
1825 BU_SPE_2 (EVMWSMFA, "evmwsmfa", MISC, spe_evmwsmfa)
1826 BU_SPE_2 (EVMWSMFAA, "evmwsmfaa", MISC, spe_evmwsmfaa)
1827 BU_SPE_2 (EVMWSMFAN, "evmwsmfan", MISC, spe_evmwsmfan)
1828 BU_SPE_2 (EVMWSMI, "evmwsmi", MISC, spe_evmwsmi)
1829 BU_SPE_2 (EVMWSMIA, "evmwsmia", MISC, spe_evmwsmia)
1830 BU_SPE_2 (EVMWSMIAA, "evmwsmiaa", MISC, spe_evmwsmiaa)
1831 BU_SPE_2 (EVMWSMIAN, "evmwsmian", MISC, spe_evmwsmian)
1832 BU_SPE_2 (EVMWSSF, "evmwssf", MISC, spe_evmwssf)
1833 BU_SPE_2 (EVMWSSFA, "evmwssfa", MISC, spe_evmwssfa)
1834 BU_SPE_2 (EVMWSSFAA, "evmwssfaa", MISC, spe_evmwssfaa)
1835 BU_SPE_2 (EVMWSSFAN, "evmwssfan", MISC, spe_evmwssfan)
1836 BU_SPE_2 (EVMWUMI, "evmwumi", MISC, spe_evmwumi)
1837 BU_SPE_2 (EVMWUMIA, "evmwumia", MISC, spe_evmwumia)
1838 BU_SPE_2 (EVMWUMIAA, "evmwumiaa", MISC, spe_evmwumiaa)
1839 BU_SPE_2 (EVMWUMIAN, "evmwumian", MISC, spe_evmwumian)
1840 BU_SPE_2 (EVNAND, "evnand", MISC, spe_evnand)
1841 BU_SPE_2 (EVNOR, "evnor", MISC, spe_evnor)
1842 BU_SPE_2 (EVOR, "evor", MISC, spe_evor)
1843 BU_SPE_2 (EVORC, "evorc", MISC, spe_evorc)
1844 BU_SPE_2 (EVRLW, "evrlw", MISC, spe_evrlw)
1845 BU_SPE_2 (EVSLW, "evslw", MISC, spe_evslw)
1846 BU_SPE_2 (EVSRWS, "evsrws", MISC, spe_evsrws)
1847 BU_SPE_2 (EVSRWU, "evsrwu", MISC, spe_evsrwu)
1848 BU_SPE_2 (EVSUBFW, "evsubfw", MISC, subv2si3)
1849
1850 /* SPE binary operations expecting a 5-bit unsigned literal. */
1851 BU_SPE_2 (EVADDIW, "evaddiw", MISC, spe_evaddiw)
1852
1853 BU_SPE_2 (EVRLWI, "evrlwi", MISC, spe_evrlwi)
1854 BU_SPE_2 (EVSLWI, "evslwi", MISC, spe_evslwi)
1855 BU_SPE_2 (EVSRWIS, "evsrwis", MISC, spe_evsrwis)
1856 BU_SPE_2 (EVSRWIU, "evsrwiu", MISC, spe_evsrwiu)
1857 BU_SPE_2 (EVSUBIFW, "evsubifw", MISC, spe_evsubifw)
1858 BU_SPE_2 (EVMWHSSFAA, "evmwhssfaa", MISC, spe_evmwhssfaa)
1859 BU_SPE_2 (EVMWHSSMAA, "evmwhssmaa", MISC, spe_evmwhssmaa)
1860 BU_SPE_2 (EVMWHSMFAA, "evmwhsmfaa", MISC, spe_evmwhsmfaa)
1861 BU_SPE_2 (EVMWHSMIAA, "evmwhsmiaa", MISC, spe_evmwhsmiaa)
1862 BU_SPE_2 (EVMWHUSIAA, "evmwhusiaa", MISC, spe_evmwhusiaa)
1863 BU_SPE_2 (EVMWHUMIAA, "evmwhumiaa", MISC, spe_evmwhumiaa)
1864 BU_SPE_2 (EVMWHSSFAN, "evmwhssfan", MISC, spe_evmwhssfan)
1865 BU_SPE_2 (EVMWHSSIAN, "evmwhssian", MISC, spe_evmwhssian)
1866 BU_SPE_2 (EVMWHSMFAN, "evmwhsmfan", MISC, spe_evmwhsmfan)
1867 BU_SPE_2 (EVMWHSMIAN, "evmwhsmian", MISC, spe_evmwhsmian)
1868 BU_SPE_2 (EVMWHUSIAN, "evmwhusian", MISC, spe_evmwhusian)
1869 BU_SPE_2 (EVMWHUMIAN, "evmwhumian", MISC, spe_evmwhumian)
1870 BU_SPE_2 (EVMWHGSSFAA, "evmwhgssfaa", MISC, spe_evmwhgssfaa)
1871 BU_SPE_2 (EVMWHGSMFAA, "evmwhgsmfaa", MISC, spe_evmwhgsmfaa)
1872 BU_SPE_2 (EVMWHGSMIAA, "evmwhgsmiaa", MISC, spe_evmwhgsmiaa)
1873 BU_SPE_2 (EVMWHGUMIAA, "evmwhgumiaa", MISC, spe_evmwhgumiaa)
1874 BU_SPE_2 (EVMWHGSSFAN, "evmwhgssfan", MISC, spe_evmwhgssfan)
1875 BU_SPE_2 (EVMWHGSMFAN, "evmwhgsmfan", MISC, spe_evmwhgsmfan)
1876 BU_SPE_2 (EVMWHGSMIAN, "evmwhgsmian", MISC, spe_evmwhgsmian)
1877 BU_SPE_2 (EVMWHGUMIAN, "evmwhgumian", MISC, spe_evmwhgumian)
1878 BU_SPE_2 (BRINC, "brinc", MISC, spe_brinc)
1879 BU_SPE_2 (EVXOR, "evxor", MISC, xorv2si3)
1880
1881 /* SPE predicate builtins. */
1882 BU_SPE_P (EVCMPEQ, "evcmpeq", MISC, spe_evcmpeq)
1883 BU_SPE_P (EVCMPGTS, "evcmpgts", MISC, spe_evcmpgts)
1884 BU_SPE_P (EVCMPGTU, "evcmpgtu", MISC, spe_evcmpgtu)
1885 BU_SPE_P (EVCMPLTS, "evcmplts", MISC, spe_evcmplts)
1886 BU_SPE_P (EVCMPLTU, "evcmpltu", MISC, spe_evcmpltu)
1887 BU_SPE_P (EVFSCMPEQ, "evfscmpeq", MISC, spe_evfscmpeq)
1888 BU_SPE_P (EVFSCMPGT, "evfscmpgt", MISC, spe_evfscmpgt)
1889 BU_SPE_P (EVFSCMPLT, "evfscmplt", MISC, spe_evfscmplt)
1890 BU_SPE_P (EVFSTSTEQ, "evfststeq", MISC, spe_evfststeq)
1891 BU_SPE_P (EVFSTSTGT, "evfststgt", MISC, spe_evfststgt)
1892 BU_SPE_P (EVFSTSTLT, "evfststlt", MISC, spe_evfststlt)
1893
1894 /* SPE evsel builtins. */
1895 BU_SPE_E (EVSEL_CMPGTS, "evsel_gts", MISC, spe_evcmpgts)
1896 BU_SPE_E (EVSEL_CMPGTU, "evsel_gtu", MISC, spe_evcmpgtu)
1897 BU_SPE_E (EVSEL_CMPLTS, "evsel_lts", MISC, spe_evcmplts)
1898 BU_SPE_E (EVSEL_CMPLTU, "evsel_ltu", MISC, spe_evcmpltu)
1899 BU_SPE_E (EVSEL_CMPEQ, "evsel_eq", MISC, spe_evcmpeq)
1900 BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt", MISC, spe_evfscmpgt)
1901 BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt", MISC, spe_evfscmplt)
1902 BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq", MISC, spe_evfscmpeq)
1903 BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC, spe_evfststgt)
1904 BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC, spe_evfststlt)
1905 BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC, spe_evfststeq)
1906
1907 BU_SPE_1 (EVABS, "evabs", CONST, absv2si2)
1908 BU_SPE_1 (EVADDSMIAAW, "evaddsmiaaw", CONST, spe_evaddsmiaaw)
1909 BU_SPE_1 (EVADDSSIAAW, "evaddssiaaw", CONST, spe_evaddssiaaw)
1910 BU_SPE_1 (EVADDUMIAAW, "evaddumiaaw", CONST, spe_evaddumiaaw)
1911 BU_SPE_1 (EVADDUSIAAW, "evaddusiaaw", CONST, spe_evaddusiaaw)
1912 BU_SPE_1 (EVCNTLSW, "evcntlsw", CONST, spe_evcntlsw)
1913 BU_SPE_1 (EVCNTLZW, "evcntlzw", CONST, spe_evcntlzw)
1914 BU_SPE_1 (EVEXTSB, "evextsb", CONST, spe_evextsb)
1915 BU_SPE_1 (EVEXTSH, "evextsh", CONST, spe_evextsh)
1916 BU_SPE_1 (EVFSABS, "evfsabs", CONST, spe_evfsabs)
1917 BU_SPE_1 (EVFSCFSF, "evfscfsf", CONST, spe_evfscfsf)
1918 BU_SPE_1 (EVFSCFSI, "evfscfsi", CONST, spe_evfscfsi)
1919 BU_SPE_1 (EVFSCFUF, "evfscfuf", CONST, spe_evfscfuf)
1920 BU_SPE_1 (EVFSCFUI, "evfscfui", CONST, spe_evfscfui)
1921 BU_SPE_1 (EVFSCTSF, "evfsctsf", CONST, spe_evfsctsf)
1922 BU_SPE_1 (EVFSCTSI, "evfsctsi", CONST, spe_evfsctsi)
1923 BU_SPE_1 (EVFSCTSIZ, "evfsctsiz", CONST, spe_evfsctsiz)
1924 BU_SPE_1 (EVFSCTUF, "evfsctuf", CONST, spe_evfsctuf)
1925 BU_SPE_1 (EVFSCTUI, "evfsctui", CONST, spe_evfsctui)
1926 BU_SPE_1 (EVFSCTUIZ, "evfsctuiz", CONST, spe_evfsctuiz)
1927 BU_SPE_1 (EVFSNABS, "evfsnabs", CONST, spe_evfsnabs)
1928 BU_SPE_1 (EVFSNEG, "evfsneg", CONST, spe_evfsneg)
1929 BU_SPE_1 (EVMRA, "evmra", CONST, spe_evmra)
1930 BU_SPE_1 (EVNEG, "evneg", CONST, negv2si2)
1931 BU_SPE_1 (EVRNDW, "evrndw", CONST, spe_evrndw)
1932 BU_SPE_1 (EVSUBFSMIAAW, "evsubfsmiaaw", CONST, spe_evsubfsmiaaw)
1933 BU_SPE_1 (EVSUBFSSIAAW, "evsubfssiaaw", CONST, spe_evsubfssiaaw)
1934 BU_SPE_1 (EVSUBFUMIAAW, "evsubfumiaaw", CONST, spe_evsubfumiaaw)
1935 BU_SPE_1 (EVSUBFUSIAAW, "evsubfusiaaw", CONST, spe_evsubfusiaaw)
1936
1937 /* SPE builtins that are handled as special cases. */
1938 BU_SPE_X (EVLDD, "evldd", MISC)
1939 BU_SPE_X (EVLDDX, "evlddx", MISC)
1940 BU_SPE_X (EVLDH, "evldh", MISC)
1941 BU_SPE_X (EVLDHX, "evldhx", MISC)
1942 BU_SPE_X (EVLDW, "evldw", MISC)
1943 BU_SPE_X (EVLDWX, "evldwx", MISC)
1944 BU_SPE_X (EVLHHESPLAT, "evlhhesplat", MISC)
1945 BU_SPE_X (EVLHHESPLATX, "evlhhesplatx", MISC)
1946 BU_SPE_X (EVLHHOSSPLAT, "evlhhossplat", MISC)
1947 BU_SPE_X (EVLHHOSSPLATX, "evlhhossplatx", MISC)
1948 BU_SPE_X (EVLHHOUSPLAT, "evlhhousplat", MISC)
1949 BU_SPE_X (EVLHHOUSPLATX, "evlhhousplatx", MISC)
1950 BU_SPE_X (EVLWHE, "evlwhe", MISC)
1951 BU_SPE_X (EVLWHEX, "evlwhex", MISC)
1952 BU_SPE_X (EVLWHOS, "evlwhos", MISC)
1953 BU_SPE_X (EVLWHOSX, "evlwhosx", MISC)
1954 BU_SPE_X (EVLWHOU, "evlwhou", MISC)
1955 BU_SPE_X (EVLWHOUX, "evlwhoux", MISC)
1956 BU_SPE_X (EVLWHSPLAT, "evlwhsplat", MISC)
1957 BU_SPE_X (EVLWHSPLATX, "evlwhsplatx", MISC)
1958 BU_SPE_X (EVLWWSPLAT, "evlwwsplat", MISC)
1959 BU_SPE_X (EVLWWSPLATX, "evlwwsplatx", MISC)
1960 BU_SPE_X (EVSPLATFI, "evsplatfi", MISC)
1961 BU_SPE_X (EVSPLATI, "evsplati", MISC)
1962 BU_SPE_X (EVSTDD, "evstdd", MISC)
1963 BU_SPE_X (EVSTDDX, "evstddx", MISC)
1964 BU_SPE_X (EVSTDH, "evstdh", MISC)
1965 BU_SPE_X (EVSTDHX, "evstdhx", MISC)
1966 BU_SPE_X (EVSTDW, "evstdw", MISC)
1967 BU_SPE_X (EVSTDWX, "evstdwx", MISC)
1968 BU_SPE_X (EVSTWHE, "evstwhe", MISC)
1969 BU_SPE_X (EVSTWHEX, "evstwhex", MISC)
1970 BU_SPE_X (EVSTWHO, "evstwho", MISC)
1971 BU_SPE_X (EVSTWHOX, "evstwhox", MISC)
1972 BU_SPE_X (EVSTWWE, "evstwwe", MISC)
1973 BU_SPE_X (EVSTWWEX, "evstwwex", MISC)
1974 BU_SPE_X (EVSTWWO, "evstwwo", MISC)
1975 BU_SPE_X (EVSTWWOX, "evstwwox", MISC)
1976 BU_SPE_X (MFSPEFSCR, "mfspefscr", MISC)
1977 BU_SPE_X (MTSPEFSCR, "mtspefscr", MISC)
1978
1979 \f
1980 /* Power7 builtins, that aren't VSX instructions. */
1981 BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
1982 RS6000_BTC_CONST)
1983
1984 /* Miscellaneous builtins. */
1985 BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE,
1986 RS6000_BTC_FP)
1987
1988 BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES,
1989 RS6000_BTC_FP)
1990
1991 BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE,
1992 RS6000_BTC_FP)
1993
1994 BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES,
1995 RS6000_BTC_FP)
1996
1997 BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase",
1998 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
1999
2000 BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb",
2001 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2002
2003 BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs",
2004 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2005
2006 RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf",
2007 RS6000_BTM_ALWAYS,
2008 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID,
2009 CODE_FOR_rs6000_mtfsf)
2010
2011 /* Darwin CfString builtin. */
2012 BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS,
2013 RS6000_BTC_MISC)