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