]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/rs6000-builtin.def
[gcc]
[thirdparty/gcc.git] / gcc / config / rs6000 / rs6000-builtin.def
CommitLineData
605afdd6 1/* Builtin functions for rs6000/powerpc.
aad93da1 2 Copyright (C) 2009-2017 Free Software Foundation, Inc.
605afdd6 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
0375b229 26/* Before including this file, some macros must be defined:
26a51591 27 RS6000_BUILTIN_0 -- 0 arg builtins
0375b229 28 RS6000_BUILTIN_1 -- 1 arg builtins
29 RS6000_BUILTIN_2 -- 2 arg builtins
30 RS6000_BUILTIN_3 -- 3 arg builtins
31 RS6000_BUILTIN_A -- ABS builtins
32 RS6000_BUILTIN_D -- DST builtins
5088e479 33 RS6000_BUILTIN_H -- HTM builtins
ae52d0de 34 RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins
0375b229 35 RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
0375b229 36 RS6000_BUILTIN_X -- special builtins
37
38 Each of the above macros takes 4 arguments:
39 ENUM Enumeration name
40 NAME String literal for the name
41 MASK Mask of bits that indicate which options enables the builtin
42 ATTR builtin attribute information.
6dd2901c 43 ICODE Insn code of the function that implements the builtin. */
0375b229 44
26a51591 45#ifndef RS6000_BUILTIN_0
46 #error "RS6000_BUILTIN_0 is not defined."
47#endif
48
0375b229 49#ifndef RS6000_BUILTIN_1
50 #error "RS6000_BUILTIN_1 is not defined."
51#endif
52
53#ifndef RS6000_BUILTIN_2
54 #error "RS6000_BUILTIN_2 is not defined."
55#endif
56
57#ifndef RS6000_BUILTIN_3
58 #error "RS6000_BUILTIN_3 is not defined."
59#endif
60
61#ifndef RS6000_BUILTIN_A
62 #error "RS6000_BUILTIN_A is not defined."
63#endif
64
65#ifndef RS6000_BUILTIN_D
66 #error "RS6000_BUILTIN_D is not defined."
67#endif
68
5088e479 69#ifndef RS6000_BUILTIN_H
70 #error "RS6000_BUILTIN_H is not defined."
71#endif
72
0375b229 73#ifndef RS6000_BUILTIN_P
74 #error "RS6000_BUILTIN_P is not defined."
75#endif
76
77#ifndef RS6000_BUILTIN_Q
78 #error "RS6000_BUILTIN_Q is not defined."
79#endif
80
0375b229 81#ifndef RS6000_BUILTIN_X
82 #error "RS6000_BUILTIN_X is not defined."
83#endif
84
85#ifndef BU_AV_1
86/* Define convenience macros using token pasting to allow fitting everything in
87 one line. */
88
89/* Altivec convenience macros. */
90#define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE) \
91 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
92 "__builtin_altivec_" NAME, /* NAME */ \
93 RS6000_BTM_ALTIVEC, /* MASK */ \
94 (RS6000_BTC_ ## ATTR /* ATTR */ \
95 | RS6000_BTC_UNARY), \
96 CODE_FOR_ ## ICODE) /* ICODE */
97
98#define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE) \
99 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
100 "__builtin_altivec_" NAME, /* NAME */ \
101 RS6000_BTM_ALTIVEC, /* MASK */ \
102 (RS6000_BTC_ ## ATTR /* ATTR */ \
103 | RS6000_BTC_BINARY), \
104 CODE_FOR_ ## ICODE) /* ICODE */
105
106#define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE) \
107 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
108 "__builtin_altivec_" NAME, /* NAME */ \
109 RS6000_BTM_ALTIVEC, /* MASK */ \
110 (RS6000_BTC_ ## ATTR /* ATTR */ \
111 | RS6000_BTC_TERNARY), \
112 CODE_FOR_ ## ICODE) /* ICODE */
113
114#define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE) \
115 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
116 "__builtin_altivec_" NAME, /* NAME */ \
117 RS6000_BTM_ALTIVEC, /* MASK */ \
118 (RS6000_BTC_ ## ATTR /* ATTR */ \
119 | RS6000_BTC_ABS), \
120 CODE_FOR_ ## ICODE) /* ICODE */
121
122#define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE) \
123 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
124 "__builtin_altivec_" NAME, /* NAME */ \
125 RS6000_BTM_ALTIVEC, /* MASK */ \
126 (RS6000_BTC_ ## ATTR /* ATTR */ \
127 | RS6000_BTC_DST), \
128 CODE_FOR_ ## ICODE) /* ICODE */
129
f9debd38 130/* All builtins defined with the RS6000_BUILTIN_P macro expect three
131 arguments, the first of which is an integer constant that clarifies
132 the implementation's use of CR6 flags. The integer constant
133 argument may have four values: __CR6_EQ (0) means the predicate is
134 considered true if the equality-test flag of the CR6 condition
135 register is true following execution of the code identified by the
136 ICODE pattern, __CR_EQ_REV (1) means the predicate is considered
137 true if the equality-test flag is false, __CR6_LT (2) means the
138 predicate is considered true if the less-than-test flag is true, and
139 __CR6_LT_REV (3) means the predicate is considered true if the
140 less-than-test flag is false. For all builtins defined by this
141 macro, the pattern selected by ICODE expects three operands, a
142 target and two inputs and is presumed to overwrite the flags of
143 condition register CR6 as a side effect of computing a result into
144 the target register. However, the built-in invocation provides
145 four operands, a target, an integer constant mode, and two inputs.
146 The second and third operands of the built-in function's invocation
147 are automatically mapped into operands 1 and 2 of the pattern
148 identifed by the ICODE argument and additional code is emitted,
149 depending on the value of the constant integer first argument.
150 This special processing happens within the implementation of
151 altivec_expand_predicate_builtin(), which is defined within
152 rs6000.c. The implementation of altivec_expand_predicate_builtin()
153 allocates a scratch register having the same mode as operand 0 to hold
154 the result produced by evaluating ICODE. */
155
0375b229 156#define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE) \
157 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
158 "__builtin_altivec_" NAME, /* NAME */ \
159 RS6000_BTM_ALTIVEC, /* MASK */ \
160 (RS6000_BTC_ ## ATTR /* ATTR */ \
161 | RS6000_BTC_PREDICATE), \
162 CODE_FOR_ ## ICODE) /* ICODE */
163
164#define BU_ALTIVEC_X(ENUM, NAME, ATTR) \
165 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
166 "__builtin_altivec_" NAME, /* NAME */ \
167 RS6000_BTM_ALTIVEC, /* MASK */ \
168 (RS6000_BTC_ ## ATTR /* ATTR */ \
169 | RS6000_BTC_SPECIAL), \
170 CODE_FOR_nothing) /* ICODE */
171
172#define BU_ALTIVEC_C(ENUM, NAME, ATTR) \
173 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \
174 "__builtin_altivec_" NAME, /* NAME */ \
175 (RS6000_BTM_ALTIVEC /* MASK */ \
176 | RS6000_BTM_CELL), \
177 (RS6000_BTC_ ## ATTR /* ATTR */ \
178 | RS6000_BTC_SPECIAL), \
179 CODE_FOR_nothing) /* ICODE */
180
181/* Altivec overloaded builtin function macros. */
182#define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME) \
183 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
184 "__builtin_vec_" NAME, /* NAME */ \
185 RS6000_BTM_ALTIVEC, /* MASK */ \
186 (RS6000_BTC_OVERLOADED /* ATTR */ \
187 | RS6000_BTC_UNARY), \
188 CODE_FOR_nothing) /* ICODE */
189
190#define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME) \
191 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
192 "__builtin_vec_" NAME, /* NAME */ \
193 RS6000_BTM_ALTIVEC, /* MASK */ \
194 (RS6000_BTC_OVERLOADED /* ATTR */ \
195 | RS6000_BTC_BINARY), \
196 CODE_FOR_nothing) /* ICODE */
197
198#define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME) \
199 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
200 "__builtin_vec_" NAME, /* NAME */ \
201 RS6000_BTM_ALTIVEC, /* MASK */ \
202 (RS6000_BTC_OVERLOADED /* ATTR */ \
203 | RS6000_BTC_TERNARY), \
204 CODE_FOR_nothing) /* ICODE */
205
206#define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME) \
207 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
208 "__builtin_vec_" NAME, /* NAME */ \
209 RS6000_BTM_ALTIVEC, /* MASK */ \
210 (RS6000_BTC_OVERLOADED /* ATTR */ \
211 | RS6000_BTC_ABS), \
212 CODE_FOR_nothing) /* ICODE */
213
214#define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME) \
215 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
216 "__builtin_vec_" NAME, /* NAME */ \
217 RS6000_BTM_ALTIVEC, /* MASK */ \
218 (RS6000_BTC_OVERLOADED /* ATTR */ \
219 | RS6000_BTC_DST), \
220 CODE_FOR_nothing) /* ICODE */
221
f9debd38 222/* See the comment on BU_ALTIVEC_P. */
0375b229 223#define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME) \
224 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
225 "__builtin_vec_" NAME, /* NAME */ \
226 RS6000_BTM_ALTIVEC, /* MASK */ \
227 (RS6000_BTC_OVERLOADED /* ATTR */ \
228 | RS6000_BTC_PREDICATE), \
229 CODE_FOR_nothing) /* ICODE */
230
231#define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME) \
232 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
233 "__builtin_vec_" NAME, /* NAME */ \
234 RS6000_BTM_ALTIVEC, /* MASK */ \
235 (RS6000_BTC_OVERLOADED /* ATTR */ \
236 | RS6000_BTC_SPECIAL), \
237 CODE_FOR_nothing) /* ICODE */
238
239/* VSX convenience macros. */
240#define BU_VSX_1(ENUM, NAME, ATTR, ICODE) \
241 RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
242 "__builtin_vsx_" NAME, /* NAME */ \
243 RS6000_BTM_VSX, /* MASK */ \
244 (RS6000_BTC_ ## ATTR /* ATTR */ \
245 | RS6000_BTC_UNARY), \
246 CODE_FOR_ ## ICODE) /* ICODE */
247
248#define BU_VSX_2(ENUM, NAME, ATTR, ICODE) \
249 RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
250 "__builtin_vsx_" NAME, /* NAME */ \
251 RS6000_BTM_VSX, /* MASK */ \
252 (RS6000_BTC_ ## ATTR /* ATTR */ \
253 | RS6000_BTC_BINARY), \
254 CODE_FOR_ ## ICODE) /* ICODE */
255
256#define BU_VSX_3(ENUM, NAME, ATTR, ICODE) \
257 RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
258 "__builtin_vsx_" NAME, /* NAME */ \
259 RS6000_BTM_VSX, /* MASK */ \
260 (RS6000_BTC_ ## ATTR /* ATTR */ \
261 | RS6000_BTC_TERNARY), \
262 CODE_FOR_ ## ICODE) /* ICODE */
263
264#define BU_VSX_A(ENUM, NAME, ATTR, ICODE) \
265 RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
266 "__builtin_vsx_" NAME, /* NAME */ \
267 RS6000_BTM_VSX, /* MASK */ \
268 (RS6000_BTC_ ## ATTR /* ATTR */ \
269 | RS6000_BTC_ABS), \
270 CODE_FOR_ ## ICODE) /* ICODE */
271
f9debd38 272/* See the comment on BU_ALTIVEC_P. */
0375b229 273#define BU_VSX_P(ENUM, NAME, ATTR, ICODE) \
274 RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
275 "__builtin_vsx_" NAME, /* NAME */ \
276 RS6000_BTM_VSX, /* MASK */ \
277 (RS6000_BTC_ ## ATTR /* ATTR */ \
278 | RS6000_BTC_PREDICATE), \
279 CODE_FOR_ ## ICODE) /* ICODE */
280
281#define BU_VSX_X(ENUM, NAME, ATTR) \
282 RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM, /* ENUM */ \
283 "__builtin_vsx_" NAME, /* NAME */ \
284 RS6000_BTM_VSX, /* MASK */ \
285 (RS6000_BTC_ ## ATTR /* ATTR */ \
286 | RS6000_BTC_SPECIAL), \
287 CODE_FOR_nothing) /* ICODE */
288
289/* VSX overloaded builtin function macros. */
290#define BU_VSX_OVERLOAD_1(ENUM, NAME) \
291 RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
292 "__builtin_vec_" NAME, /* NAME */ \
293 RS6000_BTM_VSX, /* MASK */ \
294 (RS6000_BTC_OVERLOADED /* ATTR */ \
295 | RS6000_BTC_UNARY), \
296 CODE_FOR_nothing) /* ICODE */
297
298#define BU_VSX_OVERLOAD_2(ENUM, NAME) \
299 RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
300 "__builtin_vec_" NAME, /* NAME */ \
301 RS6000_BTM_VSX, /* MASK */ \
302 (RS6000_BTC_OVERLOADED /* ATTR */ \
303 | RS6000_BTC_BINARY), \
304 CODE_FOR_nothing) /* ICODE */
305
306#define BU_VSX_OVERLOAD_3(ENUM, NAME) \
307 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
308 "__builtin_vec_" NAME, /* NAME */ \
309 RS6000_BTM_VSX, /* MASK */ \
310 (RS6000_BTC_OVERLOADED /* ATTR */ \
311 | RS6000_BTC_TERNARY), \
312 CODE_FOR_nothing) /* ICODE */
313
314/* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names
315 instead of __builtin_vec. */
316#define BU_VSX_OVERLOAD_3V(ENUM, NAME) \
317 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
318 "__builtin_vsx_" NAME, /* NAME */ \
319 RS6000_BTM_VSX, /* MASK */ \
320 (RS6000_BTC_OVERLOADED /* ATTR */ \
321 | RS6000_BTC_TERNARY), \
322 CODE_FOR_nothing) /* ICODE */
323
324#define BU_VSX_OVERLOAD_X(ENUM, NAME) \
325 RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
326 "__builtin_vec_" NAME, /* NAME */ \
327 RS6000_BTM_VSX, /* MASK */ \
328 (RS6000_BTC_OVERLOADED /* ATTR */ \
329 | RS6000_BTC_SPECIAL), \
330 CODE_FOR_nothing) /* ICODE */
331
9534dff5 332/* ISA 2.05 (power6) convenience macros. */
333/* For functions that depend on the CMPB instruction */
334#define BU_P6_2(ENUM, NAME, ATTR, ICODE) \
335 RS6000_BUILTIN_2 (P6_BUILTIN_ ## ENUM, /* ENUM */ \
336 "__builtin_p6_" NAME, /* NAME */ \
337 RS6000_BTM_CMPB, /* MASK */ \
338 (RS6000_BTC_ ## ATTR /* ATTR */ \
339 | RS6000_BTC_BINARY), \
340 CODE_FOR_ ## ICODE) /* ICODE */
341
342/* For functions that depend on 64-BIT support and on the CMPB instruction */
343#define BU_P6_64BIT_2(ENUM, NAME, ATTR, ICODE) \
344 RS6000_BUILTIN_2 (P6_BUILTIN_ ## ENUM, /* ENUM */ \
345 "__builtin_p6_" NAME, /* NAME */ \
346 RS6000_BTM_CMPB \
347 | RS6000_BTM_64BIT, /* MASK */ \
348 (RS6000_BTC_ ## ATTR /* ATTR */ \
349 | RS6000_BTC_BINARY), \
350 CODE_FOR_ ## ICODE) /* ICODE */
351
352#define BU_P6_OVERLOAD_2(ENUM, NAME) \
353 RS6000_BUILTIN_2 (P6_OV_BUILTIN_ ## ENUM, /* ENUM */ \
354 "__builtin_" NAME, /* NAME */ \
355 RS6000_BTM_CMPB, /* MASK */ \
356 (RS6000_BTC_OVERLOADED /* ATTR */ \
357 | RS6000_BTC_BINARY), \
358 CODE_FOR_nothing) /* ICODE */
359
ae52d0de 360/* ISA 2.07 (power8) vector convenience macros. */
81f0e7d0 361/* For the instructions that are encoded as altivec instructions use
362 __builtin_altivec_ as the builtin name. */
363#define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE) \
364 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
365 "__builtin_altivec_" NAME, /* NAME */ \
366 RS6000_BTM_P8_VECTOR, /* MASK */ \
367 (RS6000_BTC_ ## ATTR /* ATTR */ \
368 | RS6000_BTC_UNARY), \
369 CODE_FOR_ ## ICODE) /* ICODE */
370
371#define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE) \
372 RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
373 "__builtin_altivec_" NAME, /* NAME */ \
374 RS6000_BTM_P8_VECTOR, /* MASK */ \
375 (RS6000_BTC_ ## ATTR /* ATTR */ \
376 | RS6000_BTC_BINARY), \
377 CODE_FOR_ ## ICODE) /* ICODE */
378
ae61c502 379#define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE) \
380 RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
381 "__builtin_altivec_" NAME, /* NAME */ \
382 RS6000_BTM_P8_VECTOR, /* MASK */ \
383 (RS6000_BTC_ ## ATTR /* ATTR */ \
384 | RS6000_BTC_TERNARY), \
385 CODE_FOR_ ## ICODE) /* ICODE */
386
f9debd38 387/* See the comment on BU_ALTIVEC_P. */
81f0e7d0 388#define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE) \
389 RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
390 "__builtin_altivec_" NAME, /* NAME */ \
391 RS6000_BTM_P8_VECTOR, /* MASK */ \
392 (RS6000_BTC_ ## ATTR /* ATTR */ \
393 | RS6000_BTC_PREDICATE), \
394 CODE_FOR_ ## ICODE) /* ICODE */
395
396/* For the instructions encoded as VSX instructions use __builtin_vsx as the
397 builtin name. */
398#define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE) \
399 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \
400 "__builtin_vsx_" NAME, /* NAME */ \
401 RS6000_BTM_P8_VECTOR, /* MASK */ \
402 (RS6000_BTC_ ## ATTR /* ATTR */ \
403 | RS6000_BTC_UNARY), \
404 CODE_FOR_ ## ICODE) /* ICODE */
405
406#define BU_P8V_OVERLOAD_1(ENUM, NAME) \
407 RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
408 "__builtin_vec_" NAME, /* NAME */ \
409 RS6000_BTM_P8_VECTOR, /* MASK */ \
410 (RS6000_BTC_OVERLOADED /* ATTR */ \
411 | RS6000_BTC_UNARY), \
412 CODE_FOR_nothing) /* ICODE */
413
414#define BU_P8V_OVERLOAD_2(ENUM, NAME) \
415 RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
416 "__builtin_vec_" NAME, /* NAME */ \
417 RS6000_BTM_P8_VECTOR, /* MASK */ \
418 (RS6000_BTC_OVERLOADED /* ATTR */ \
419 | RS6000_BTC_BINARY), \
420 CODE_FOR_nothing) /* ICODE */
421
ae61c502 422#define BU_P8V_OVERLOAD_3(ENUM, NAME) \
423 RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
424 "__builtin_vec_" NAME, /* NAME */ \
425 RS6000_BTM_P8_VECTOR, /* MASK */ \
426 (RS6000_BTC_OVERLOADED /* ATTR */ \
427 | RS6000_BTC_TERNARY), \
428 CODE_FOR_nothing) /* ICODE */
429
81f0e7d0 430/* Crypto convenience macros. */
431#define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE) \
432 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
433 "__builtin_crypto_" NAME, /* NAME */ \
434 RS6000_BTM_CRYPTO, /* MASK */ \
435 (RS6000_BTC_ ## ATTR /* ATTR */ \
436 | RS6000_BTC_UNARY), \
437 CODE_FOR_ ## ICODE) /* ICODE */
438
439#define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE) \
440 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
441 "__builtin_crypto_" NAME, /* NAME */ \
442 RS6000_BTM_CRYPTO, /* MASK */ \
443 (RS6000_BTC_ ## ATTR /* ATTR */ \
444 | RS6000_BTC_BINARY), \
445 CODE_FOR_ ## ICODE) /* ICODE */
446
eb3421e6 447#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE) \
448 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
449 "__builtin_crypto_" NAME, /* NAME */ \
450 RS6000_BTM_P8_VECTOR, /* MASK */ \
451 (RS6000_BTC_ ## ATTR /* ATTR */ \
452 | RS6000_BTC_BINARY), \
453 CODE_FOR_ ## ICODE) /* ICODE */
454
81f0e7d0 455#define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE) \
456 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
457 "__builtin_crypto_" NAME, /* NAME */ \
458 RS6000_BTM_CRYPTO, /* MASK */ \
459 (RS6000_BTC_ ## ATTR /* ATTR */ \
460 | RS6000_BTC_TERNARY), \
461 CODE_FOR_ ## ICODE) /* ICODE */
462
eb3421e6 463#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE) \
464 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
465 "__builtin_crypto_" NAME, /* NAME */ \
466 RS6000_BTM_P8_VECTOR, /* MASK */ \
467 (RS6000_BTC_ ## ATTR /* ATTR */ \
468 | RS6000_BTC_TERNARY), \
469 CODE_FOR_ ## ICODE) /* ICODE */
470
81f0e7d0 471#define BU_CRYPTO_OVERLOAD_1(ENUM, NAME) \
472 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
473 "__builtin_crypto_" NAME, /* NAME */ \
474 RS6000_BTM_CRYPTO, /* MASK */ \
475 (RS6000_BTC_OVERLOADED /* ATTR */ \
476 | RS6000_BTC_UNARY), \
477 CODE_FOR_nothing) /* ICODE */
478
eb3421e6 479#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME) \
81f0e7d0 480 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
481 "__builtin_crypto_" NAME, /* NAME */ \
eb3421e6 482 RS6000_BTM_P8_VECTOR, /* MASK */ \
81f0e7d0 483 (RS6000_BTC_OVERLOADED /* ATTR */ \
484 | RS6000_BTC_BINARY), \
485 CODE_FOR_nothing) /* ICODE */
486
487#define BU_CRYPTO_OVERLOAD_3(ENUM, NAME) \
488 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
489 "__builtin_crypto_" NAME, /* NAME */ \
490 RS6000_BTM_CRYPTO, /* MASK */ \
491 (RS6000_BTC_OVERLOADED /* ATTR */ \
492 | RS6000_BTC_TERNARY), \
493 CODE_FOR_nothing) /* ICODE */
494
eb3421e6 495#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME) \
496 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \
497 "__builtin_crypto_" NAME, /* NAME */ \
498 RS6000_BTM_P8_VECTOR, /* MASK */ \
499 (RS6000_BTC_OVERLOADED /* ATTR */ \
500 | RS6000_BTC_TERNARY), \
501 CODE_FOR_nothing) /* ICODE */
502
5088e479 503/* HTM convenience macros. */
504#define BU_HTM_0(ENUM, NAME, ATTR, ICODE) \
505 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
506 "__builtin_" NAME, /* NAME */ \
507 RS6000_BTM_HTM, /* MASK */ \
508 RS6000_BTC_ ## ATTR, /* ATTR */ \
509 CODE_FOR_ ## ICODE) /* ICODE */
510
511#define BU_HTM_1(ENUM, NAME, ATTR, ICODE) \
512 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
513 "__builtin_" NAME, /* NAME */ \
514 RS6000_BTM_HTM, /* MASK */ \
515 (RS6000_BTC_ ## ATTR /* ATTR */ \
516 | RS6000_BTC_UNARY), \
517 CODE_FOR_ ## ICODE) /* ICODE */
518
519#define BU_HTM_2(ENUM, NAME, ATTR, ICODE) \
520 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
521 "__builtin_" NAME, /* NAME */ \
522 RS6000_BTM_HTM, /* MASK */ \
523 (RS6000_BTC_ ## ATTR /* ATTR */ \
524 | RS6000_BTC_BINARY), \
525 CODE_FOR_ ## ICODE) /* ICODE */
526
527#define BU_HTM_3(ENUM, NAME, ATTR, ICODE) \
528 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
529 "__builtin_" NAME, /* NAME */ \
530 RS6000_BTM_HTM, /* MASK */ \
531 (RS6000_BTC_ ## ATTR /* ATTR */ \
532 | RS6000_BTC_TERNARY), \
533 CODE_FOR_ ## ICODE) /* ICODE */
534
cb2c281a 535#define BU_HTM_V1(ENUM, NAME, ATTR, ICODE) \
5088e479 536 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \
537 "__builtin_" NAME, /* NAME */ \
538 RS6000_BTM_HTM, /* MASK */ \
539 (RS6000_BTC_ ## ATTR /* ATTR */ \
540 | RS6000_BTC_UNARY \
5088e479 541 | RS6000_BTC_VOID), \
542 CODE_FOR_ ## ICODE) /* ICODE */
543
0375b229 544/* Paired floating point convenience macros. */
545#define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE) \
546 RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
547 "__builtin_paired_" NAME, /* NAME */ \
548 RS6000_BTM_PAIRED, /* MASK */ \
549 (RS6000_BTC_ ## ATTR /* ATTR */ \
550 | RS6000_BTC_UNARY), \
551 CODE_FOR_ ## ICODE) /* ICODE */
552
553#define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE) \
554 RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
555 "__builtin_paired_" NAME, /* NAME */ \
556 RS6000_BTM_PAIRED, /* MASK */ \
557 (RS6000_BTC_ ## ATTR /* ATTR */ \
558 | RS6000_BTC_BINARY), \
559 CODE_FOR_ ## ICODE) /* ICODE */
560
561#define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE) \
562 RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
563 "__builtin_paired_" NAME, /* NAME */ \
564 RS6000_BTM_PAIRED, /* MASK */ \
565 (RS6000_BTC_ ## ATTR /* ATTR */ \
566 | RS6000_BTC_TERNARY), \
567 CODE_FOR_ ## ICODE) /* ICODE */
568
569#define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE) \
570 RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
571 "__builtin_paired_" NAME, /* NAME */ \
572 RS6000_BTM_PAIRED, /* MASK */ \
573 (RS6000_BTC_ ## ATTR /* ATTR */ \
574 | RS6000_BTC_PREDICATE), \
575 CODE_FOR_ ## ICODE) /* ICODE */
576
577#define BU_PAIRED_X(ENUM, NAME, ATTR) \
578 RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \
579 "__builtin_paired_" NAME, /* NAME */ \
580 RS6000_BTM_PAIRED, /* MASK */ \
581 (RS6000_BTC_ ## ATTR /* ATTR */ \
582 | RS6000_BTC_SPECIAL), \
583 CODE_FOR_nothing) /* ICODE */
584
585#define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR) \
586 RS6000_BUILTIN_X (ENUM, /* ENUM */ \
587 NAME, /* NAME */ \
588 MASK, /* MASK */ \
589 (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \
590 CODE_FOR_nothing) /* ICODE */
ac0adecc 591
592
593/* Decimal floating point builtins for instructions. */
594#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \
595 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
596 "__builtin_" NAME, /* NAME */ \
597 RS6000_BTM_DFP, /* MASK */ \
598 (RS6000_BTC_ ## ATTR /* ATTR */ \
599 | RS6000_BTC_UNARY), \
600 CODE_FOR_ ## ICODE) /* ICODE */
601
602#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \
603 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
604 "__builtin_" NAME, /* NAME */ \
605 RS6000_BTM_DFP, /* MASK */ \
606 (RS6000_BTC_ ## ATTR /* ATTR */ \
607 | RS6000_BTC_BINARY), \
608 CODE_FOR_ ## ICODE) /* ICODE */
609
610
03eca6d3 611/* Miscellaneous builtins for instructions added prior to ISA 2.04. These
612 operate on floating point registers. */
613#define BU_FP_MISC_1(ENUM, NAME, ATTR, ICODE) \
614 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
615 "__builtin_" NAME, /* NAME */ \
616 RS6000_BTM_HARD_FLOAT, /* MASK */ \
617 (RS6000_BTC_ ## ATTR /* ATTR */ \
618 | RS6000_BTC_UNARY), \
619 CODE_FOR_ ## ICODE) /* ICODE */
620
ac0adecc 621/* Miscellaneous builtins for instructions added in ISA 2.06. These
622 instructions don't require either the DFP or VSX options, just the basic ISA
623 2.06 (popcntd) enablement since they operate on general purpose
624 registers. */
625#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \
626 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
627 "__builtin_" NAME, /* NAME */ \
628 RS6000_BTM_POPCNTD, /* MASK */ \
629 (RS6000_BTC_ ## ATTR /* ATTR */ \
630 | RS6000_BTC_UNARY), \
631 CODE_FOR_ ## ICODE) /* ICODE */
632
633#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \
634 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
635 "__builtin_" NAME, /* NAME */ \
636 RS6000_BTM_POPCNTD, /* MASK */ \
637 (RS6000_BTC_ ## ATTR /* ATTR */ \
638 | RS6000_BTC_BINARY), \
639 CODE_FOR_ ## ICODE) /* ICODE */
640
641
642/* Miscellaneous builtins for instructions added in ISA 2.07. These
643 instructions do require the ISA 2.07 vector support, but they aren't vector
644 instructions. */
645#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \
646 RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
647 "__builtin_" NAME, /* NAME */ \
648 RS6000_BTM_P8_VECTOR, /* MASK */ \
649 (RS6000_BTC_ ## ATTR /* ATTR */ \
650 | RS6000_BTC_TERNARY), \
651 CODE_FOR_ ## ICODE) /* ICODE */
652
1d2fa40a 653/* 128-bit long double floating point builtins. */
654#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \
ac0adecc 655 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
656 "__builtin_" NAME, /* NAME */ \
1d2fa40a 657 (RS6000_BTM_HARD_FLOAT /* MASK */ \
658 | RS6000_BTM_LDBL128), \
ac0adecc 659 (RS6000_BTC_ ## ATTR /* ATTR */ \
660 | RS6000_BTC_BINARY), \
661 CODE_FOR_ ## ICODE) /* ICODE */
662
2275a11d 663/* IEEE 128-bit floating-point builtins. */
664#define BU_FLOAT128_2(ENUM, NAME, ATTR, ICODE) \
665 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
666 "__builtin_" NAME, /* NAME */ \
667 RS6000_BTM_FLOAT128, /* MASK */ \
668 (RS6000_BTC_ ## ATTR /* ATTR */ \
669 | RS6000_BTC_BINARY), \
670 CODE_FOR_ ## ICODE) /* ICODE */
671
672#define BU_FLOAT128_1(ENUM, NAME, ATTR, ICODE) \
673 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
674 "__builtin_" NAME, /* NAME */ \
675 RS6000_BTM_FLOAT128, /* MASK */ \
676 (RS6000_BTC_ ## ATTR /* ATTR */ \
677 | RS6000_BTC_UNARY), \
678 CODE_FOR_ ## ICODE) /* ICODE */
af648be2 679
79fbd64a 680/* IEEE 128-bit floating-point builtins that need the ISA 3.0 hardware. */
681#define BU_FLOAT128_1_HW(ENUM, NAME, ATTR, ICODE) \
682 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
683 "__builtin_" NAME, /* NAME */ \
684 RS6000_BTM_FLOAT128_HW, /* MASK */ \
685 (RS6000_BTC_ ## ATTR /* ATTR */ \
686 | RS6000_BTC_UNARY), \
687 CODE_FOR_ ## ICODE) /* ICODE */
688
c217f44e 689#define BU_FLOAT128_2_HW(ENUM, NAME, ATTR, ICODE) \
690 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
691 "__builtin_" NAME, /* NAME */ \
692 RS6000_BTM_FLOAT128_HW, /* MASK */ \
693 (RS6000_BTC_ ## ATTR /* ATTR */ \
694 | RS6000_BTC_BINARY), \
695 CODE_FOR_ ## ICODE) /* ICODE */
696
79fbd64a 697#define BU_FLOAT128_3_HW(ENUM, NAME, ATTR, ICODE) \
698 RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
699 "__builtin_" NAME, /* NAME */ \
700 RS6000_BTM_FLOAT128_HW, /* MASK */ \
701 (RS6000_BTC_ ## ATTR /* ATTR */ \
702 | RS6000_BTC_TERNARY), \
703 CODE_FOR_ ## ICODE) /* ICODE */
704
af648be2 705/* Miscellaneous builtins for instructions added in ISA 3.0. These
706 instructions don't require either the DFP or VSX options, just the basic
707 ISA 3.0 enablement since they operate on general purpose registers. */
17c32c4a 708#define BU_P9_MISC_0(ENUM, NAME, ATTR, ICODE) \
709 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
710 "__builtin_" NAME, /* NAME */ \
711 RS6000_BTM_P9_MISC, /* MASK */ \
712 (RS6000_BTC_ ## ATTR /* ATTR */ \
713 | RS6000_BTC_SPECIAL), \
714 CODE_FOR_ ## ICODE) /* ICODE */
715
af648be2 716#define BU_P9_MISC_1(ENUM, NAME, ATTR, ICODE) \
717 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
718 "__builtin_" NAME, /* NAME */ \
17c32c4a 719 RS6000_BTM_P9_MISC, /* MASK */ \
af648be2 720 (RS6000_BTC_ ## ATTR /* ATTR */ \
721 | RS6000_BTC_UNARY), \
722 CODE_FOR_ ## ICODE) /* ICODE */
723
724/* Miscellaneous builtins for instructions added in ISA 3.0. These
725 instructions don't require either the DFP or VSX options, just the basic
726 ISA 3.0 enablement since they operate on general purpose registers,
727 and they require 64-bit addressing. */
728#define BU_P9_64BIT_MISC_0(ENUM, NAME, ATTR, ICODE) \
729 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
730 "__builtin_" NAME, /* NAME */ \
17c32c4a 731 RS6000_BTM_P9_MISC \
af648be2 732 | RS6000_BTM_64BIT, /* MASK */ \
733 (RS6000_BTC_ ## ATTR /* ATTR */ \
734 | RS6000_BTC_SPECIAL), \
735 CODE_FOR_ ## ICODE) /* ICODE */
736
17c32c4a 737/* Miscellaneous builtins for decimal floating point instructions
738 added in ISA 3.0. These instructions don't require the VSX
739 options, just the basic ISA 3.0 enablement since they operate on
740 general purpose registers. */
741#define BU_P9_DFP_MISC_0(ENUM, NAME, ATTR, ICODE) \
af648be2 742 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
743 "__builtin_" NAME, /* NAME */ \
17c32c4a 744 RS6000_BTM_P9_MISC, /* MASK */ \
af648be2 745 (RS6000_BTC_ ## ATTR /* ATTR */ \
746 | RS6000_BTC_SPECIAL), \
747 CODE_FOR_ ## ICODE) /* ICODE */
748
17c32c4a 749#define BU_P9_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \
750 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
751 "__builtin_" NAME, /* NAME */ \
752 RS6000_BTM_P9_MISC, /* MASK */ \
753 (RS6000_BTC_ ## ATTR /* ATTR */ \
754 | RS6000_BTC_SPECIAL), \
755 CODE_FOR_ ## ICODE) /* ICODE */
756
757#define BU_P9_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \
758 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
759 "__builtin_" NAME, /* NAME */ \
760 RS6000_BTM_P9_MISC, /* MASK */ \
761 (RS6000_BTC_ ## ATTR /* ATTR */ \
762 | RS6000_BTC_SPECIAL), \
763 CODE_FOR_ ## ICODE) /* ICODE */
764
765/* Decimal floating point overloaded functions added in ISA 3.0 */
766#define BU_P9_DFP_OVERLOAD_1(ENUM, NAME) \
767 RS6000_BUILTIN_1 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \
768 "__builtin_dfp_" NAME, /* NAME */ \
769 RS6000_BTM_P9_MISC, /* MASK */ \
770 (RS6000_BTC_OVERLOADED /* ATTR */ \
771 | RS6000_BTC_UNARY), \
772 CODE_FOR_nothing) /* ICODE */
773
774#define BU_P9_DFP_OVERLOAD_2(ENUM, NAME) \
775 RS6000_BUILTIN_2 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \
776 "__builtin_dfp_" NAME, /* NAME */ \
777 RS6000_BTM_P9_MISC, /* MASK */ \
778 (RS6000_BTC_OVERLOADED /* ATTR */ \
779 | RS6000_BTC_BINARY), \
780 CODE_FOR_nothing) /* ICODE */
781
782#define BU_P9_DFP_OVERLOAD_3(ENUM, NAME) \
783 RS6000_BUILTIN_3 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \
784 "__builtin_dfp_" NAME, /* NAME */ \
785 RS6000_BTM_P9_MISC, /* MASK */ \
786 (RS6000_BTC_OVERLOADED /* ATTR */ \
787 | RS6000_BTC_TERNARY), \
788 CODE_FOR_nothing) /* ICODE */
789
af648be2 790/* ISA 3.0 (power9) vector convenience macros. */
791/* For the instructions that are encoded as altivec instructions use
792 __builtin_altivec_ as the builtin name. */
793#define BU_P9V_AV_1(ENUM, NAME, ATTR, ICODE) \
794 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
795 "__builtin_altivec_" NAME, /* NAME */ \
796 RS6000_BTM_P9_VECTOR, /* MASK */ \
797 (RS6000_BTC_ ## ATTR /* ATTR */ \
798 | RS6000_BTC_UNARY), \
799 CODE_FOR_ ## ICODE) /* ICODE */
800
801#define BU_P9V_AV_2(ENUM, NAME, ATTR, ICODE) \
802 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
803 "__builtin_altivec_" NAME, /* NAME */ \
804 RS6000_BTM_P9_VECTOR, /* MASK */ \
805 (RS6000_BTC_ ## ATTR /* ATTR */ \
806 | RS6000_BTC_BINARY), \
807 CODE_FOR_ ## ICODE) /* ICODE */
808
809#define BU_P9V_AV_3(ENUM, NAME, ATTR, ICODE) \
810 RS6000_BUILTIN_3 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
811 "__builtin_altivec_" NAME, /* NAME */ \
812 RS6000_BTM_P9_VECTOR, /* MASK */ \
813 (RS6000_BTC_ ## ATTR /* ATTR */ \
814 | RS6000_BTC_TERNARY), \
815 CODE_FOR_ ## ICODE) /* ICODE */
816
f9debd38 817/* See the comment on BU_ALTIVEC_P. */
af648be2 818#define BU_P9V_AV_P(ENUM, NAME, ATTR, ICODE) \
819 RS6000_BUILTIN_P (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
820 "__builtin_altivec_" NAME, /* NAME */ \
821 RS6000_BTM_P9_VECTOR, /* MASK */ \
822 (RS6000_BTC_ ## ATTR /* ATTR */ \
823 | RS6000_BTC_PREDICATE), \
824 CODE_FOR_ ## ICODE) /* ICODE */
825
f9debd38 826#define BU_P9V_AV_X(ENUM, NAME, ATTR) \
827 RS6000_BUILTIN_X (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
828 "__builtin_altivec_" NAME, /* NAME */ \
829 RS6000_BTM_P9_VECTOR, /* MASK */ \
830 (RS6000_BTC_ ## ATTR /* ATTR */ \
831 | RS6000_BTC_SPECIAL), \
832 CODE_FOR_nothing) /* ICODE */
833
834#define BU_P9V_64BIT_AV_X(ENUM, NAME, ATTR) \
835 RS6000_BUILTIN_X (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
836 "__builtin_altivec_" NAME, /* NAME */ \
837 (RS6000_BTM_P9_VECTOR \
838 | RS6000_BTM_64BIT), /* MASK */ \
839 (RS6000_BTC_ ## ATTR /* ATTR */ \
840 | RS6000_BTC_SPECIAL), \
841 CODE_FOR_nothing) /* ICODE */
842
af648be2 843/* For the instructions encoded as VSX instructions use __builtin_vsx as the
844 builtin name. */
845#define BU_P9V_VSX_1(ENUM, NAME, ATTR, ICODE) \
846 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
847 "__builtin_vsx_" NAME, /* NAME */ \
848 RS6000_BTM_P9_VECTOR, /* MASK */ \
849 (RS6000_BTC_ ## ATTR /* ATTR */ \
850 | RS6000_BTC_UNARY), \
851 CODE_FOR_ ## ICODE) /* ICODE */
852
97468983 853#define BU_P9V_64BIT_VSX_1(ENUM, NAME, ATTR, ICODE) \
854 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
855 "__builtin_vsx_" NAME, /* NAME */ \
856 (RS6000_BTM_64BIT \
857 | RS6000_BTM_P9_VECTOR), /* MASK */ \
858 (RS6000_BTC_ ## ATTR /* ATTR */ \
859 | RS6000_BTC_UNARY), \
860 CODE_FOR_ ## ICODE) /* ICODE */
861
862#define BU_P9V_VSX_2(ENUM, NAME, ATTR, ICODE) \
863 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
864 "__builtin_vsx_" NAME, /* NAME */ \
865 RS6000_BTM_P9_VECTOR, /* MASK */ \
866 (RS6000_BTC_ ## ATTR /* ATTR */ \
867 | RS6000_BTC_BINARY), \
868 CODE_FOR_ ## ICODE) /* ICODE */
869
870#define BU_P9V_64BIT_VSX_2(ENUM, NAME, ATTR, ICODE) \
871 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
872 "__builtin_vsx_" NAME, /* NAME */ \
873 (RS6000_BTM_64BIT \
874 | RS6000_BTM_P9_VECTOR), /* MASK */ \
875 (RS6000_BTC_ ## ATTR /* ATTR */ \
876 | RS6000_BTC_BINARY), \
877 CODE_FOR_ ## ICODE) /* ICODE */
878
f9debd38 879#define BU_P9V_VSX_3(ENUM, NAME, ATTR, ICODE) \
880 RS6000_BUILTIN_3 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
881 "__builtin_vsx_" NAME, /* NAME */ \
882 RS6000_BTM_P9_VECTOR, /* MASK */ \
883 (RS6000_BTC_ ## ATTR /* ATTR */ \
ee33c236 884 | RS6000_BTC_TERNARY), \
885 CODE_FOR_ ## ICODE) /* ICODE */
886
887#define BU_P9V_64BIT_VSX_3(ENUM, NAME, ATTR, ICODE) \
888 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \
889 "__builtin_vsx_" NAME, /* NAME */ \
890 (RS6000_BTM_64BIT \
891 | RS6000_BTM_P9_VECTOR), /* MASK */ \
892 (RS6000_BTC_ ## ATTR /* ATTR */ \
893 | RS6000_BTC_TERNARY), \
f9debd38 894 CODE_FOR_ ## ICODE) /* ICODE */
895
896/* See the comment on BU_ALTIVEC_P. */
897#define BU_P9V_OVERLOAD_P(ENUM, NAME) \
898 RS6000_BUILTIN_P (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
899 "__builtin_vec_" NAME, /* NAME */ \
900 RS6000_BTM_ALTIVEC, /* MASK */ \
901 (RS6000_BTC_OVERLOADED /* ATTR */ \
902 | RS6000_BTC_PREDICATE), \
903 CODE_FOR_nothing) /* ICODE */
904
9cd62877 905#define BU_P9_2(ENUM, NAME, ATTR, ICODE) \
906 RS6000_BUILTIN_2 (P9_BUILTIN_SCALAR_ ## ENUM, /* ENUM */ \
907 "__builtin_scalar_" NAME, /* NAME */ \
908 RS6000_BTM_P9_VECTOR, /* MASK */ \
909 (RS6000_BTC_ ## ATTR /* ATTR */ \
910 | RS6000_BTC_BINARY), \
911 CODE_FOR_ ## ICODE) /* ICODE */
912
913#define BU_P9_64BIT_2(ENUM, NAME, ATTR, ICODE) \
914 RS6000_BUILTIN_2 (P9_BUILTIN_SCALAR_ ## ENUM, /* ENUM */ \
915 "__builtin_scalar_" NAME, /* NAME */ \
916 RS6000_BTM_P9_VECTOR \
917 | RS6000_BTM_64BIT, /* MASK */ \
918 (RS6000_BTC_ ## ATTR /* ATTR */ \
919 | RS6000_BTC_BINARY), \
920 CODE_FOR_ ## ICODE) /* ICODE */
921
af648be2 922#define BU_P9V_OVERLOAD_1(ENUM, NAME) \
923 RS6000_BUILTIN_1 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
924 "__builtin_vec_" NAME, /* NAME */ \
925 RS6000_BTM_P9_VECTOR, /* MASK */ \
926 (RS6000_BTC_OVERLOADED /* ATTR */ \
927 | RS6000_BTC_UNARY), \
928 CODE_FOR_nothing) /* ICODE */
929
930#define BU_P9V_OVERLOAD_2(ENUM, NAME) \
931 RS6000_BUILTIN_2 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
932 "__builtin_vec_" NAME, /* NAME */ \
933 RS6000_BTM_P9_VECTOR, /* MASK */ \
934 (RS6000_BTC_OVERLOADED /* ATTR */ \
935 | RS6000_BTC_BINARY), \
936 CODE_FOR_nothing) /* ICODE */
937
938#define BU_P9V_OVERLOAD_3(ENUM, NAME) \
939 RS6000_BUILTIN_3 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \
940 "__builtin_vec_" NAME, /* NAME */ \
941 RS6000_BTM_P9_VECTOR, /* MASK */ \
942 (RS6000_BTC_OVERLOADED /* ATTR */ \
943 | RS6000_BTC_TERNARY), \
944 CODE_FOR_nothing) /* ICODE */
9cd62877 945
946#define BU_P9_OVERLOAD_2(ENUM, NAME) \
947 RS6000_BUILTIN_2 (P9_BUILTIN_ ## ENUM, /* ENUM */ \
948 "__builtin_" NAME, /* NAME */ \
949 RS6000_BTM_P9_VECTOR, /* MASK */ \
950 (RS6000_BTC_OVERLOADED /* ATTR */ \
951 | RS6000_BTC_BINARY), \
952 CODE_FOR_nothing) /* ICODE */
953
0375b229 954#endif
955
af648be2 956\f
0375b229 957/* Insure 0 is not a legitimate index. */
958BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC)
959
960/* 3 argument Altivec builtins. */
961BU_ALTIVEC_3 (VMADDFP, "vmaddfp", FP, fmav4sf4)
962BU_ALTIVEC_3 (VMHADDSHS, "vmhaddshs", SAT, altivec_vmhaddshs)
963BU_ALTIVEC_3 (VMHRADDSHS, "vmhraddshs", SAT, altivec_vmhraddshs)
964BU_ALTIVEC_3 (VMLADDUHM, "vmladduhm", CONST, altivec_vmladduhm)
965BU_ALTIVEC_3 (VMSUMUBM, "vmsumubm", CONST, altivec_vmsumubm)
966BU_ALTIVEC_3 (VMSUMMBM, "vmsummbm", CONST, altivec_vmsummbm)
967BU_ALTIVEC_3 (VMSUMUHM, "vmsumuhm", CONST, altivec_vmsumuhm)
968BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm)
969BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs)
970BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs)
971BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4)
ae61c502 972BU_ALTIVEC_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
0375b229 973BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
974BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
975BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
976BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
977BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
978BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns)
ae61c502 979BU_ALTIVEC_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
0375b229 980BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
981BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
982BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
983BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
984BU_ALTIVEC_3 (VSEL_4SF, "vsel_4sf", CONST, vector_select_v4sf)
985BU_ALTIVEC_3 (VSEL_4SI, "vsel_4si", CONST, vector_select_v4si)
986BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi)
987BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi)
988BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df)
989BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di)
ae61c502 990BU_ALTIVEC_3 (VSEL_1TI, "vsel_1ti", CONST, vector_select_v1ti)
0375b229 991BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns)
992BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns)
993BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns)
994BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns)
ae61c502 995BU_ALTIVEC_3 (VSEL_1TI_UNS, "vsel_1ti_uns", CONST, vector_select_v1ti_uns)
0375b229 996BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi)
997BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi)
998BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si)
999BU_ALTIVEC_3 (VSLDOI_4SF, "vsldoi_4sf", CONST, altivec_vsldoi_v4sf)
e691d850 1000BU_ALTIVEC_3 (VSLDOI_2DF, "vsldoi_2df", CONST, altivec_vsldoi_v2df)
0375b229 1001
1002/* Altivec DST builtins. */
1003BU_ALTIVEC_D (DST, "dst", MISC, altivec_dst)
1004BU_ALTIVEC_D (DSTT, "dstt", MISC, altivec_dstt)
1005BU_ALTIVEC_D (DSTST, "dstst", MISC, altivec_dstst)
1006BU_ALTIVEC_D (DSTSTT, "dststt", MISC, altivec_dststt)
1007
1008/* Altivec 2 argument builtin functions. */
1009BU_ALTIVEC_2 (VADDUBM, "vaddubm", CONST, addv16qi3)
1010BU_ALTIVEC_2 (VADDUHM, "vadduhm", CONST, addv8hi3)
1011BU_ALTIVEC_2 (VADDUWM, "vadduwm", CONST, addv4si3)
1012BU_ALTIVEC_2 (VADDFP, "vaddfp", CONST, addv4sf3)
1013BU_ALTIVEC_2 (VADDCUW, "vaddcuw", CONST, altivec_vaddcuw)
1014BU_ALTIVEC_2 (VADDUBS, "vaddubs", CONST, altivec_vaddubs)
1015BU_ALTIVEC_2 (VADDSBS, "vaddsbs", CONST, altivec_vaddsbs)
1016BU_ALTIVEC_2 (VADDUHS, "vadduhs", CONST, altivec_vadduhs)
1017BU_ALTIVEC_2 (VADDSHS, "vaddshs", CONST, altivec_vaddshs)
1018BU_ALTIVEC_2 (VADDUWS, "vadduws", CONST, altivec_vadduws)
1019BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws)
1020BU_ALTIVEC_2 (VAND, "vand", CONST, andv4si3)
1021BU_ALTIVEC_2 (VANDC, "vandc", CONST, andcv4si3)
1022BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, altivec_vavgub)
1023BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, altivec_vavgsb)
1024BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, altivec_vavguh)
1025BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, altivec_vavgsh)
1026BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, altivec_vavguw)
1027BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, altivec_vavgsw)
1028BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux)
1029BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx)
1030BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp)
1031BU_ALTIVEC_2 (VCMPEQUB, "vcmpequb", CONST, vector_eqv16qi)
1032BU_ALTIVEC_2 (VCMPEQUH, "vcmpequh", CONST, vector_eqv8hi)
1033BU_ALTIVEC_2 (VCMPEQUW, "vcmpequw", CONST, vector_eqv4si)
1034BU_ALTIVEC_2 (VCMPEQFP, "vcmpeqfp", CONST, vector_eqv4sf)
1035BU_ALTIVEC_2 (VCMPGEFP, "vcmpgefp", CONST, vector_gev4sf)
1036BU_ALTIVEC_2 (VCMPGTUB, "vcmpgtub", CONST, vector_gtuv16qi)
1037BU_ALTIVEC_2 (VCMPGTSB, "vcmpgtsb", CONST, vector_gtv16qi)
1038BU_ALTIVEC_2 (VCMPGTUH, "vcmpgtuh", CONST, vector_gtuv8hi)
1039BU_ALTIVEC_2 (VCMPGTSH, "vcmpgtsh", CONST, vector_gtv8hi)
1040BU_ALTIVEC_2 (VCMPGTUW, "vcmpgtuw", CONST, vector_gtuv4si)
1041BU_ALTIVEC_2 (VCMPGTSW, "vcmpgtsw", CONST, vector_gtv4si)
1042BU_ALTIVEC_2 (VCMPGTFP, "vcmpgtfp", CONST, vector_gtv4sf)
1043BU_ALTIVEC_2 (VCTSXS, "vctsxs", CONST, altivec_vctsxs)
1044BU_ALTIVEC_2 (VCTUXS, "vctuxs", CONST, altivec_vctuxs)
1045BU_ALTIVEC_2 (VMAXUB, "vmaxub", CONST, umaxv16qi3)
1046BU_ALTIVEC_2 (VMAXSB, "vmaxsb", CONST, smaxv16qi3)
1047BU_ALTIVEC_2 (VMAXUH, "vmaxuh", CONST, umaxv8hi3)
1048BU_ALTIVEC_2 (VMAXSH, "vmaxsh", CONST, smaxv8hi3)
1049BU_ALTIVEC_2 (VMAXUW, "vmaxuw", CONST, umaxv4si3)
1050BU_ALTIVEC_2 (VMAXSW, "vmaxsw", CONST, smaxv4si3)
1051BU_ALTIVEC_2 (VMAXFP, "vmaxfp", CONST, smaxv4sf3)
1052BU_ALTIVEC_2 (VMRGHB, "vmrghb", CONST, altivec_vmrghb)
1053BU_ALTIVEC_2 (VMRGHH, "vmrghh", CONST, altivec_vmrghh)
1054BU_ALTIVEC_2 (VMRGHW, "vmrghw", CONST, altivec_vmrghw)
1055BU_ALTIVEC_2 (VMRGLB, "vmrglb", CONST, altivec_vmrglb)
1056BU_ALTIVEC_2 (VMRGLH, "vmrglh", CONST, altivec_vmrglh)
1057BU_ALTIVEC_2 (VMRGLW, "vmrglw", CONST, altivec_vmrglw)
1058BU_ALTIVEC_2 (VMINUB, "vminub", CONST, uminv16qi3)
1059BU_ALTIVEC_2 (VMINSB, "vminsb", CONST, sminv16qi3)
1060BU_ALTIVEC_2 (VMINUH, "vminuh", CONST, uminv8hi3)
1061BU_ALTIVEC_2 (VMINSH, "vminsh", CONST, sminv8hi3)
1062BU_ALTIVEC_2 (VMINUW, "vminuw", CONST, uminv4si3)
1063BU_ALTIVEC_2 (VMINSW, "vminsw", CONST, sminv4si3)
1064BU_ALTIVEC_2 (VMINFP, "vminfp", CONST, sminv4sf3)
151e7b5c 1065BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi)
151e7b5c 1066BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi)
1067BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi)
151e7b5c 1068BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi)
934c5284 1069BU_ALTIVEC_2 (VMULEUW, "vmuleuw", CONST, vec_widen_umult_even_v4si)
1070BU_ALTIVEC_2 (VMULESW, "vmulesw", CONST, vec_widen_smult_even_v4si)
151e7b5c 1071BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi)
151e7b5c 1072BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi)
1073BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi)
151e7b5c 1074BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi)
934c5284 1075BU_ALTIVEC_2 (VMULOUW, "vmulouw", CONST, vec_widen_umult_odd_v4si)
1076BU_ALTIVEC_2 (VMULOSW, "vmulosw", CONST, vec_widen_smult_odd_v4si)
0375b229 1077BU_ALTIVEC_2 (VNOR, "vnor", CONST, norv4si3)
1078BU_ALTIVEC_2 (VOR, "vor", CONST, iorv4si3)
1079BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum)
1080BU_ALTIVEC_2 (VPKUWUM, "vpkuwum", CONST, altivec_vpkuwum)
1081BU_ALTIVEC_2 (VPKPX, "vpkpx", CONST, altivec_vpkpx)
1082BU_ALTIVEC_2 (VPKSHSS, "vpkshss", CONST, altivec_vpkshss)
1083BU_ALTIVEC_2 (VPKSWSS, "vpkswss", CONST, altivec_vpkswss)
1084BU_ALTIVEC_2 (VPKUHUS, "vpkuhus", CONST, altivec_vpkuhus)
1085BU_ALTIVEC_2 (VPKSHUS, "vpkshus", CONST, altivec_vpkshus)
1086BU_ALTIVEC_2 (VPKUWUS, "vpkuwus", CONST, altivec_vpkuwus)
1087BU_ALTIVEC_2 (VPKSWUS, "vpkswus", CONST, altivec_vpkswus)
1088BU_ALTIVEC_2 (VRECIPFP, "vrecipdivfp", CONST, recipv4sf3)
1089BU_ALTIVEC_2 (VRLB, "vrlb", CONST, vrotlv16qi3)
1090BU_ALTIVEC_2 (VRLH, "vrlh", CONST, vrotlv8hi3)
1091BU_ALTIVEC_2 (VRLW, "vrlw", CONST, vrotlv4si3)
1092BU_ALTIVEC_2 (VSLB, "vslb", CONST, vashlv16qi3)
1093BU_ALTIVEC_2 (VSLH, "vslh", CONST, vashlv8hi3)
1094BU_ALTIVEC_2 (VSLW, "vslw", CONST, vashlv4si3)
1095BU_ALTIVEC_2 (VSL, "vsl", CONST, altivec_vsl)
1096BU_ALTIVEC_2 (VSLO, "vslo", CONST, altivec_vslo)
1097BU_ALTIVEC_2 (VSPLTB, "vspltb", CONST, altivec_vspltb)
1098BU_ALTIVEC_2 (VSPLTH, "vsplth", CONST, altivec_vsplth)
1099BU_ALTIVEC_2 (VSPLTW, "vspltw", CONST, altivec_vspltw)
1100BU_ALTIVEC_2 (VSRB, "vsrb", CONST, vlshrv16qi3)
1101BU_ALTIVEC_2 (VSRH, "vsrh", CONST, vlshrv8hi3)
1102BU_ALTIVEC_2 (VSRW, "vsrw", CONST, vlshrv4si3)
1103BU_ALTIVEC_2 (VSRAB, "vsrab", CONST, vashrv16qi3)
1104BU_ALTIVEC_2 (VSRAH, "vsrah", CONST, vashrv8hi3)
1105BU_ALTIVEC_2 (VSRAW, "vsraw", CONST, vashrv4si3)
1106BU_ALTIVEC_2 (VSR, "vsr", CONST, altivec_vsr)
1107BU_ALTIVEC_2 (VSRO, "vsro", CONST, altivec_vsro)
1108BU_ALTIVEC_2 (VSUBUBM, "vsububm", CONST, subv16qi3)
1109BU_ALTIVEC_2 (VSUBUHM, "vsubuhm", CONST, subv8hi3)
1110BU_ALTIVEC_2 (VSUBUWM, "vsubuwm", CONST, subv4si3)
1111BU_ALTIVEC_2 (VSUBFP, "vsubfp", CONST, subv4sf3)
1112BU_ALTIVEC_2 (VSUBCUW, "vsubcuw", CONST, altivec_vsubcuw)
1113BU_ALTIVEC_2 (VSUBUBS, "vsububs", CONST, altivec_vsububs)
1114BU_ALTIVEC_2 (VSUBSBS, "vsubsbs", CONST, altivec_vsubsbs)
1115BU_ALTIVEC_2 (VSUBUHS, "vsubuhs", CONST, altivec_vsubuhs)
1116BU_ALTIVEC_2 (VSUBSHS, "vsubshs", CONST, altivec_vsubshs)
1117BU_ALTIVEC_2 (VSUBUWS, "vsubuws", CONST, altivec_vsubuws)
1118BU_ALTIVEC_2 (VSUBSWS, "vsubsws", CONST, altivec_vsubsws)
1119BU_ALTIVEC_2 (VSUM4UBS, "vsum4ubs", CONST, altivec_vsum4ubs)
1120BU_ALTIVEC_2 (VSUM4SBS, "vsum4sbs", CONST, altivec_vsum4sbs)
1121BU_ALTIVEC_2 (VSUM4SHS, "vsum4shs", CONST, altivec_vsum4shs)
1122BU_ALTIVEC_2 (VSUM2SWS, "vsum2sws", CONST, altivec_vsum2sws)
1123BU_ALTIVEC_2 (VSUMSWS, "vsumsws", CONST, altivec_vsumsws)
1124BU_ALTIVEC_2 (VXOR, "vxor", CONST, xorv4si3)
1125BU_ALTIVEC_2 (COPYSIGN_V4SF, "copysignfp", CONST, vector_copysignv4sf3)
1126
1127/* Altivec ABS functions. */
1128BU_ALTIVEC_A (ABS_V4SI, "abs_v4si", CONST, absv4si2)
1129BU_ALTIVEC_A (ABS_V8HI, "abs_v8hi", CONST, absv8hi2)
1130BU_ALTIVEC_A (ABS_V4SF, "abs_v4sf", CONST, absv4sf2)
1131BU_ALTIVEC_A (ABS_V16QI, "abs_v16qi", CONST, absv16qi2)
1132BU_ALTIVEC_A (ABSS_V4SI, "abss_v4si", SAT, altivec_abss_v4si)
1133BU_ALTIVEC_A (ABSS_V8HI, "abss_v8hi", SAT, altivec_abss_v8hi)
1134BU_ALTIVEC_A (ABSS_V16QI, "abss_v16qi", SAT, altivec_abss_v16qi)
1135
85d4e063 1136/* Altivec NABS functions. */
1137BU_ALTIVEC_A (NABS_V2DI, "nabs_v2di", CONST, nabsv2di2)
1138BU_ALTIVEC_A (NABS_V4SI, "nabs_v4si", CONST, nabsv4si2)
1139BU_ALTIVEC_A (NABS_V8HI, "nabs_v8hi", CONST, nabsv8hi2)
1140BU_ALTIVEC_A (NABS_V16QI, "nabs_v16qi", CONST, nabsv16qi2)
1141BU_ALTIVEC_A (NABS_V4SF, "nabs_v4sf", CONST, vsx_nabsv4sf2)
1142BU_ALTIVEC_A (NABS_V2DF, "nabs_v2df", CONST, vsx_nabsv2df2)
1143
16f61488 1144/* Altivec NEG functions. */
1145BU_ALTIVEC_A (NEG_V2DI, "neg_v2di", CONST, negv2di2)
1146BU_ALTIVEC_A (NEG_V4SI, "neg_v4si", CONST, negv4si2)
1147BU_ALTIVEC_A (NEG_V8HI, "neg_v8hi", CONST, negv8hi2)
1148BU_ALTIVEC_A (NEG_V16QI, "neg_v16qi", CONST, negv16qi2)
1149BU_ALTIVEC_A (NEG_V4SF, "neg_v4sf", CONST, negv4sf2)
1150BU_ALTIVEC_A (NEG_V2DF, "neg_v2df", CONST, negv2df2)
1151
0375b229 1152/* 1 argument Altivec builtin functions. */
1153BU_ALTIVEC_1 (VEXPTEFP, "vexptefp", FP, altivec_vexptefp)
1154BU_ALTIVEC_1 (VLOGEFP, "vlogefp", FP, altivec_vlogefp)
1155BU_ALTIVEC_1 (VREFP, "vrefp", FP, rev4sf2)
1156BU_ALTIVEC_1 (VRFIM, "vrfim", FP, vector_floorv4sf2)
1157BU_ALTIVEC_1 (VRFIN, "vrfin", FP, altivec_vrfin)
1158BU_ALTIVEC_1 (VRFIP, "vrfip", FP, vector_ceilv4sf2)
1159BU_ALTIVEC_1 (VRFIZ, "vrfiz", FP, vector_btruncv4sf2)
1160BU_ALTIVEC_1 (VRSQRTFP, "vrsqrtfp", FP, rsqrtv4sf2)
1161BU_ALTIVEC_1 (VRSQRTEFP, "vrsqrtefp", FP, rsqrtev4sf2)
1162BU_ALTIVEC_1 (VSPLTISB, "vspltisb", CONST, altivec_vspltisb)
1163BU_ALTIVEC_1 (VSPLTISH, "vspltish", CONST, altivec_vspltish)
1164BU_ALTIVEC_1 (VSPLTISW, "vspltisw", CONST, altivec_vspltisw)
1165BU_ALTIVEC_1 (VUPKHSB, "vupkhsb", CONST, altivec_vupkhsb)
1166BU_ALTIVEC_1 (VUPKHPX, "vupkhpx", CONST, altivec_vupkhpx)
1167BU_ALTIVEC_1 (VUPKHSH, "vupkhsh", CONST, altivec_vupkhsh)
1168BU_ALTIVEC_1 (VUPKLSB, "vupklsb", CONST, altivec_vupklsb)
1169BU_ALTIVEC_1 (VUPKLPX, "vupklpx", CONST, altivec_vupklpx)
1170BU_ALTIVEC_1 (VUPKLSH, "vupklsh", CONST, altivec_vupklsh)
1171
a990b86c 1172BU_ALTIVEC_1 (VREVE_V2DI, "vreve_v2di", CONST, altivec_vrevev2di2)
1173BU_ALTIVEC_1 (VREVE_V4SI, "vreve_v4si", CONST, altivec_vrevev4si2)
1174BU_ALTIVEC_1 (VREVE_V8HI, "vreve_v8hi", CONST, altivec_vrevev8hi2)
1175BU_ALTIVEC_1 (VREVE_V16QI, "vreve_v16qi", CONST, altivec_vrevev16qi2)
1176BU_ALTIVEC_1 (VREVE_V2DF, "vreve_v2df", CONST, altivec_vrevev2df2)
1177BU_ALTIVEC_1 (VREVE_V4SF, "vreve_v4sf", CONST, altivec_vrevev4sf2)
1178
0375b229 1179BU_ALTIVEC_1 (FLOAT_V4SI_V4SF, "float_sisf", FP, floatv4siv4sf2)
1180BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2)
1181BU_ALTIVEC_1 (FIX_V4SF_V4SI, "fix_sfsi", FP, fix_truncv4sfv4si2)
1182BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI, "fixuns_sfsi", FP, fixuns_truncv4sfv4si2)
1183
1184/* Altivec predicate functions. */
1185BU_ALTIVEC_P (VCMPBFP_P, "vcmpbfp_p", CONST, altivec_vcmpbfp_p)
1186BU_ALTIVEC_P (VCMPEQFP_P, "vcmpeqfp_p", CONST, vector_eq_v4sf_p)
1187BU_ALTIVEC_P (VCMPGEFP_P, "vcmpgefp_p", CONST, vector_ge_v4sf_p)
1188BU_ALTIVEC_P (VCMPGTFP_P, "vcmpgtfp_p", CONST, vector_gt_v4sf_p)
1189BU_ALTIVEC_P (VCMPEQUW_P, "vcmpequw_p", CONST, vector_eq_v4si_p)
1190BU_ALTIVEC_P (VCMPGTSW_P, "vcmpgtsw_p", CONST, vector_gt_v4si_p)
1191BU_ALTIVEC_P (VCMPGTUW_P, "vcmpgtuw_p", CONST, vector_gtu_v4si_p)
1192BU_ALTIVEC_P (VCMPEQUH_P, "vcmpequh_p", CONST, vector_eq_v8hi_p)
1193BU_ALTIVEC_P (VCMPGTSH_P, "vcmpgtsh_p", CONST, vector_gt_v8hi_p)
1194BU_ALTIVEC_P (VCMPGTUH_P, "vcmpgtuh_p", CONST, vector_gtu_v8hi_p)
1195BU_ALTIVEC_P (VCMPEQUB_P, "vcmpequb_p", CONST, vector_eq_v16qi_p)
1196BU_ALTIVEC_P (VCMPGTSB_P, "vcmpgtsb_p", CONST, vector_gt_v16qi_p)
1197BU_ALTIVEC_P (VCMPGTUB_P, "vcmpgtub_p", CONST, vector_gtu_v16qi_p)
1198
1199/* AltiVec builtins that are handled as special cases. */
1200BU_ALTIVEC_X (ST_INTERNAL_4si, "st_internal_4si", MEM)
1201BU_ALTIVEC_X (LD_INTERNAL_4si, "ld_internal_4si", MEM)
1202BU_ALTIVEC_X (ST_INTERNAL_8hi, "st_internal_8hi", MEM)
1203BU_ALTIVEC_X (LD_INTERNAL_8hi, "ld_internal_8hi", MEM)
1204BU_ALTIVEC_X (ST_INTERNAL_16qi, "st_internal_16qi", MEM)
1205BU_ALTIVEC_X (LD_INTERNAL_16qi, "ld_internal_16qi", MEM)
1206BU_ALTIVEC_X (ST_INTERNAL_4sf, "st_internal_16qi", MEM)
1207BU_ALTIVEC_X (LD_INTERNAL_4sf, "ld_internal_4sf", MEM)
1208BU_ALTIVEC_X (ST_INTERNAL_2df, "st_internal_4sf", MEM)
1209BU_ALTIVEC_X (LD_INTERNAL_2df, "ld_internal_2df", MEM)
1210BU_ALTIVEC_X (ST_INTERNAL_2di, "st_internal_2di", MEM)
1211BU_ALTIVEC_X (LD_INTERNAL_2di, "ld_internal_2di", MEM)
ae61c502 1212BU_ALTIVEC_X (ST_INTERNAL_1ti, "st_internal_1ti", MEM)
1213BU_ALTIVEC_X (LD_INTERNAL_1ti, "ld_internal_1ti", MEM)
0375b229 1214BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC)
1215BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC)
1216BU_ALTIVEC_X (DSSALL, "dssall", MISC)
1217BU_ALTIVEC_X (DSS, "dss", MISC)
1218BU_ALTIVEC_X (LVSL, "lvsl", MEM)
1219BU_ALTIVEC_X (LVSR, "lvsr", MEM)
1220BU_ALTIVEC_X (LVEBX, "lvebx", MEM)
1221BU_ALTIVEC_X (LVEHX, "lvehx", MEM)
1222BU_ALTIVEC_X (LVEWX, "lvewx", MEM)
1223BU_ALTIVEC_X (LVXL, "lvxl", MEM)
b2633cce 1224BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", MEM)
1225BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", MEM)
1226BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", MEM)
1227BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", MEM)
1228BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", MEM)
1229BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", MEM)
0375b229 1230BU_ALTIVEC_X (LVX, "lvx", MEM)
b2633cce 1231BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", MEM)
1232BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", MEM)
1233BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", MEM)
1234BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", MEM)
1235BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", MEM)
1236BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", MEM)
0375b229 1237BU_ALTIVEC_X (STVX, "stvx", MEM)
b2633cce 1238BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM)
1239BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM)
1240BU_ALTIVEC_X (STVX_V4SF, "stvx_v4sf", MEM)
1241BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM)
1242BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM)
1243BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM)
0375b229 1244BU_ALTIVEC_C (LVLX, "lvlx", MEM)
1245BU_ALTIVEC_C (LVLXL, "lvlxl", MEM)
1246BU_ALTIVEC_C (LVRX, "lvrx", MEM)
1247BU_ALTIVEC_C (LVRXL, "lvrxl", MEM)
1248BU_ALTIVEC_X (STVEBX, "stvebx", MEM)
1249BU_ALTIVEC_X (STVEHX, "stvehx", MEM)
1250BU_ALTIVEC_X (STVEWX, "stvewx", MEM)
1251BU_ALTIVEC_X (STVXL, "stvxl", MEM)
b2633cce 1252BU_ALTIVEC_X (STVXL_V2DF, "stvxl_v2df", MEM)
1253BU_ALTIVEC_X (STVXL_V2DI, "stvxl_v2di", MEM)
1254BU_ALTIVEC_X (STVXL_V4SF, "stvxl_v4sf", MEM)
1255BU_ALTIVEC_X (STVXL_V4SI, "stvxl_v4si", MEM)
1256BU_ALTIVEC_X (STVXL_V8HI, "stvxl_v8hi", MEM)
1257BU_ALTIVEC_X (STVXL_V16QI, "stvxl_v16qi", MEM)
0375b229 1258BU_ALTIVEC_C (STVLX, "stvlx", MEM)
1259BU_ALTIVEC_C (STVLXL, "stvlxl", MEM)
1260BU_ALTIVEC_C (STVRX, "stvrx", MEM)
1261BU_ALTIVEC_C (STVRXL, "stvrxl", MEM)
1262BU_ALTIVEC_X (MASK_FOR_LOAD, "mask_for_load", MISC)
1263BU_ALTIVEC_X (MASK_FOR_STORE, "mask_for_store", MISC)
1264BU_ALTIVEC_X (VEC_INIT_V4SI, "vec_init_v4si", CONST)
1265BU_ALTIVEC_X (VEC_INIT_V8HI, "vec_init_v8hi", CONST)
1266BU_ALTIVEC_X (VEC_INIT_V16QI, "vec_init_v16qi", CONST)
1267BU_ALTIVEC_X (VEC_INIT_V4SF, "vec_init_v4sf", CONST)
1268BU_ALTIVEC_X (VEC_SET_V4SI, "vec_set_v4si", CONST)
1269BU_ALTIVEC_X (VEC_SET_V8HI, "vec_set_v8hi", CONST)
1270BU_ALTIVEC_X (VEC_SET_V16QI, "vec_set_v16qi", CONST)
1271BU_ALTIVEC_X (VEC_SET_V4SF, "vec_set_v4sf", CONST)
1272BU_ALTIVEC_X (VEC_EXT_V4SI, "vec_ext_v4si", CONST)
1273BU_ALTIVEC_X (VEC_EXT_V8HI, "vec_ext_v8hi", CONST)
1274BU_ALTIVEC_X (VEC_EXT_V16QI, "vec_ext_v16qi", CONST)
1275BU_ALTIVEC_X (VEC_EXT_V4SF, "vec_ext_v4sf", CONST)
605afdd6 1276
1277/* Altivec overloaded builtins. */
1278/* For now, don't set the classification for overloaded functions.
1279 The function should be converted to the type specific instruction
1280 before we get to the point about classifying the builtin type. */
0375b229 1281
1282/* 3 argument Altivec overloaded builtins. */
1283BU_ALTIVEC_OVERLOAD_3 (MADD, "madd")
1284BU_ALTIVEC_OVERLOAD_3 (MADDS, "madds")
1285BU_ALTIVEC_OVERLOAD_3 (MLADD, "mladd")
1286BU_ALTIVEC_OVERLOAD_3 (MRADDS, "mradds")
1287BU_ALTIVEC_OVERLOAD_3 (MSUM, "msum")
1288BU_ALTIVEC_OVERLOAD_3 (MSUMS, "msums")
1289BU_ALTIVEC_OVERLOAD_3 (NMSUB, "nmsub")
1290BU_ALTIVEC_OVERLOAD_3 (PERM, "perm")
1291BU_ALTIVEC_OVERLOAD_3 (SEL, "sel")
1292BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM, "vmsummbm")
1293BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM, "vmsumshm")
1294BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS, "vmsumshs")
1295BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM, "vmsumubm")
1296BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM, "vmsumuhm")
1297BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS, "vmsumuhs")
1298
1299/* Altivec DST overloaded builtins. */
1300BU_ALTIVEC_OVERLOAD_D (DST, "dst")
1301BU_ALTIVEC_OVERLOAD_D (DSTT, "dstt")
1302BU_ALTIVEC_OVERLOAD_D (DSTST, "dstst")
1303BU_ALTIVEC_OVERLOAD_D (DSTSTT, "dststt")
1304
1305/* 2 argument Altivec overloaded builtins. */
1306BU_ALTIVEC_OVERLOAD_2 (ADD, "add")
1307BU_ALTIVEC_OVERLOAD_2 (ADDC, "addc")
1308BU_ALTIVEC_OVERLOAD_2 (ADDS, "adds")
1309BU_ALTIVEC_OVERLOAD_2 (AND, "and")
1310BU_ALTIVEC_OVERLOAD_2 (ANDC, "andc")
1311BU_ALTIVEC_OVERLOAD_2 (AVG, "avg")
1312BU_ALTIVEC_OVERLOAD_2 (CMPB, "cmpb")
1313BU_ALTIVEC_OVERLOAD_2 (CMPEQ, "cmpeq")
1314BU_ALTIVEC_OVERLOAD_2 (CMPGE, "cmpge")
1315BU_ALTIVEC_OVERLOAD_2 (CMPGT, "cmpgt")
1316BU_ALTIVEC_OVERLOAD_2 (CMPLE, "cmple")
1317BU_ALTIVEC_OVERLOAD_2 (CMPLT, "cmplt")
1318BU_ALTIVEC_OVERLOAD_2 (COPYSIGN, "copysign")
1319BU_ALTIVEC_OVERLOAD_2 (MAX, "max")
1320BU_ALTIVEC_OVERLOAD_2 (MERGEH, "mergeh")
1321BU_ALTIVEC_OVERLOAD_2 (MERGEL, "mergel")
1322BU_ALTIVEC_OVERLOAD_2 (MIN, "min")
1323BU_ALTIVEC_OVERLOAD_2 (MULE, "mule")
1324BU_ALTIVEC_OVERLOAD_2 (MULO, "mulo")
1325BU_ALTIVEC_OVERLOAD_2 (NOR, "nor")
1326BU_ALTIVEC_OVERLOAD_2 (OR, "or")
1327BU_ALTIVEC_OVERLOAD_2 (PACK, "pack")
1328BU_ALTIVEC_OVERLOAD_2 (PACKPX, "packpx")
1329BU_ALTIVEC_OVERLOAD_2 (PACKS, "packs")
1330BU_ALTIVEC_OVERLOAD_2 (PACKSU, "packsu")
1331BU_ALTIVEC_OVERLOAD_2 (RECIP, "recipdiv")
1332BU_ALTIVEC_OVERLOAD_2 (RL, "rl")
1333BU_ALTIVEC_OVERLOAD_2 (SL, "sl")
1334BU_ALTIVEC_OVERLOAD_2 (SLL, "sll")
1335BU_ALTIVEC_OVERLOAD_2 (SLO, "slo")
1336BU_ALTIVEC_OVERLOAD_2 (SR, "sr")
1337BU_ALTIVEC_OVERLOAD_2 (SRA, "sra")
1338BU_ALTIVEC_OVERLOAD_2 (SRL, "srl")
1339BU_ALTIVEC_OVERLOAD_2 (SRO, "sro")
1340BU_ALTIVEC_OVERLOAD_2 (SUB, "sub")
1341BU_ALTIVEC_OVERLOAD_2 (SUBC, "subc")
1342BU_ALTIVEC_OVERLOAD_2 (SUBS, "subs")
1343BU_ALTIVEC_OVERLOAD_2 (SUM2S, "sum2s")
1344BU_ALTIVEC_OVERLOAD_2 (SUM4S, "sum4s")
1345BU_ALTIVEC_OVERLOAD_2 (SUMS, "sums")
1346BU_ALTIVEC_OVERLOAD_2 (VADDFP, "vaddfp")
1347BU_ALTIVEC_OVERLOAD_2 (VADDSBS, "vaddsbs")
1348BU_ALTIVEC_OVERLOAD_2 (VADDSHS, "vaddshs")
1349BU_ALTIVEC_OVERLOAD_2 (VADDSWS, "vaddsws")
1350BU_ALTIVEC_OVERLOAD_2 (VADDUBM, "vaddubm")
1351BU_ALTIVEC_OVERLOAD_2 (VADDUBS, "vaddubs")
1352BU_ALTIVEC_OVERLOAD_2 (VADDUHM, "vadduhm")
1353BU_ALTIVEC_OVERLOAD_2 (VADDUHS, "vadduhs")
1354BU_ALTIVEC_OVERLOAD_2 (VADDUWM, "vadduwm")
1355BU_ALTIVEC_OVERLOAD_2 (VADDUWS, "vadduws")
1356BU_ALTIVEC_OVERLOAD_2 (VAVGSB, "vavgsb")
1357BU_ALTIVEC_OVERLOAD_2 (VAVGSH, "vavgsh")
1358BU_ALTIVEC_OVERLOAD_2 (VAVGSW, "vavgsw")
1359BU_ALTIVEC_OVERLOAD_2 (VAVGUB, "vavgub")
1360BU_ALTIVEC_OVERLOAD_2 (VAVGUH, "vavguh")
1361BU_ALTIVEC_OVERLOAD_2 (VAVGUW, "vavguw")
1362BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP, "vcmpeqfp")
1363BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB, "vcmpequb")
1364BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH, "vcmpequh")
1365BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW, "vcmpequw")
1366BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP, "vcmpgtfp")
1367BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB, "vcmpgtsb")
1368BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH, "vcmpgtsh")
1369BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW, "vcmpgtsw")
1370BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB, "vcmpgtub")
1371BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH, "vcmpgtuh")
1372BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW, "vcmpgtuw")
1373BU_ALTIVEC_OVERLOAD_2 (VMAXFP, "vmaxfp")
1374BU_ALTIVEC_OVERLOAD_2 (VMAXSB, "vmaxsb")
1375BU_ALTIVEC_OVERLOAD_2 (VMAXSH, "vmaxsh")
1376BU_ALTIVEC_OVERLOAD_2 (VMAXSW, "vmaxsw")
1377BU_ALTIVEC_OVERLOAD_2 (VMAXUB, "vmaxub")
1378BU_ALTIVEC_OVERLOAD_2 (VMAXUH, "vmaxuh")
1379BU_ALTIVEC_OVERLOAD_2 (VMAXUW, "vmaxuw")
1380BU_ALTIVEC_OVERLOAD_2 (VMINFP, "vminfp")
1381BU_ALTIVEC_OVERLOAD_2 (VMINSB, "vminsb")
1382BU_ALTIVEC_OVERLOAD_2 (VMINSH, "vminsh")
1383BU_ALTIVEC_OVERLOAD_2 (VMINSW, "vminsw")
1384BU_ALTIVEC_OVERLOAD_2 (VMINUB, "vminub")
1385BU_ALTIVEC_OVERLOAD_2 (VMINUH, "vminuh")
1386BU_ALTIVEC_OVERLOAD_2 (VMINUW, "vminuw")
1387BU_ALTIVEC_OVERLOAD_2 (VMRGHB, "vmrghb")
1388BU_ALTIVEC_OVERLOAD_2 (VMRGHH, "vmrghh")
1389BU_ALTIVEC_OVERLOAD_2 (VMRGHW, "vmrghw")
1390BU_ALTIVEC_OVERLOAD_2 (VMRGLB, "vmrglb")
1391BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh")
1392BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw")
1393BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb")
1394BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh")
2c13943f 1395BU_ALTIVEC_OVERLOAD_2 (VMULESW, "vmulesw")
0375b229 1396BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub")
1397BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh")
2c13943f 1398BU_ALTIVEC_OVERLOAD_2 (VMULEUW, "vmuleuw")
0375b229 1399BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb")
1400BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh")
2c13943f 1401BU_ALTIVEC_OVERLOAD_2 (VMULOSW, "vmulosw")
0375b229 1402BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub")
1403BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh")
2c13943f 1404BU_ALTIVEC_OVERLOAD_2 (VMULOUW, "vmulouw")
0375b229 1405BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss")
1406BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus")
1407BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss")
1408BU_ALTIVEC_OVERLOAD_2 (VPKSWUS, "vpkswus")
1409BU_ALTIVEC_OVERLOAD_2 (VPKUHUM, "vpkuhum")
1410BU_ALTIVEC_OVERLOAD_2 (VPKUHUS, "vpkuhus")
1411BU_ALTIVEC_OVERLOAD_2 (VPKUWUM, "vpkuwum")
1412BU_ALTIVEC_OVERLOAD_2 (VPKUWUS, "vpkuwus")
1413BU_ALTIVEC_OVERLOAD_2 (VRLB, "vrlb")
1414BU_ALTIVEC_OVERLOAD_2 (VRLH, "vrlh")
1415BU_ALTIVEC_OVERLOAD_2 (VRLW, "vrlw")
1416BU_ALTIVEC_OVERLOAD_2 (VSLB, "vslb")
1417BU_ALTIVEC_OVERLOAD_2 (VSLH, "vslh")
1418BU_ALTIVEC_OVERLOAD_2 (VSLW, "vslw")
1419BU_ALTIVEC_OVERLOAD_2 (VSRAB, "vsrab")
1420BU_ALTIVEC_OVERLOAD_2 (VSRAH, "vsrah")
1421BU_ALTIVEC_OVERLOAD_2 (VSRAW, "vsraw")
1422BU_ALTIVEC_OVERLOAD_2 (VSRB, "vsrb")
1423BU_ALTIVEC_OVERLOAD_2 (VSRH, "vsrh")
1424BU_ALTIVEC_OVERLOAD_2 (VSRW, "vsrw")
1425BU_ALTIVEC_OVERLOAD_2 (VSUBFP, "vsubfp")
1426BU_ALTIVEC_OVERLOAD_2 (VSUBSBS, "vsubsbs")
1427BU_ALTIVEC_OVERLOAD_2 (VSUBSHS, "vsubshs")
1428BU_ALTIVEC_OVERLOAD_2 (VSUBSWS, "vsubsws")
1429BU_ALTIVEC_OVERLOAD_2 (VSUBUBM, "vsububm")
1430BU_ALTIVEC_OVERLOAD_2 (VSUBUBS, "vsububs")
1431BU_ALTIVEC_OVERLOAD_2 (VSUBUHM, "vsubuhm")
1432BU_ALTIVEC_OVERLOAD_2 (VSUBUHS, "vsubuhs")
1433BU_ALTIVEC_OVERLOAD_2 (VSUBUWM, "vsubuwm")
1434BU_ALTIVEC_OVERLOAD_2 (VSUBUWS, "vsubuws")
1435BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS, "vsum4sbs")
1436BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS, "vsum4shs")
1437BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS, "vsum4ubs")
1438BU_ALTIVEC_OVERLOAD_2 (XOR, "xor")
1439
1440/* 1 argument Altivec overloaded functions. */
1441BU_ALTIVEC_OVERLOAD_1 (ABS, "abs")
85d4e063 1442BU_ALTIVEC_OVERLOAD_1 (NABS, "nabs")
0375b229 1443BU_ALTIVEC_OVERLOAD_1 (ABSS, "abss")
1444BU_ALTIVEC_OVERLOAD_1 (CEIL, "ceil")
1445BU_ALTIVEC_OVERLOAD_1 (EXPTE, "expte")
1446BU_ALTIVEC_OVERLOAD_1 (FLOOR, "floor")
1447BU_ALTIVEC_OVERLOAD_1 (LOGE, "loge")
1448BU_ALTIVEC_OVERLOAD_1 (MTVSCR, "mtvscr")
1449BU_ALTIVEC_OVERLOAD_1 (NEARBYINT, "nearbyint")
16f61488 1450BU_ALTIVEC_OVERLOAD_1 (NEG, "neg")
0375b229 1451BU_ALTIVEC_OVERLOAD_1 (RE, "re")
1452BU_ALTIVEC_OVERLOAD_1 (RINT, "rint")
1453BU_ALTIVEC_OVERLOAD_1 (ROUND, "round")
1454BU_ALTIVEC_OVERLOAD_1 (RSQRT, "rsqrt")
1455BU_ALTIVEC_OVERLOAD_1 (RSQRTE, "rsqrte")
1456BU_ALTIVEC_OVERLOAD_1 (SQRT, "sqrt")
1457BU_ALTIVEC_OVERLOAD_1 (TRUNC, "trunc")
1458BU_ALTIVEC_OVERLOAD_1 (UNPACKH, "unpackh")
1459BU_ALTIVEC_OVERLOAD_1 (UNPACKL, "unpackl")
1460BU_ALTIVEC_OVERLOAD_1 (VUPKHPX, "vupkhpx")
1461BU_ALTIVEC_OVERLOAD_1 (VUPKHSB, "vupkhsb")
1462BU_ALTIVEC_OVERLOAD_1 (VUPKHSH, "vupkhsh")
1463BU_ALTIVEC_OVERLOAD_1 (VUPKLPX, "vupklpx")
1464BU_ALTIVEC_OVERLOAD_1 (VUPKLSB, "vupklsb")
1465BU_ALTIVEC_OVERLOAD_1 (VUPKLSH, "vupklsh")
1466
a990b86c 1467BU_ALTIVEC_OVERLOAD_1 (VREVE, "vreve")
1468
0375b229 1469/* Overloaded altivec predicates. */
1470BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P, "vcmpeq_p")
1471BU_ALTIVEC_OVERLOAD_P (VCMPGT_P, "vcmpgt_p")
1472BU_ALTIVEC_OVERLOAD_P (VCMPGE_P, "vcmpge_p")
1473
1474/* Overloaded Altivec builtins that are handled as special cases. */
e40e5340 1475BU_ALTIVEC_OVERLOAD_X (ADDE, "adde")
61736a1b 1476BU_ALTIVEC_OVERLOAD_X (ADDEC, "addec")
77102dbe 1477BU_ALTIVEC_OVERLOAD_X (CMPNE, "cmpne")
0375b229 1478BU_ALTIVEC_OVERLOAD_X (CTF, "ctf")
1479BU_ALTIVEC_OVERLOAD_X (CTS, "cts")
1480BU_ALTIVEC_OVERLOAD_X (CTU, "ctu")
1481BU_ALTIVEC_OVERLOAD_X (EXTRACT, "extract")
1482BU_ALTIVEC_OVERLOAD_X (INSERT, "insert")
1483BU_ALTIVEC_OVERLOAD_X (LD, "ld")
1484BU_ALTIVEC_OVERLOAD_X (LDE, "lde")
1485BU_ALTIVEC_OVERLOAD_X (LDL, "ldl")
1486BU_ALTIVEC_OVERLOAD_X (LVEBX, "lvebx")
1487BU_ALTIVEC_OVERLOAD_X (LVEHX, "lvehx")
1488BU_ALTIVEC_OVERLOAD_X (LVEWX, "lvewx")
1489BU_ALTIVEC_OVERLOAD_X (LVLX, "lvlx")
1490BU_ALTIVEC_OVERLOAD_X (LVLXL, "lvlxl")
1491BU_ALTIVEC_OVERLOAD_X (LVRX, "lvrx")
1492BU_ALTIVEC_OVERLOAD_X (LVRXL, "lvrxl")
1493BU_ALTIVEC_OVERLOAD_X (LVSL, "lvsl")
1494BU_ALTIVEC_OVERLOAD_X (LVSR, "lvsr")
2d76c36a 1495BU_ALTIVEC_OVERLOAD_X (MUL, "mul")
0375b229 1496BU_ALTIVEC_OVERLOAD_X (PROMOTE, "promote")
1497BU_ALTIVEC_OVERLOAD_X (SLD, "sld")
33d39774 1498BU_ALTIVEC_OVERLOAD_X (SLDW, "sldw")
0375b229 1499BU_ALTIVEC_OVERLOAD_X (SPLAT, "splat")
1500BU_ALTIVEC_OVERLOAD_X (SPLATS, "splats")
1501BU_ALTIVEC_OVERLOAD_X (ST, "st")
1502BU_ALTIVEC_OVERLOAD_X (STE, "ste")
1503BU_ALTIVEC_OVERLOAD_X (STEP, "step")
1504BU_ALTIVEC_OVERLOAD_X (STL, "stl")
1505BU_ALTIVEC_OVERLOAD_X (STVEBX, "stvebx")
1506BU_ALTIVEC_OVERLOAD_X (STVEHX, "stvehx")
1507BU_ALTIVEC_OVERLOAD_X (STVEWX, "stvewx")
1508BU_ALTIVEC_OVERLOAD_X (STVLX, "stvlx")
1509BU_ALTIVEC_OVERLOAD_X (STVLXL, "stvlxl")
1510BU_ALTIVEC_OVERLOAD_X (STVRX, "stvrx")
1511BU_ALTIVEC_OVERLOAD_X (STVRXL, "stvrxl")
4a777525 1512BU_ALTIVEC_OVERLOAD_X (SUBE, "sube")
1513BU_ALTIVEC_OVERLOAD_X (SUBEC, "subec")
0375b229 1514BU_ALTIVEC_OVERLOAD_X (VCFSX, "vcfsx")
1515BU_ALTIVEC_OVERLOAD_X (VCFUX, "vcfux")
1516BU_ALTIVEC_OVERLOAD_X (VSPLTB, "vspltb")
1517BU_ALTIVEC_OVERLOAD_X (VSPLTH, "vsplth")
1518BU_ALTIVEC_OVERLOAD_X (VSPLTW, "vspltw")
1519\f
1520/* 3 argument VSX builtins. */
1521BU_VSX_3 (XVMADDSP, "xvmaddsp", CONST, fmav4sf4)
1522BU_VSX_3 (XVMSUBSP, "xvmsubsp", CONST, fmsv4sf4)
1523BU_VSX_3 (XVNMADDSP, "xvnmaddsp", CONST, nfmav4sf4)
1524BU_VSX_3 (XVNMSUBSP, "xvnmsubsp", CONST, nfmsv4sf4)
1525
1526BU_VSX_3 (XVMADDDP, "xvmadddp", CONST, fmav2df4)
1527BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4)
1528BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4)
1529BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4)
1530
ae61c502 1531BU_VSX_3 (XXSEL_1TI, "xxsel_1ti", CONST, vector_select_v1ti)
0375b229 1532BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di)
1533BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df)
1534BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf)
1535BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si)
1536BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi)
1537BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi)
ae61c502 1538BU_VSX_3 (XXSEL_1TI_UNS, "xxsel_1ti_uns", CONST, vector_select_v1ti_uns)
0375b229 1539BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns)
1540BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns)
1541BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns)
1542BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns)
1543
ae61c502 1544BU_VSX_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti)
0375b229 1545BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di)
1546BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df)
1547BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf)
1548BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si)
1549BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi)
1550BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi)
ae61c502 1551BU_VSX_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns)
0375b229 1552BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns)
1553BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns)
1554BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns)
1555BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns)
1556
ae61c502 1557BU_VSX_3 (XXPERMDI_1TI, "xxpermdi_1ti", CONST, vsx_xxpermdi_v1ti)
0375b229 1558BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df)
1559BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di)
1560BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf)
1561BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si)
1562BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi)
1563BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi)
ae61c502 1564BU_VSX_3 (SET_1TI, "set_1ti", CONST, vsx_set_v1ti)
0375b229 1565BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df)
1566BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di)
1567BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di)
1568BU_VSX_3 (XXSLDWI_2DF, "xxsldwi_2df", CONST, vsx_xxsldwi_v2df)
1569BU_VSX_3 (XXSLDWI_4SF, "xxsldwi_4sf", CONST, vsx_xxsldwi_v4sf)
1570BU_VSX_3 (XXSLDWI_4SI, "xxsldwi_4si", CONST, vsx_xxsldwi_v4si)
1571BU_VSX_3 (XXSLDWI_8HI, "xxsldwi_8hi", CONST, vsx_xxsldwi_v8hi)
1572BU_VSX_3 (XXSLDWI_16QI, "xxsldwi_16qi", CONST, vsx_xxsldwi_v16qi)
1573
1574/* 2 argument VSX builtins. */
1575BU_VSX_2 (XVADDDP, "xvadddp", FP, addv2df3)
1576BU_VSX_2 (XVSUBDP, "xvsubdp", FP, subv2df3)
1577BU_VSX_2 (XVMULDP, "xvmuldp", FP, mulv2df3)
1578BU_VSX_2 (XVDIVDP, "xvdivdp", FP, divv2df3)
1579BU_VSX_2 (RECIP_V2DF, "xvrecipdivdp", FP, recipv2df3)
1580BU_VSX_2 (XVMINDP, "xvmindp", CONST, sminv2df3)
1581BU_VSX_2 (XVMAXDP, "xvmaxdp", CONST, smaxv2df3)
1582BU_VSX_2 (XVTDIVDP_FE, "xvtdivdp_fe", CONST, vsx_tdivv2df3_fe)
1583BU_VSX_2 (XVTDIVDP_FG, "xvtdivdp_fg", CONST, vsx_tdivv2df3_fg)
1584BU_VSX_2 (XVCMPEQDP, "xvcmpeqdp", CONST, vector_eqv2df)
1585BU_VSX_2 (XVCMPGTDP, "xvcmpgtdp", CONST, vector_gtv2df)
1586BU_VSX_2 (XVCMPGEDP, "xvcmpgedp", CONST, vector_gev2df)
1587
1588BU_VSX_2 (XVADDSP, "xvaddsp", FP, addv4sf3)
1589BU_VSX_2 (XVSUBSP, "xvsubsp", FP, subv4sf3)
1590BU_VSX_2 (XVMULSP, "xvmulsp", FP, mulv4sf3)
1591BU_VSX_2 (XVDIVSP, "xvdivsp", FP, divv4sf3)
1592BU_VSX_2 (RECIP_V4SF, "xvrecipdivsp", FP, recipv4sf3)
1593BU_VSX_2 (XVMINSP, "xvminsp", CONST, sminv4sf3)
1594BU_VSX_2 (XVMAXSP, "xvmaxsp", CONST, smaxv4sf3)
1595BU_VSX_2 (XVTDIVSP_FE, "xvtdivsp_fe", CONST, vsx_tdivv4sf3_fe)
1596BU_VSX_2 (XVTDIVSP_FG, "xvtdivsp_fg", CONST, vsx_tdivv4sf3_fg)
1597BU_VSX_2 (XVCMPEQSP, "xvcmpeqsp", CONST, vector_eqv4sf)
1598BU_VSX_2 (XVCMPGTSP, "xvcmpgtsp", CONST, vector_gtv4sf)
1599BU_VSX_2 (XVCMPGESP, "xvcmpgesp", CONST, vector_gev4sf)
1600
1601BU_VSX_2 (XSMINDP, "xsmindp", CONST, smindf3)
1602BU_VSX_2 (XSMAXDP, "xsmaxdp", CONST, smaxdf3)
1603BU_VSX_2 (XSTDIVDP_FE, "xstdivdp_fe", CONST, vsx_tdivdf3_fe)
1604BU_VSX_2 (XSTDIVDP_FG, "xstdivdp_fg", CONST, vsx_tdivdf3_fg)
1605BU_VSX_2 (CPSGNDP, "cpsgndp", CONST, vector_copysignv2df3)
1606BU_VSX_2 (CPSGNSP, "cpsgnsp", CONST, vector_copysignv4sf3)
1607
1608BU_VSX_2 (CONCAT_2DF, "concat_2df", CONST, vsx_concat_v2df)
1609BU_VSX_2 (CONCAT_2DI, "concat_2di", CONST, vsx_concat_v2di)
1610BU_VSX_2 (SPLAT_2DF, "splat_2df", CONST, vsx_splat_v2df)
1611BU_VSX_2 (SPLAT_2DI, "splat_2di", CONST, vsx_splat_v2di)
1612BU_VSX_2 (XXMRGHW_4SF, "xxmrghw", CONST, vsx_xxmrghw_v4sf)
1613BU_VSX_2 (XXMRGHW_4SI, "xxmrghw_4si", CONST, vsx_xxmrghw_v4si)
1614BU_VSX_2 (XXMRGLW_4SF, "xxmrglw", CONST, vsx_xxmrglw_v4sf)
1615BU_VSX_2 (XXMRGLW_4SI, "xxmrglw_4si", CONST, vsx_xxmrglw_v4si)
c8ad47e1 1616BU_VSX_2 (VEC_MERGEL_V2DF, "mergel_2df", CONST, vsx_mergel_v2df)
1617BU_VSX_2 (VEC_MERGEL_V2DI, "mergel_2di", CONST, vsx_mergel_v2di)
1618BU_VSX_2 (VEC_MERGEH_V2DF, "mergeh_2df", CONST, vsx_mergeh_v2df)
1619BU_VSX_2 (VEC_MERGEH_V2DI, "mergeh_2di", CONST, vsx_mergeh_v2di)
d5f3ed72 1620BU_VSX_2 (XXSPLTD_V2DF, "xxspltd_2df", CONST, vsx_xxspltd_v2df)
1621BU_VSX_2 (XXSPLTD_V2DI, "xxspltd_2di", CONST, vsx_xxspltd_v2di)
1622BU_VSX_2 (DIV_V2DI, "div_2di", CONST, vsx_div_v2di)
1623BU_VSX_2 (UDIV_V2DI, "udiv_2di", CONST, vsx_udiv_v2di)
1624BU_VSX_2 (MUL_V2DI, "mul_2di", CONST, vsx_mul_v2di)
0375b229 1625
c4de79b6 1626BU_VSX_2 (XVCVSXDDP_SCALE, "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale)
1627BU_VSX_2 (XVCVUXDDP_SCALE, "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale)
1628BU_VSX_2 (XVCVDPSXDS_SCALE, "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale)
1629BU_VSX_2 (XVCVDPUXDS_SCALE, "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale)
1630
35267be7 1631BU_VSX_2 (CMPGE_16QI, "cmpge_16qi", CONST, vector_nltv16qi)
1632BU_VSX_2 (CMPGE_8HI, "cmpge_8hi", CONST, vector_nltv8hi)
1633BU_VSX_2 (CMPGE_4SI, "cmpge_4si", CONST, vector_nltv4si)
1634BU_VSX_2 (CMPGE_2DI, "cmpge_2di", CONST, vector_nltv2di)
1635BU_VSX_2 (CMPGE_U16QI, "cmpge_u16qi", CONST, vector_nltuv16qi)
1636BU_VSX_2 (CMPGE_U8HI, "cmpge_u8hi", CONST, vector_nltuv8hi)
1637BU_VSX_2 (CMPGE_U4SI, "cmpge_u4si", CONST, vector_nltuv4si)
1638BU_VSX_2 (CMPGE_U2DI, "cmpge_u2di", CONST, vector_nltuv2di)
1639
1640BU_VSX_2 (CMPLE_16QI, "cmple_16qi", CONST, vector_ngtv16qi)
1641BU_VSX_2 (CMPLE_8HI, "cmple_8hi", CONST, vector_ngtv8hi)
1642BU_VSX_2 (CMPLE_4SI, "cmple_4si", CONST, vector_ngtv4si)
1643BU_VSX_2 (CMPLE_2DI, "cmple_2di", CONST, vector_ngtv2di)
1644BU_VSX_2 (CMPLE_U16QI, "cmple_u16qi", CONST, vector_ngtuv16qi)
1645BU_VSX_2 (CMPLE_U8HI, "cmple_u8hi", CONST, vector_ngtuv8hi)
1646BU_VSX_2 (CMPLE_U4SI, "cmple_u4si", CONST, vector_ngtuv4si)
1647BU_VSX_2 (CMPLE_U2DI, "cmple_u2di", CONST, vector_ngtuv2di)
67d38f28 1648BU_VSX_2 (FLOAT2_V2DI, "float2_v2di", CONST, float2_v2di)
1649BU_VSX_2 (UNS_FLOAT2_V2DI, "uns_float2_v2di", CONST, uns_float2_v2di)
35267be7 1650
ee9f1372 1651BU_VSX_2 (VEC_VSIGNED2_V2DF, "vsigned2_v2df", CONST, vsigned2_v2df)
1652BU_VSX_2 (VEC_VUNSIGNED2_V2DF, "vunsigned2_v2df", CONST, vunsigned2_v2df)
1653
0375b229 1654/* VSX abs builtin functions. */
1655BU_VSX_A (XVABSDP, "xvabsdp", CONST, absv2df2)
1656BU_VSX_A (XVNABSDP, "xvnabsdp", CONST, vsx_nabsv2df2)
1657BU_VSX_A (XVABSSP, "xvabssp", CONST, absv4sf2)
1658BU_VSX_A (XVNABSSP, "xvnabssp", CONST, vsx_nabsv4sf2)
1659
1660/* 1 argument VSX builtin functions. */
1661BU_VSX_1 (XVNEGDP, "xvnegdp", CONST, negv2df2)
1662BU_VSX_1 (XVSQRTDP, "xvsqrtdp", CONST, sqrtv2df2)
1663BU_VSX_1 (RSQRT_2DF, "xvrsqrtdp", CONST, rsqrtv2df2)
1664BU_VSX_1 (XVRSQRTEDP, "xvrsqrtedp", CONST, rsqrtev2df2)
1665BU_VSX_1 (XVTSQRTDP_FE, "xvtsqrtdp_fe", CONST, vsx_tsqrtv2df2_fe)
1666BU_VSX_1 (XVTSQRTDP_FG, "xvtsqrtdp_fg", CONST, vsx_tsqrtv2df2_fg)
1667BU_VSX_1 (XVREDP, "xvredp", CONST, vsx_frev2df2)
1668
1669BU_VSX_1 (XVNEGSP, "xvnegsp", CONST, negv4sf2)
1670BU_VSX_1 (XVSQRTSP, "xvsqrtsp", CONST, sqrtv4sf2)
1671BU_VSX_1 (RSQRT_4SF, "xvrsqrtsp", CONST, rsqrtv4sf2)
1672BU_VSX_1 (XVRSQRTESP, "xvrsqrtesp", CONST, rsqrtev4sf2)
1673BU_VSX_1 (XVTSQRTSP_FE, "xvtsqrtsp_fe", CONST, vsx_tsqrtv4sf2_fe)
1674BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg)
1675BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2)
1676
1677BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp)
81f0e7d0 1678BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvspdp)
0375b229 1679BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp)
1680BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp)
1681BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe)
1682BU_VSX_1 (XSTSQRTDP_FG, "xstsqrtdp_fg", CONST, vsx_tsqrtdf2_fg)
1683
1684BU_VSX_1 (XVCVDPSXDS, "xvcvdpsxds", CONST, vsx_fix_truncv2dfv2di2)
1685BU_VSX_1 (XVCVDPUXDS, "xvcvdpuxds", CONST, vsx_fixuns_truncv2dfv2di2)
1686BU_VSX_1 (XVCVDPUXDS_UNS, "xvcvdpuxds_uns", CONST, vsx_fixuns_truncv2dfv2di2)
1687BU_VSX_1 (XVCVSXDDP, "xvcvsxddp", CONST, vsx_floatv2div2df2)
1688BU_VSX_1 (XVCVUXDDP, "xvcvuxddp", CONST, vsx_floatunsv2div2df2)
1689BU_VSX_1 (XVCVUXDDP_UNS, "xvcvuxddp_uns", CONST, vsx_floatunsv2div2df2)
1690
1691BU_VSX_1 (XVCVSPSXWS, "xvcvspsxws", CONST, vsx_fix_truncv4sfv4si2)
1692BU_VSX_1 (XVCVSPUXWS, "xvcvspuxws", CONST, vsx_fixuns_truncv4sfv4si2)
1693BU_VSX_1 (XVCVSXWSP, "xvcvsxwsp", CONST, vsx_floatv4siv4sf2)
1694BU_VSX_1 (XVCVUXWSP, "xvcvuxwsp", CONST, vsx_floatunsv4siv4sf2)
1695
1696BU_VSX_1 (XVCVDPSXWS, "xvcvdpsxws", CONST, vsx_xvcvdpsxws)
1697BU_VSX_1 (XVCVDPUXWS, "xvcvdpuxws", CONST, vsx_xvcvdpuxws)
1698BU_VSX_1 (XVCVSXWDP, "xvcvsxwdp", CONST, vsx_xvcvsxwdp)
1699BU_VSX_1 (XVCVUXWDP, "xvcvuxwdp", CONST, vsx_xvcvuxwdp)
1700BU_VSX_1 (XVRDPI, "xvrdpi", CONST, vsx_xvrdpi)
1701BU_VSX_1 (XVRDPIC, "xvrdpic", CONST, vsx_xvrdpic)
1702BU_VSX_1 (XVRDPIM, "xvrdpim", CONST, vsx_floorv2df2)
1703BU_VSX_1 (XVRDPIP, "xvrdpip", CONST, vsx_ceilv2df2)
1704BU_VSX_1 (XVRDPIZ, "xvrdpiz", CONST, vsx_btruncv2df2)
1705
1706BU_VSX_1 (XVCVSPSXDS, "xvcvspsxds", CONST, vsx_xvcvspsxds)
1707BU_VSX_1 (XVCVSPUXDS, "xvcvspuxds", CONST, vsx_xvcvspuxds)
1708BU_VSX_1 (XVCVSXDSP, "xvcvsxdsp", CONST, vsx_xvcvsxdsp)
1709BU_VSX_1 (XVCVUXDSP, "xvcvuxdsp", CONST, vsx_xvcvuxdsp)
67d38f28 1710
1711BU_VSX_1 (XVCVSXWSP_V4SF, "vsx_xvcvsxwsp", CONST, vsx_xvcvsxwsp)
1712BU_VSX_1 (XVCVUXWSP_V4SF, "vsx_xvcvuxwsp", CONST, vsx_xvcvuxwsp)
1713BU_VSX_1 (FLOATE_V2DI, "floate_v2di", CONST, floatev2di)
1714BU_VSX_1 (FLOATE_V2DF, "floate_v2df", CONST, floatev2df)
1715BU_VSX_1 (FLOATO_V2DI, "floato_v2di", CONST, floatov2di)
1716BU_VSX_1 (FLOATO_V2DF, "floato_v2df", CONST, floatov2df)
1717BU_VSX_1 (UNS_FLOATO_V2DI, "uns_floato_v2di", CONST, unsfloatov2di)
1718BU_VSX_1 (UNS_FLOATE_V2DI, "uns_floate_v2di", CONST, unsfloatev2di)
1719
0375b229 1720BU_VSX_1 (XVRSPI, "xvrspi", CONST, vsx_xvrspi)
1721BU_VSX_1 (XVRSPIC, "xvrspic", CONST, vsx_xvrspic)
1722BU_VSX_1 (XVRSPIM, "xvrspim", CONST, vsx_floorv4sf2)
1723BU_VSX_1 (XVRSPIP, "xvrspip", CONST, vsx_ceilv4sf2)
1724BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2)
1725
1726BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi)
1727BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic)
0b16079d 1728BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, floordf2)
1729BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, ceildf2)
1730BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, btruncdf2)
0375b229 1731
1911475f 1732BU_VSX_1 (DOUBLEE_V4SI, "doublee_v4si", CONST, doubleev4si2)
1733BU_VSX_1 (DOUBLEE_V4SF, "doublee_v4sf", CONST, doubleev4sf2)
1734BU_VSX_1 (UNS_DOUBLEE_V4SI, "uns_doublee_v4si", CONST, unsdoubleev4si2)
1735BU_VSX_1 (DOUBLEO_V4SI, "doubleo_v4si", CONST, doubleov4si2)
1736BU_VSX_1 (DOUBLEO_V4SF, "doubleo_v4sf", CONST, doubleov4sf2)
1737BU_VSX_1 (UNS_DOUBLEO_V4SI, "uns_doubleo_v4si", CONST, unsdoubleov4si2)
1738BU_VSX_1 (DOUBLEH_V4SI, "doubleh_v4si", CONST, doublehv4si2)
1739BU_VSX_1 (DOUBLEH_V4SF, "doubleh_v4sf", CONST, doublehv4sf2)
1740BU_VSX_1 (UNS_DOUBLEH_V4SI, "uns_doubleh_v4si", CONST, unsdoublehv4si2)
1741BU_VSX_1 (DOUBLEL_V4SI, "doublel_v4si", CONST, doublelv4si2)
1742BU_VSX_1 (DOUBLEL_V4SF, "doublel_v4sf", CONST, doublelv4sf2)
1743BU_VSX_1 (UNS_DOUBLEL_V4SI, "uns_doublel_v4si", CONST, unsdoublelv4si2)
1744
ee9f1372 1745BU_VSX_1 (VEC_VSIGNED_V4SF, "vsigned_v4sf", CONST, vsx_xvcvspsxws)
1746BU_VSX_1 (VEC_VSIGNED_V2DF, "vsigned_v2df", CONST, vsx_xvcvdpsxds)
1747BU_VSX_1 (VEC_VSIGNEDE_V2DF, "vsignede_v2df", CONST, vsignede_v2df)
1748BU_VSX_1 (VEC_VSIGNEDO_V2DF, "vsignedo_v2df", CONST, vsignedo_v2df)
1749
1750BU_VSX_1 (VEC_VUNSIGNED_V4SF, "vunsigned_v4sf", CONST, vsx_xvcvspsxws)
1751BU_VSX_1 (VEC_VUNSIGNED_V2DF, "vunsigned_v2df", CONST, vsx_xvcvdpsxds)
1752BU_VSX_1 (VEC_VUNSIGNEDE_V2DF, "vunsignede_v2df", CONST, vunsignede_v2df)
1753BU_VSX_1 (VEC_VUNSIGNEDO_V2DF, "vunsignedo_v2df", CONST, vunsignedo_v2df)
1754
0375b229 1755/* VSX predicate functions. */
1756BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p)
1757BU_VSX_P (XVCMPGESP_P, "xvcmpgesp_p", CONST, vector_ge_v4sf_p)
1758BU_VSX_P (XVCMPGTSP_P, "xvcmpgtsp_p", CONST, vector_gt_v4sf_p)
1759BU_VSX_P (XVCMPEQDP_P, "xvcmpeqdp_p", CONST, vector_eq_v2df_p)
1760BU_VSX_P (XVCMPGEDP_P, "xvcmpgedp_p", CONST, vector_ge_v2df_p)
1761BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p)
1762
1763/* VSX builtins that are handled as special cases. */
1764BU_VSX_X (LXSDX, "lxsdx", MEM)
ae61c502 1765BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", MEM)
0375b229 1766BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM)
1767BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM)
1768BU_VSX_X (LXVDSX, "lxvdsx", MEM)
1769BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM)
1770BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM)
1771BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM)
1772BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM)
f7b0548e 1773
1774BU_VSX_X (XL_BE_V16QI, "xl_be_v16qi", MEM)
1775BU_VSX_X (XL_BE_V8HI, "xl_be_v8hi", MEM)
1776BU_VSX_X (XL_BE_V4SI, "xl_be_v4si", MEM)
1777BU_VSX_X (XL_BE_V2DI, "xl_be_v2di", MEM)
1778BU_VSX_X (XL_BE_V4SF, "xl_be_v4sf", MEM)
1779BU_VSX_X (XL_BE_V2DF, "xl_be_v2df", MEM)
1780
0375b229 1781BU_VSX_X (STXSDX, "stxsdx", MEM)
5f9065eb 1782BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM)
1783BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM)
1784BU_VSX_X (STXVD2X_V2DI, "stxvd2x_v2di", MEM)
1785BU_VSX_X (STXVW4X_V4SF, "stxvw4x_v4sf", MEM)
1786BU_VSX_X (STXVW4X_V4SI, "stxvw4x_v4si", MEM)
1787BU_VSX_X (STXVW4X_V8HI, "stxvw4x_v8hi", MEM)
1788BU_VSX_X (STXVW4X_V16QI, "stxvw4x_v16qi", MEM)
d94e6223 1789BU_VSX_X (LD_ELEMREV_V2DF, "ld_elemrev_v2df", MEM)
1790BU_VSX_X (LD_ELEMREV_V2DI, "ld_elemrev_v2di", MEM)
1791BU_VSX_X (LD_ELEMREV_V4SF, "ld_elemrev_v4sf", MEM)
1792BU_VSX_X (LD_ELEMREV_V4SI, "ld_elemrev_v4si", MEM)
1793BU_VSX_X (LD_ELEMREV_V8HI, "ld_elemrev_v8hi", MEM)
1794BU_VSX_X (LD_ELEMREV_V16QI, "ld_elemrev_v16qi", MEM)
1795BU_VSX_X (ST_ELEMREV_V2DF, "st_elemrev_v2df", MEM)
1796BU_VSX_X (ST_ELEMREV_V2DI, "st_elemrev_v2di", MEM)
1797BU_VSX_X (ST_ELEMREV_V4SF, "st_elemrev_v4sf", MEM)
1798BU_VSX_X (ST_ELEMREV_V4SI, "st_elemrev_v4si", MEM)
1799BU_VSX_X (ST_ELEMREV_V8HI, "st_elemrev_v8hi", MEM)
1800BU_VSX_X (ST_ELEMREV_V16QI, "st_elemrev_v16qi", MEM)
0375b229 1801BU_VSX_X (XSABSDP, "xsabsdp", CONST)
1802BU_VSX_X (XSADDDP, "xsadddp", FP)
1803BU_VSX_X (XSCMPODP, "xscmpodp", FP)
1804BU_VSX_X (XSCMPUDP, "xscmpudp", FP)
1805BU_VSX_X (XSCVDPSXDS, "xscvdpsxds", FP)
1806BU_VSX_X (XSCVDPSXWS, "xscvdpsxws", FP)
1807BU_VSX_X (XSCVDPUXDS, "xscvdpuxds", FP)
1808BU_VSX_X (XSCVDPUXWS, "xscvdpuxws", FP)
1809BU_VSX_X (XSCVSXDDP, "xscvsxddp", FP)
1810BU_VSX_X (XSCVUXDDP, "xscvuxddp", FP)
1811BU_VSX_X (XSDIVDP, "xsdivdp", FP)
1812BU_VSX_X (XSMADDADP, "xsmaddadp", FP)
1813BU_VSX_X (XSMADDMDP, "xsmaddmdp", FP)
1814BU_VSX_X (XSMOVDP, "xsmovdp", FP)
1815BU_VSX_X (XSMSUBADP, "xsmsubadp", FP)
1816BU_VSX_X (XSMSUBMDP, "xsmsubmdp", FP)
1817BU_VSX_X (XSMULDP, "xsmuldp", FP)
1818BU_VSX_X (XSNABSDP, "xsnabsdp", FP)
1819BU_VSX_X (XSNEGDP, "xsnegdp", FP)
1820BU_VSX_X (XSNMADDADP, "xsnmaddadp", FP)
1821BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP)
1822BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP)
1823BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP)
1824BU_VSX_X (XSSUBDP, "xssubdp", FP)
ae61c502 1825BU_VSX_X (VEC_INIT_V1TI, "vec_init_v1ti", CONST)
0375b229 1826BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST)
1827BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST)
ae61c502 1828BU_VSX_X (VEC_SET_V1TI, "vec_set_v1ti", CONST)
0375b229 1829BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST)
1830BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST)
ae61c502 1831BU_VSX_X (VEC_EXT_V1TI, "vec_ext_v1ti", CONST)
0375b229 1832BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST)
1833BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST)
605afdd6 1834
1835/* VSX overloaded builtins, add the overloaded functions not present in
1836 Altivec. */
605afdd6 1837
0375b229 1838/* 3 argument VSX overloaded builtins. */
1839BU_VSX_OVERLOAD_3 (MSUB, "msub")
1840BU_VSX_OVERLOAD_3 (NMADD, "nmadd")
1841BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi")
1842BU_VSX_OVERLOAD_3V (XXSLDWI, "xxsldwi")
1843
1844/* 2 argument VSX overloaded builtin functions. */
0375b229 1845BU_VSX_OVERLOAD_2 (DIV, "div")
1846BU_VSX_OVERLOAD_2 (XXMRGHW, "xxmrghw")
1847BU_VSX_OVERLOAD_2 (XXMRGLW, "xxmrglw")
1848BU_VSX_OVERLOAD_2 (XXSPLTD, "xxspltd")
1849BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw")
67d38f28 1850BU_VSX_OVERLOAD_2 (FLOAT2, "float2")
1851BU_VSX_OVERLOAD_2 (UNS_FLOAT2, "uns_float2")
ee9f1372 1852BU_VSX_OVERLOAD_2 (VSIGNED2, "vsigned2")
1853BU_VSX_OVERLOAD_2 (VUNSIGNED2, "vunsigned2")
0375b229 1854
a9c17725 1855/* 1 argument VSX overloaded builtin functions. */
1856BU_VSX_OVERLOAD_1 (DOUBLE, "double")
1911475f 1857BU_VSX_OVERLOAD_1 (DOUBLEE, "doublee")
1858BU_VSX_OVERLOAD_1 (UNS_DOUBLEE, "uns_doublee")
1859BU_VSX_OVERLOAD_1 (DOUBLEO, "doubleo")
1860BU_VSX_OVERLOAD_1 (UNS_DOUBLEO, "uns_doubleo")
1861BU_VSX_OVERLOAD_1 (DOUBLEH, "doubleh")
1862BU_VSX_OVERLOAD_1 (UNS_DOUBLEH, "uns_doubleh")
1863BU_VSX_OVERLOAD_1 (DOUBLEL, "doublel")
1864BU_VSX_OVERLOAD_1 (UNS_DOUBLEL, "uns_doublel")
67d38f28 1865BU_VSX_OVERLOAD_1 (FLOAT, "float")
1866BU_VSX_OVERLOAD_1 (FLOATE, "floate")
1867BU_VSX_OVERLOAD_1 (FLOATO, "floato")
a9c17725 1868
ee9f1372 1869BU_VSX_OVERLOAD_1 (VSIGNED, "vsigned")
1870BU_VSX_OVERLOAD_1 (VSIGNEDE, "vsignede")
1871BU_VSX_OVERLOAD_1 (VSIGNEDO, "vsignedo")
1872
1873BU_VSX_OVERLOAD_1 (VUNSIGNED, "vunsigned")
1874BU_VSX_OVERLOAD_1 (VUNSIGNEDE, "vunsignede")
1875BU_VSX_OVERLOAD_1 (VUNSIGNEDO, "vunsignedo")
1876
0375b229 1877/* VSX builtins that are handled as special cases. */
1878BU_VSX_OVERLOAD_X (LD, "ld")
1879BU_VSX_OVERLOAD_X (ST, "st")
d94e6223 1880BU_VSX_OVERLOAD_X (XL, "xl")
f7b0548e 1881BU_VSX_OVERLOAD_X (XL_BE, "xl_be")
d94e6223 1882BU_VSX_OVERLOAD_X (XST, "xst")
ae52d0de 1883\f
03eca6d3 1884/* 1 argument builtins pre ISA 2.04. */
1885BU_FP_MISC_1 (FCTID, "fctid", CONST, lrintdfdi2)
1886BU_FP_MISC_1 (FCTIW, "fctiw", CONST, lrintsfsi2)
1887
9534dff5 1888/* 2 argument CMPB instructions added in ISA 2.05. */
1889BU_P6_2 (CMPB_32, "cmpb_32", CONST, cmpbsi3)
1890BU_P6_64BIT_2 (CMPB, "cmpb", CONST, cmpbdi3)
1891
7028141d 1892/* 1 argument VSX instructions added in ISA 2.07. */
1893BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn)
1894BU_P8V_VSX_1 (XSCVDPSPN, "xscvdpspn", CONST, vsx_xscvdpspn)
1895
ae52d0de 1896/* 1 argument altivec instructions added in ISA 2.07. */
1897BU_P8V_AV_1 (ABS_V2DI, "abs_v2di", CONST, absv2di2)
1898BU_P8V_AV_1 (VUPKHSW, "vupkhsw", CONST, altivec_vupkhsw)
1899BU_P8V_AV_1 (VUPKLSW, "vupklsw", CONST, altivec_vupklsw)
7028141d 1900BU_P8V_AV_1 (VCLZB, "vclzb", CONST, clzv16qi2)
1901BU_P8V_AV_1 (VCLZH, "vclzh", CONST, clzv8hi2)
1902BU_P8V_AV_1 (VCLZW, "vclzw", CONST, clzv4si2)
1903BU_P8V_AV_1 (VCLZD, "vclzd", CONST, clzv2di2)
1904BU_P8V_AV_1 (VPOPCNTB, "vpopcntb", CONST, popcountv16qi2)
1905BU_P8V_AV_1 (VPOPCNTH, "vpopcnth", CONST, popcountv8hi2)
1906BU_P8V_AV_1 (VPOPCNTW, "vpopcntw", CONST, popcountv4si2)
1907BU_P8V_AV_1 (VPOPCNTD, "vpopcntd", CONST, popcountv2di2)
c6bd4248 1908BU_P8V_AV_1 (VPOPCNTUB, "vpopcntub", CONST, popcountv16qi2)
1909BU_P8V_AV_1 (VPOPCNTUH, "vpopcntuh", CONST, popcountv8hi2)
1910BU_P8V_AV_1 (VPOPCNTUW, "vpopcntuw", CONST, popcountv4si2)
1911BU_P8V_AV_1 (VPOPCNTUD, "vpopcntud", CONST, popcountv2di2)
7028141d 1912BU_P8V_AV_1 (VGBBD, "vgbbd", CONST, p8v_vgbbd)
ae52d0de 1913
1914/* 2 argument altivec instructions added in ISA 2.07. */
ae61c502 1915BU_P8V_AV_2 (VADDCUQ, "vaddcuq", CONST, altivec_vaddcuq)
ae52d0de 1916BU_P8V_AV_2 (VADDUDM, "vaddudm", CONST, addv2di3)
ae61c502 1917BU_P8V_AV_2 (VADDUQM, "vadduqm", CONST, altivec_vadduqm)
ae52d0de 1918BU_P8V_AV_2 (VMINSD, "vminsd", CONST, sminv2di3)
1919BU_P8V_AV_2 (VMAXSD, "vmaxsd", CONST, smaxv2di3)
1920BU_P8V_AV_2 (VMINUD, "vminud", CONST, uminv2di3)
1921BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3)
67d38f28 1922BU_P8V_AV_2 (VMRGEW_V4SI, "vmrgew_v4si", CONST, p8_vmrgew_v4si)
7028141d 1923BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow)
a1546352 1924BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq)
24cb4506 1925BU_P8V_AV_2 (VBPERMQ2, "vbpermq2", CONST, altivec_vbpermq2)
ae52d0de 1926BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum)
1927BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss)
1928BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus)
f1288d58 1929BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus)
f2e7ec4a 1930BU_P8V_AV_2 (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb)
1931BU_P8V_AV_2 (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh)
1932BU_P8V_AV_2 (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw)
1933BU_P8V_AV_2 (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd)
ae52d0de 1934BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3)
1935BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3)
1936BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3)
1937BU_P8V_AV_2 (VSRAD, "vsrad", CONST, vashrv2di3)
ae61c502 1938BU_P8V_AV_2 (VSUBCUQ, "vsubcuq", CONST, altivec_vsubcuq)
ae52d0de 1939BU_P8V_AV_2 (VSUBUDM, "vsubudm", CONST, subv2di3)
ae61c502 1940BU_P8V_AV_2 (VSUBUQM, "vsubuqm", CONST, altivec_vsubuqm)
ae52d0de 1941
7028141d 1942BU_P8V_AV_2 (EQV_V16QI, "eqv_v16qi", CONST, eqvv16qi3)
1943BU_P8V_AV_2 (EQV_V8HI, "eqv_v8hi", CONST, eqvv8hi3)
1944BU_P8V_AV_2 (EQV_V4SI, "eqv_v4si", CONST, eqvv4si3)
1945BU_P8V_AV_2 (EQV_V2DI, "eqv_v2di", CONST, eqvv2di3)
ae61c502 1946BU_P8V_AV_2 (EQV_V1TI, "eqv_v1ti", CONST, eqvv1ti3)
7028141d 1947BU_P8V_AV_2 (EQV_V4SF, "eqv_v4sf", CONST, eqvv4sf3)
1948BU_P8V_AV_2 (EQV_V2DF, "eqv_v2df", CONST, eqvv2df3)
1949
1950BU_P8V_AV_2 (NAND_V16QI, "nand_v16qi", CONST, nandv16qi3)
1951BU_P8V_AV_2 (NAND_V8HI, "nand_v8hi", CONST, nandv8hi3)
1952BU_P8V_AV_2 (NAND_V4SI, "nand_v4si", CONST, nandv4si3)
1953BU_P8V_AV_2 (NAND_V2DI, "nand_v2di", CONST, nandv2di3)
ae61c502 1954BU_P8V_AV_2 (NAND_V1TI, "nand_v1ti", CONST, nandv1ti3)
7028141d 1955BU_P8V_AV_2 (NAND_V4SF, "nand_v4sf", CONST, nandv4sf3)
1956BU_P8V_AV_2 (NAND_V2DF, "nand_v2df", CONST, nandv2df3)
1957
1958BU_P8V_AV_2 (ORC_V16QI, "orc_v16qi", CONST, orcv16qi3)
1959BU_P8V_AV_2 (ORC_V8HI, "orc_v8hi", CONST, orcv8hi3)
1960BU_P8V_AV_2 (ORC_V4SI, "orc_v4si", CONST, orcv4si3)
1961BU_P8V_AV_2 (ORC_V2DI, "orc_v2di", CONST, orcv2di3)
ae61c502 1962BU_P8V_AV_2 (ORC_V1TI, "orc_v1ti", CONST, orcv1ti3)
7028141d 1963BU_P8V_AV_2 (ORC_V4SF, "orc_v4sf", CONST, orcv4sf3)
1964BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3)
1965
ae61c502 1966/* 3 argument altivec instructions added in ISA 2.07. */
ac0adecc 1967BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm)
1968BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq)
1969BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm)
1970BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq)
ae61c502 1971
ae52d0de 1972/* Vector comparison instructions added in ISA 2.07. */
1973BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di)
1974BU_P8V_AV_2 (VCMPGTSD, "vcmpgtsd", CONST, vector_gtv2di)
1975BU_P8V_AV_2 (VCMPGTUD, "vcmpgtud", CONST, vector_gtuv2di)
1976
1977/* Vector comparison predicate instructions added in ISA 2.07. */
1978BU_P8V_AV_P (VCMPEQUD_P, "vcmpequd_p", CONST, vector_eq_v2di_p)
1979BU_P8V_AV_P (VCMPGTSD_P, "vcmpgtsd_p", CONST, vector_gt_v2di_p)
1980BU_P8V_AV_P (VCMPGTUD_P, "vcmpgtud_p", CONST, vector_gtu_v2di_p)
1981
9534dff5 1982/* ISA 2.05 overloaded 2 argument functions. */
1983BU_P6_OVERLOAD_2 (CMPB, "cmpb")
1984
ae52d0de 1985/* ISA 2.07 vector overloaded 1 argument functions. */
1986BU_P8V_OVERLOAD_1 (VUPKHSW, "vupkhsw")
1987BU_P8V_OVERLOAD_1 (VUPKLSW, "vupklsw")
7028141d 1988BU_P8V_OVERLOAD_1 (VCLZ, "vclz")
1989BU_P8V_OVERLOAD_1 (VCLZB, "vclzb")
1990BU_P8V_OVERLOAD_1 (VCLZH, "vclzh")
1991BU_P8V_OVERLOAD_1 (VCLZW, "vclzw")
1992BU_P8V_OVERLOAD_1 (VCLZD, "vclzd")
1993BU_P8V_OVERLOAD_1 (VPOPCNT, "vpopcnt")
1994BU_P8V_OVERLOAD_1 (VPOPCNTB, "vpopcntb")
1995BU_P8V_OVERLOAD_1 (VPOPCNTH, "vpopcnth")
1996BU_P8V_OVERLOAD_1 (VPOPCNTW, "vpopcntw")
1997BU_P8V_OVERLOAD_1 (VPOPCNTD, "vpopcntd")
c6bd4248 1998BU_P8V_OVERLOAD_1 (VPOPCNTU, "vpopcntu")
1999BU_P8V_OVERLOAD_1 (VPOPCNTUB, "vpopcntub")
2000BU_P8V_OVERLOAD_1 (VPOPCNTUH, "vpopcntuh")
2001BU_P8V_OVERLOAD_1 (VPOPCNTUW, "vpopcntuw")
2002BU_P8V_OVERLOAD_1 (VPOPCNTUD, "vpopcntud")
7028141d 2003BU_P8V_OVERLOAD_1 (VGBBD, "vgbbd")
ae52d0de 2004
2005/* ISA 2.07 vector overloaded 2 argument functions. */
7028141d 2006BU_P8V_OVERLOAD_2 (EQV, "eqv")
2007BU_P8V_OVERLOAD_2 (NAND, "nand")
2008BU_P8V_OVERLOAD_2 (ORC, "orc")
ae61c502 2009BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq")
ae52d0de 2010BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm")
ae61c502 2011BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm")
a1546352 2012BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq")
ae52d0de 2013BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd")
2014BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud")
2015BU_P8V_OVERLOAD_2 (VMINSD, "vminsd")
2016BU_P8V_OVERLOAD_2 (VMINUD, "vminud")
7028141d 2017BU_P8V_OVERLOAD_2 (VMRGEW, "vmrgew")
2018BU_P8V_OVERLOAD_2 (VMRGOW, "vmrgow")
ae52d0de 2019BU_P8V_OVERLOAD_2 (VPKSDSS, "vpksdss")
2020BU_P8V_OVERLOAD_2 (VPKSDUS, "vpksdus")
2021BU_P8V_OVERLOAD_2 (VPKUDUM, "vpkudum")
2022BU_P8V_OVERLOAD_2 (VPKUDUS, "vpkudus")
f2e7ec4a 2023BU_P8V_OVERLOAD_2 (VPMSUM, "vpmsum")
ae52d0de 2024BU_P8V_OVERLOAD_2 (VRLD, "vrld")
2025BU_P8V_OVERLOAD_2 (VSLD, "vsld")
2026BU_P8V_OVERLOAD_2 (VSRAD, "vsrad")
2027BU_P8V_OVERLOAD_2 (VSRD, "vsrd")
ae61c502 2028BU_P8V_OVERLOAD_2 (VSUBCUQ, "vsubcuq")
ae52d0de 2029BU_P8V_OVERLOAD_2 (VSUBUDM, "vsubudm")
ae61c502 2030BU_P8V_OVERLOAD_2 (VSUBUQM, "vsubuqm")
2031
2032/* ISA 2.07 vector overloaded 3 argument functions. */
2033BU_P8V_OVERLOAD_3 (VADDECUQ, "vaddecuq")
2034BU_P8V_OVERLOAD_3 (VADDEUQM, "vaddeuqm")
2035BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq")
2036BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm")
ae52d0de 2037
5a5b02e1 2038/* ISA 3.0 vector overloaded 2-argument functions. */
2039BU_P9V_AV_2 (VSLV, "vslv", CONST, vslv)
2040BU_P9V_AV_2 (VSRV, "vsrv", CONST, vsrv)
b3f0e7fb 2041BU_P9V_AV_2 (CONVERT_4F32_8I16, "convert_4f32_8i16", CONST, convert_4f32_8i16)
5a5b02e1 2042
2043/* ISA 3.0 vector overloaded 2-argument functions. */
2044BU_P9V_OVERLOAD_2 (VSLV, "vslv")
2045BU_P9V_OVERLOAD_2 (VSRV, "vsrv")
b3f0e7fb 2046BU_P9V_OVERLOAD_2 (CONVERT_4F32_8I16, "convert_4f32_8i16")
5a5b02e1 2047
412f195f 2048/* 2 argument vector functions added in ISA 3.0 (power9). */
2049BU_P9V_AV_2 (VADUB, "vadub", CONST, vaduv16qi3)
2050BU_P9V_AV_2 (VADUH, "vaduh", CONST, vaduv8hi3)
2051BU_P9V_AV_2 (VADUW, "vaduw", CONST, vaduv4si3)
3bc3ba6f 2052BU_P9V_AV_2 (VRLWNM, "vrlwnm", CONST, altivec_vrlwnm)
2053BU_P9V_AV_2 (VRLDNM, "vrldnm", CONST, altivec_vrldnm)
24cb4506 2054BU_P9V_AV_2 (VBPERMD, "vbpermd", CONST, altivec_vbpermd)
412f195f 2055
2056/* ISA 3.0 vector overloaded 2 argument functions. */
2057BU_P9V_OVERLOAD_2 (VADU, "vadu")
2058BU_P9V_OVERLOAD_2 (VADUB, "vadub")
2059BU_P9V_OVERLOAD_2 (VADUH, "vaduh")
2060BU_P9V_OVERLOAD_2 (VADUW, "vaduw")
3bc3ba6f 2061BU_P9V_OVERLOAD_2 (RLNM, "rlnm")
24cb4506 2062BU_P9V_OVERLOAD_2 (VBPERM, "vbperm_api")
3bc3ba6f 2063
2064/* ISA 3.0 3-argument vector functions. */
2065BU_P9V_AV_3 (VRLWMI, "vrlwmi", CONST, altivec_vrlwmi)
2066BU_P9V_AV_3 (VRLDMI, "vrldmi", CONST, altivec_vrldmi)
2067
2068/* ISA 3.0 vector overloaded 3-argument functions. */
2069BU_P9V_OVERLOAD_3 (RLMI, "rlmi")
412f195f 2070
97468983 2071/* 1 argument vsx scalar functions added in ISA 3.0 (power9). */
2072BU_P9V_64BIT_VSX_1 (VSEEDP, "scalar_extract_exp", CONST, xsxexpdp)
2073BU_P9V_64BIT_VSX_1 (VSESDP, "scalar_extract_sig", CONST, xsxsigdp)
2074
4a71f283 2075BU_P9V_64BIT_VSX_1 (VSEEQP, "scalar_extract_expq", CONST, xsxexpqp)
2076BU_P9V_64BIT_VSX_1 (VSESQP, "scalar_extract_sigq", CONST, xsxsigqp)
2077
2078BU_P9V_VSX_1 (VSTDCNQP, "scalar_test_neg_qp", CONST, xststdcnegqp)
97468983 2079BU_P9V_VSX_1 (VSTDCNDP, "scalar_test_neg_dp", CONST, xststdcnegdp)
2080BU_P9V_VSX_1 (VSTDCNSP, "scalar_test_neg_sp", CONST, xststdcnegsp)
2081
288e4639 2082BU_P9V_VSX_1 (XXBRQ_V16QI, "xxbrq_v16qi", CONST, p9_xxbrq_v16qi)
2083BU_P9V_VSX_1 (XXBRQ_V1TI, "xxbrq_v1ti", CONST, p9_xxbrq_v1ti)
2084BU_P9V_VSX_1 (XXBRD_V2DI, "xxbrd_v2di", CONST, p9_xxbrd_v2di)
2085BU_P9V_VSX_1 (XXBRD_V2DF, "xxbrd_v2df", CONST, p9_xxbrd_v2df)
2086BU_P9V_VSX_1 (XXBRW_V4SI, "xxbrw_v4si", CONST, p9_xxbrw_v4si)
2087BU_P9V_VSX_1 (XXBRW_V4SF, "xxbrw_v4sf", CONST, p9_xxbrw_v4sf)
2088BU_P9V_VSX_1 (XXBRH_V8HI, "xxbrh_v8hi", CONST, p9_xxbrh_v8hi)
2089
97468983 2090/* 2 argument vsx scalar functions added in ISA 3.0 (power9). */
2091BU_P9V_64BIT_VSX_2 (VSIEDP, "scalar_insert_exp", CONST, xsiexpdp)
b8588f71 2092BU_P9V_64BIT_VSX_2 (VSIEDPF, "scalar_insert_exp_dp", CONST, xsiexpdpf)
97468983 2093
4a71f283 2094BU_P9V_64BIT_VSX_2 (VSIEQP, "scalar_insert_exp_q", CONST, xsiexpqp)
2095BU_P9V_64BIT_VSX_2 (VSIEQPF, "scalar_insert_exp_qp", CONST, xsiexpqpf)
2096
97468983 2097BU_P9V_VSX_2 (VSCEDPGT, "scalar_cmp_exp_dp_gt", CONST, xscmpexpdp_gt)
2098BU_P9V_VSX_2 (VSCEDPLT, "scalar_cmp_exp_dp_lt", CONST, xscmpexpdp_lt)
2099BU_P9V_VSX_2 (VSCEDPEQ, "scalar_cmp_exp_dp_eq", CONST, xscmpexpdp_eq)
2100BU_P9V_VSX_2 (VSCEDPUO, "scalar_cmp_exp_dp_unordered", CONST, xscmpexpdp_unordered)
2101
4a71f283 2102BU_P9V_VSX_2 (VSTDCQP, "scalar_test_data_class_qp", CONST, xststdcqp)
97468983 2103BU_P9V_VSX_2 (VSTDCDP, "scalar_test_data_class_dp", CONST, xststdcdp)
2104BU_P9V_VSX_2 (VSTDCSP, "scalar_test_data_class_sp", CONST, xststdcsp)
2105
2106/* ISA 3.0 vector scalar overloaded 1 argument functions. */
2107BU_P9V_OVERLOAD_1 (VSEEDP, "scalar_extract_exp")
2108BU_P9V_OVERLOAD_1 (VSESDP, "scalar_extract_sig")
2109
2110BU_P9V_OVERLOAD_1 (VSTDCN, "scalar_test_neg")
4a71f283 2111BU_P9V_OVERLOAD_1 (VSTDCNQP, "scalar_test_neg_qp")
97468983 2112BU_P9V_OVERLOAD_1 (VSTDCNDP, "scalar_test_neg_dp")
2113BU_P9V_OVERLOAD_1 (VSTDCNSP, "scalar_test_neg_sp")
2114
288e4639 2115BU_P9V_OVERLOAD_1 (REVB, "revb")
2116
d782c3b8 2117BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth")
2118BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl")
2119
97468983 2120/* ISA 3.0 vector scalar overloaded 2 argument functions. */
2121BU_P9V_OVERLOAD_2 (VSIEDP, "scalar_insert_exp")
2122
2123BU_P9V_OVERLOAD_2 (VSTDC, "scalar_test_data_class")
4a71f283 2124BU_P9V_OVERLOAD_2 (VSTDCQP, "scalar_test_data_class_qp")
97468983 2125BU_P9V_OVERLOAD_2 (VSTDCDP, "scalar_test_data_class_dp")
2126BU_P9V_OVERLOAD_2 (VSTDCSP, "scalar_test_data_class_sp")
2127
2128BU_P9V_OVERLOAD_2 (VSCEDPGT, "scalar_cmp_exp_gt")
2129BU_P9V_OVERLOAD_2 (VSCEDPLT, "scalar_cmp_exp_lt")
2130BU_P9V_OVERLOAD_2 (VSCEDPEQ, "scalar_cmp_exp_eq")
2131BU_P9V_OVERLOAD_2 (VSCEDPUO, "scalar_cmp_exp_unordered")
2132
2133/* 1 argument vsx vector functions added in ISA 3.0 (power9). */
2134BU_P9V_VSX_1 (VEEDP, "extract_exp_dp", CONST, xvxexpdp)
2135BU_P9V_VSX_1 (VEESP, "extract_exp_sp", CONST, xvxexpsp)
2136BU_P9V_VSX_1 (VESDP, "extract_sig_dp", CONST, xvxsigdp)
2137BU_P9V_VSX_1 (VESSP, "extract_sig_sp", CONST, xvxsigsp)
d782c3b8 2138BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth", CONST, vextract_fp_from_shorth)
2139BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl", CONST, vextract_fp_from_shortl)
97468983 2140
2141/* 2 argument vsx vector functions added in ISA 3.0 (power9). */
2142BU_P9V_VSX_2 (VIEDP, "insert_exp_dp", CONST, xviexpdp)
2143BU_P9V_VSX_2 (VIESP, "insert_exp_sp", CONST, xviexpsp)
2144BU_P9V_VSX_2 (VTDCDP, "test_data_class_dp", CONST, xvtstdcdp)
2145BU_P9V_VSX_2 (VTDCSP, "test_data_class_sp", CONST, xvtstdcsp)
2146
2147/* ISA 3.0 vector overloaded 1 argument functions. */
2148BU_P9V_OVERLOAD_1 (VES, "extract_sig")
2149BU_P9V_OVERLOAD_1 (VESDP, "extract_sig_dp")
2150BU_P9V_OVERLOAD_1 (VESSP, "extract_sig_sp")
2151
2152BU_P9V_OVERLOAD_1 (VEE, "extract_exp")
2153BU_P9V_OVERLOAD_1 (VEEDP, "extract_exp_dp")
2154BU_P9V_OVERLOAD_1 (VEESP, "extract_exp_sp")
2155
2156/* ISA 3.0 vector overloaded 2 argument functions. */
2157BU_P9V_OVERLOAD_2 (VTDC, "test_data_class")
2158BU_P9V_OVERLOAD_2 (VTDCDP, "test_data_class_dp")
2159BU_P9V_OVERLOAD_2 (VTDCSP, "test_data_class_sp")
2160
2161BU_P9V_OVERLOAD_2 (VIE, "insert_exp")
2162BU_P9V_OVERLOAD_2 (VIEDP, "insert_exp_dp")
2163BU_P9V_OVERLOAD_2 (VIESP, "insert_exp_sp")
2164
f9debd38 2165/* 2 argument vector functions added in ISA 3.0 (power9). */
2166BU_P9V_64BIT_VSX_2 (LXVL, "lxvl", CONST, lxvl)
5433fcc8 2167BU_P9V_64BIT_VSX_2 (XL_LEN_R, "xl_len_r", CONST, xl_len_r)
f9debd38 2168
2169BU_P9V_AV_2 (VEXTUBLX, "vextublx", CONST, vextublx)
2170BU_P9V_AV_2 (VEXTUBRX, "vextubrx", CONST, vextubrx)
2171BU_P9V_AV_2 (VEXTUHLX, "vextuhlx", CONST, vextuhlx)
2172BU_P9V_AV_2 (VEXTUHRX, "vextuhrx", CONST, vextuhrx)
2173BU_P9V_AV_2 (VEXTUWLX, "vextuwlx", CONST, vextuwlx)
2174BU_P9V_AV_2 (VEXTUWRX, "vextuwrx", CONST, vextuwrx)
2175
ee33c236 2176/* Insert/extract 4 byte word into a vector. */
2177BU_P9V_VSX_2 (VEXTRACT4B, "vextract4b", CONST, vextract4b)
2178BU_P9V_VSX_3 (VINSERT4B, "vinsert4b", CONST, vinsert4b)
2179BU_P9V_VSX_3 (VINSERT4B_DI, "vinsert4b_di", CONST, vinsert4b_di)
2180
f9debd38 2181/* 3 argument vector functions returning void, treated as SPECIAL,
2182 added in ISA 3.0 (power9). */
2183BU_P9V_64BIT_AV_X (STXVL, "stxvl", MISC)
5433fcc8 2184BU_P9V_64BIT_AV_X (XST_LEN_R, "xst_len_r", MISC)
f9debd38 2185
2186/* 1 argument vector functions added in ISA 3.0 (power9). */
2187BU_P9V_AV_1 (VCLZLSBB, "vclzlsbb", CONST, vclzlsbb)
2188BU_P9V_AV_1 (VCTZLSBB, "vctzlsbb", CONST, vctzlsbb)
2189
2190/* Built-in support for Power9 "VSU option" string operations includes
2191 new awareness of the "vector compare not equal" (vcmpneb, vcmpneb.,
2192 vcmpneh, vcmpneh., vcmpnew, vcmpnew.) and "vector compare
2193 not equal or zero" (vcmpnezb, vcmpnezb., vcmpnezh, vcmpnezh.,
7f6b8cff 2194 vcmpnezw, vcmpnezw.) instructions. */
f9debd38 2195
2196BU_P9V_AV_2 (CMPNEB, "vcmpneb", CONST, vcmpneb)
2197BU_P9V_AV_2 (CMPNEH, "vcmpneh", CONST, vcmpneh)
2198BU_P9V_AV_2 (CMPNEW, "vcmpnew", CONST, vcmpnew)
f9debd38 2199
7f6b8cff 2200BU_P9V_AV_2 (VCMPNEB_P, "vcmpneb_p", CONST, vector_ne_v16qi_p)
2201BU_P9V_AV_2 (VCMPNEH_P, "vcmpneh_p", CONST, vector_ne_v8hi_p)
2202BU_P9V_AV_2 (VCMPNEW_P, "vcmpnew_p", CONST, vector_ne_v4si_p)
2203BU_P9V_AV_2 (VCMPNED_P, "vcmpned_p", CONST, vector_ne_v2di_p)
f9debd38 2204
7f6b8cff 2205BU_P9V_AV_2 (VCMPNEFP_P, "vcmpnefp_p", CONST, vector_ne_v4sf_p)
2206BU_P9V_AV_2 (VCMPNEDP_P, "vcmpnedp_p", CONST, vector_ne_v2df_p)
2207
2208BU_P9V_AV_2 (VCMPAEB_P, "vcmpaeb_p", CONST, vector_ae_v16qi_p)
2209BU_P9V_AV_2 (VCMPAEH_P, "vcmpaeh_p", CONST, vector_ae_v8hi_p)
2210BU_P9V_AV_2 (VCMPAEW_P, "vcmpaew_p", CONST, vector_ae_v4si_p)
2211BU_P9V_AV_2 (VCMPAED_P, "vcmpaed_p", CONST, vector_ae_v2di_p)
2212
2213BU_P9V_AV_2 (VCMPAEFP_P, "vcmpaefp_p", CONST, vector_ae_v4sf_p)
2214BU_P9V_AV_2 (VCMPAEDP_P, "vcmpaedp_p", CONST, vector_ae_v2df_p)
f9debd38 2215
2216BU_P9V_AV_2 (CMPNEZB, "vcmpnezb", CONST, vcmpnezb)
2217BU_P9V_AV_2 (CMPNEZH, "vcmpnezh", CONST, vcmpnezh)
2218BU_P9V_AV_2 (CMPNEZW, "vcmpnezw", CONST, vcmpnezw)
2219
2220BU_P9V_AV_P (VCMPNEZB_P, "vcmpnezb_p", CONST, vector_nez_v16qi_p)
2221BU_P9V_AV_P (VCMPNEZH_P, "vcmpnezh_p", CONST, vector_nez_v8hi_p)
2222BU_P9V_AV_P (VCMPNEZW_P, "vcmpnezw_p", CONST, vector_nez_v4si_p)
2223
2224/* ISA 3.0 Vector scalar overloaded 2 argument functions */
2225BU_P9V_OVERLOAD_2 (LXVL, "lxvl")
5433fcc8 2226BU_P9V_OVERLOAD_2 (XL_LEN_R, "xl_len_r")
ee33c236 2227BU_P9V_OVERLOAD_2 (VEXTULX, "vextulx")
2228BU_P9V_OVERLOAD_2 (VEXTURX, "vexturx")
2229BU_P9V_OVERLOAD_2 (VEXTRACT4B, "vextract4b")
f9debd38 2230
2231/* ISA 3.0 Vector scalar overloaded 3 argument functions */
2232BU_P9V_OVERLOAD_3 (STXVL, "stxvl")
5433fcc8 2233BU_P9V_OVERLOAD_3 (XST_LEN_R, "xst_len_r")
ee33c236 2234BU_P9V_OVERLOAD_3 (VINSERT4B, "vinsert4b")
f9debd38 2235
2236/* Overloaded CMPNE support was implemented prior to Power 9,
2237 so is not mentioned here. */
2238BU_P9V_OVERLOAD_2 (CMPNEZ, "vcmpnez")
2239
2240BU_P9V_OVERLOAD_P (VCMPNEZ_P, "vcmpnez_p")
7f6b8cff 2241BU_P9V_OVERLOAD_2 (VCMPNE_P, "vcmpne_p")
2242BU_P9V_OVERLOAD_2 (VCMPAE_P, "vcmpae_p")
f9debd38 2243
2244/* ISA 3.0 Vector scalar overloaded 1 argument functions */
2245BU_P9V_OVERLOAD_1 (VCLZLSBB, "vclzlsbb")
2246BU_P9V_OVERLOAD_1 (VCTZLSBB, "vctzlsbb")
ac0adecc 2247\f
2248/* 2 argument extended divide functions added in ISA 2.06. */
2249BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si)
2250BU_P7_MISC_2 (DIVWEO, "divweo", CONST, diveo_si)
2251BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si)
2252BU_P7_MISC_2 (DIVWEUO, "divweuo", CONST, diveuo_si)
2253BU_P7_MISC_2 (DIVDE, "divde", CONST, dive_di)
2254BU_P7_MISC_2 (DIVDEO, "divdeo", CONST, diveo_di)
2255BU_P7_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di)
2256BU_P7_MISC_2 (DIVDEUO, "divdeuo", CONST, diveuo_di)
2257
2258/* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */
2259BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd)
2260BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td)
2261
2262/* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */
2263BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd)
2264BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td)
2265BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd)
2266BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td)
2267BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd)
2268BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td)
2269BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd)
2270BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td)
2271BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd)
2272BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td)
2273
2274/* 1 argument BCD functions added in ISA 2.06. */
2275BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd)
2276BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd)
2277
2278/* 2 argument BCD functions added in ISA 2.06. */
2279BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s)
2280
2281/* 3 argument BCD functions added in ISA 2.07. */
2282BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd)
2283BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt)
2284BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq)
2285BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt)
2286BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered)
2287BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub)
2288BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt)
2289BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq)
2290BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt)
2291BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered)
2292
2293/* 2 argument pack/unpack 128-bit floating point types. */
2294BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
2295BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
2296
26a51591 2297/* 0 argument general-purpose register functions added in ISA 3.0 (power9). */
2298BU_P9_MISC_0 (DARN_32, "darn_32", MISC, darn_32)
2299BU_P9_64BIT_MISC_0 (DARN_RAW, "darn_raw", MISC, darn_raw)
2300BU_P9_64BIT_MISC_0 (DARN, "darn", MISC, darn)
2301
1d2fa40a 2302BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf)
2303BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
ac0adecc 2304
2305BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
2306BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
2307
17c32c4a 2308/* 2 argument DFP (Decimal Floating Point) functions added in ISA 3.0. */
2309BU_P9_DFP_MISC_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd", CONST, dfptstsfi_lt_dd)
2310BU_P9_DFP_MISC_2 (TSTSFI_LT_TD, "dtstsfi_lt_td", CONST, dfptstsfi_lt_td)
2311
2312BU_P9_DFP_MISC_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd", CONST, dfptstsfi_eq_dd)
2313BU_P9_DFP_MISC_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td", CONST, dfptstsfi_eq_td)
2314
2315BU_P9_DFP_MISC_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd", CONST, dfptstsfi_gt_dd)
2316BU_P9_DFP_MISC_2 (TSTSFI_GT_TD, "dtstsfi_gt_td", CONST, dfptstsfi_gt_td)
2317
2318BU_P9_DFP_MISC_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd", CONST, dfptstsfi_unordered_dd)
2319BU_P9_DFP_MISC_2 (TSTSFI_OV_TD, "dtstsfi_ov_td", CONST, dfptstsfi_unordered_td)
2320
2321/* 2 argument overloaded DFP functions added in ISA 3.0. */
2322BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT, "dtstsfi_lt")
2323BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd")
2324BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_TD, "dtstsfi_lt_td")
2325
2326BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ, "dtstsfi_eq")
2327BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd")
2328BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td")
2329
2330BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT, "dtstsfi_gt")
2331BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd")
2332BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_TD, "dtstsfi_gt_td")
2333
2334BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV, "dtstsfi_ov")
2335BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd")
2336BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_TD, "dtstsfi_ov_td")
2337
af648be2 2338/* 1 argument vector functions added in ISA 3.0 (power9). */
2339BU_P9V_AV_1 (VCTZB, "vctzb", CONST, ctzv16qi2)
2340BU_P9V_AV_1 (VCTZH, "vctzh", CONST, ctzv8hi2)
2341BU_P9V_AV_1 (VCTZW, "vctzw", CONST, ctzv4si2)
2342BU_P9V_AV_1 (VCTZD, "vctzd", CONST, ctzv2di2)
2343BU_P9V_AV_1 (VPRTYBD, "vprtybd", CONST, parityv2di2)
2344BU_P9V_AV_1 (VPRTYBQ, "vprtybq", CONST, parityv1ti2)
2345BU_P9V_AV_1 (VPRTYBW, "vprtybw", CONST, parityv4si2)
2346
2347/* ISA 3.0 vector overloaded 1 argument functions. */
2348BU_P9V_OVERLOAD_1 (VCTZ, "vctz")
2349BU_P9V_OVERLOAD_1 (VCTZB, "vctzb")
2350BU_P9V_OVERLOAD_1 (VCTZH, "vctzh")
2351BU_P9V_OVERLOAD_1 (VCTZW, "vctzw")
2352BU_P9V_OVERLOAD_1 (VCTZD, "vctzd")
2353BU_P9V_OVERLOAD_1 (VPRTYB, "vprtyb")
2354BU_P9V_OVERLOAD_1 (VPRTYBD, "vprtybd")
2355BU_P9V_OVERLOAD_1 (VPRTYBQ, "vprtybq")
2356BU_P9V_OVERLOAD_1 (VPRTYBW, "vprtybw")
05a7d070 2357BU_P9V_OVERLOAD_1 (VPARITY_LSBB, "vparity_lsbb")
af648be2 2358
9cd62877 2359/* 2 argument functions added in ISA 3.0 (power9). */
2360BU_P9_2 (CMPRB, "byte_in_range", CONST, cmprb)
2361BU_P9_2 (CMPRB2, "byte_in_either_range", CONST, cmprb2)
2362BU_P9_64BIT_2 (CMPEQB, "byte_in_set", CONST, cmpeqb)
2363
2364/* 2 argument overloaded functions added in ISA 3.0 (power9). */
2365BU_P9_OVERLOAD_2 (CMPRB, "byte_in_range")
2366BU_P9_OVERLOAD_2 (CMPRB2, "byte_in_either_range")
2367BU_P9_OVERLOAD_2 (CMPEQB, "byte_in_set")
2368
79fbd64a 2369/* 1 and 2 argument IEEE 128-bit floating-point functions. These functions use
2370 the older 'q' suffix from libquadmath. The standard built-in functions
2371 support fabsf128 and copysignf128, but older code used these 'q' versions,
2372 so keep them around. */
2275a11d 2373BU_FLOAT128_1 (FABSQ, "fabsq", CONST, abskf2)
2275a11d 2374BU_FLOAT128_2 (COPYSIGNQ, "copysignq", CONST, copysignkf3)
79fbd64a 2375
c217f44e 2376/* 1, 2, and 3 argument IEEE 128-bit floating point functions that require ISA
8c32188e 2377 3.0 hardware. These functions use the new 'f128' suffix. */
c217f44e 2378BU_FLOAT128_1_HW (SQRTF128_ODD, "sqrtf128_round_to_odd", CONST, sqrtkf2_odd)
2379BU_FLOAT128_1_HW (TRUNCF128_ODD, "truncf128_round_to_odd", CONST, trunckfdf2_odd)
2380BU_FLOAT128_2_HW (ADDF128_ODD, "addf128_round_to_odd", CONST, addkf3_odd)
2381BU_FLOAT128_2_HW (SUBF128_ODD, "subf128_round_to_odd", CONST, subkf3_odd)
2382BU_FLOAT128_2_HW (MULF128_ODD, "mulf128_round_to_odd", CONST, mulkf3_odd)
2383BU_FLOAT128_2_HW (DIVF128_ODD, "divf128_round_to_odd", CONST, divkf3_odd)
c217f44e 2384BU_FLOAT128_3_HW (FMAF128_ODD, "fmaf128_round_to_odd", CONST, fmakf4_odd)
81f0e7d0 2385\f
2386/* 1 argument crypto functions. */
2387BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox)
2388
2389/* 2 argument crypto functions. */
2390BU_CRYPTO_2 (VCIPHER, "vcipher", CONST, crypto_vcipher)
2391BU_CRYPTO_2 (VCIPHERLAST, "vcipherlast", CONST, crypto_vcipherlast)
2392BU_CRYPTO_2 (VNCIPHER, "vncipher", CONST, crypto_vncipher)
2393BU_CRYPTO_2 (VNCIPHERLAST, "vncipherlast", CONST, crypto_vncipherlast)
eb3421e6 2394BU_CRYPTO_2A (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb)
2395BU_CRYPTO_2A (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh)
2396BU_CRYPTO_2A (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw)
2397BU_CRYPTO_2A (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd)
81f0e7d0 2398
2399/* 3 argument crypto functions. */
eb3421e6 2400BU_CRYPTO_3A (VPERMXOR_V2DI, "vpermxor_v2di", CONST, crypto_vpermxor_v2di)
2401BU_CRYPTO_3A (VPERMXOR_V4SI, "vpermxor_v4si", CONST, crypto_vpermxor_v4si)
2402BU_CRYPTO_3A (VPERMXOR_V8HI, "vpermxor_v8hi", CONST, crypto_vpermxor_v8hi)
2403BU_CRYPTO_3A (VPERMXOR_V16QI, "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
81f0e7d0 2404BU_CRYPTO_3 (VSHASIGMAW, "vshasigmaw", CONST, crypto_vshasigmaw)
2405BU_CRYPTO_3 (VSHASIGMAD, "vshasigmad", CONST, crypto_vshasigmad)
2406
2407/* 2 argument crypto overloaded functions. */
eb3421e6 2408BU_CRYPTO_OVERLOAD_2A (VPMSUM, "vpmsum")
81f0e7d0 2409
2410/* 3 argument crypto overloaded functions. */
eb3421e6 2411BU_CRYPTO_OVERLOAD_3A (VPERMXOR, "vpermxor")
81f0e7d0 2412BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
2413
5088e479 2414\f
2415/* HTM functions. */
cb2c281a 2416BU_HTM_1 (TABORT, "tabort", CR, tabort)
2417BU_HTM_3 (TABORTDC, "tabortdc", CR, tabortdc)
2418BU_HTM_3 (TABORTDCI, "tabortdci", CR, tabortdci)
2419BU_HTM_3 (TABORTWC, "tabortwc", CR, tabortwc)
2420BU_HTM_3 (TABORTWCI, "tabortwci", CR, tabortwci)
2421BU_HTM_1 (TBEGIN, "tbegin", CR, tbegin)
2422BU_HTM_0 (TCHECK, "tcheck", CR, tcheck)
2423BU_HTM_1 (TEND, "tend", CR, tend)
2424BU_HTM_0 (TENDALL, "tendall", CR, tend)
2425BU_HTM_0 (TRECHKPT, "trechkpt", CR, trechkpt)
2426BU_HTM_1 (TRECLAIM, "treclaim", CR, treclaim)
2427BU_HTM_0 (TRESUME, "tresume", CR, tsr)
2428BU_HTM_0 (TSUSPEND, "tsuspend", CR, tsr)
2429BU_HTM_1 (TSR, "tsr", CR, tsr)
2430BU_HTM_0 (TTEST, "ttest", CR, ttest)
2431
2432BU_HTM_0 (GET_TFHAR, "get_tfhar", SPR, nothing)
2433BU_HTM_V1 (SET_TFHAR, "set_tfhar", SPR, nothing)
2434BU_HTM_0 (GET_TFIAR, "get_tfiar", SPR, nothing)
2435BU_HTM_V1 (SET_TFIAR, "set_tfiar", SPR, nothing)
2436BU_HTM_0 (GET_TEXASR, "get_texasr", SPR, nothing)
2437BU_HTM_V1 (SET_TEXASR, "set_texasr", SPR, nothing)
2438BU_HTM_0 (GET_TEXASRU, "get_texasru", SPR, nothing)
2439BU_HTM_V1 (SET_TEXASRU, "set_texasru", SPR, nothing)
5088e479 2440
0375b229 2441\f
2442/* 3 argument paired floating point builtins. */
2443BU_PAIRED_3 (MSUB, "msub", FP, fmsv2sf4)
2444BU_PAIRED_3 (MADD, "madd", FP, fmav2sf4)
2445BU_PAIRED_3 (MADDS0, "madds0", FP, paired_madds0)
2446BU_PAIRED_3 (MADDS1, "madds1", FP, paired_madds1)
2447BU_PAIRED_3 (NMSUB, "nmsub", FP, nfmsv2sf4)
2448BU_PAIRED_3 (NMADD, "nmadd", FP, nfmav2sf4)
2449BU_PAIRED_3 (SUM0, "sum0", FP, paired_sum0)
2450BU_PAIRED_3 (SUM1, "sum1", FP, paired_sum1)
2451BU_PAIRED_3 (SELV2SF4, "selv2sf4", CONST, selv2sf4)
2452
2453/* 2 argument paired floating point builtins. */
9d20c62c 2454BU_PAIRED_2 (DIVV2SF3, "divv2sf3", FP, divv2sf3)
2455BU_PAIRED_2 (ADDV2SF3, "addv2sf3", FP, addv2sf3)
2456BU_PAIRED_2 (SUBV2SF3, "subv2sf3", FP, subv2sf3)
2457BU_PAIRED_2 (MULV2SF3, "mulv2sf3", FP, mulv2sf3)
0375b229 2458BU_PAIRED_2 (MULS0, "muls0", FP, paired_muls0)
2459BU_PAIRED_2 (MULS1, "muls1", FP, paired_muls1)
2460BU_PAIRED_2 (MERGE00, "merge00", CONST, paired_merge00)
2461BU_PAIRED_2 (MERGE01, "merge01", CONST, paired_merge01)
2462BU_PAIRED_2 (MERGE10, "merge10", CONST, paired_merge10)
2463BU_PAIRED_2 (MERGE11, "merge11", CONST, paired_merge11)
2464
2465/* 1 argument paired floating point builtin functions. */
9d20c62c 2466BU_PAIRED_1 (ABSV2SF2, "absv2sf2", CONST, absv2sf2)
0375b229 2467BU_PAIRED_1 (NABSV2SF2, "nabsv2sf2", CONST, nabsv2sf2)
9d20c62c 2468BU_PAIRED_1 (NEGV2SF2, "negv2sf2", CONST, negv2sf2)
0375b229 2469BU_PAIRED_1 (SQRTV2SF2, "sqrtv2sf2", FP, sqrtv2sf2)
2470BU_PAIRED_1 (RESV2SF, "resv2sf2", FP, resv2sf2)
2471
2472/* PAIRED builtins that are handled as special cases. */
2473BU_PAIRED_X (STX, "stx", MISC)
2474BU_PAIRED_X (LX, "lx", MISC)
2475
2476/* Paired predicates. */
2477BU_PAIRED_P (CMPU0, "cmpu0", CONST, paired_cmpu0)
2478BU_PAIRED_P (CMPU1, "cmpu1", CONST, paired_cmpu1)
0375b229 2479\f
605afdd6 2480/* Power7 builtins, that aren't VSX instructions. */
0375b229 2481BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
2482 RS6000_BTC_CONST)
605afdd6 2483
2484/* Miscellaneous builtins. */
0375b229 2485BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE,
2486 RS6000_BTC_FP)
2487
2488BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES,
2489 RS6000_BTC_FP)
2490
2491BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE,
2492 RS6000_BTC_FP)
2493
2494BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES,
2495 RS6000_BTC_FP)
2496
6154c460 2497BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase",
5088e479 2498 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
6154c460 2499
2500BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb",
5088e479 2501 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
6154c460 2502
3257ccd1 2503BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs",
2504 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2505
2506RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf",
2507 RS6000_BTM_ALWAYS,
2508 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID,
2509 CODE_FOR_rs6000_mtfsf)
2510
62752e71 2511BU_SPECIAL_X (RS6000_BUILTIN_CPU_INIT, "__builtin_cpu_init",
2512 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2513
2514BU_SPECIAL_X (RS6000_BUILTIN_CPU_IS, "__builtin_cpu_is",
2515 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2516
2517BU_SPECIAL_X (RS6000_BUILTIN_CPU_SUPPORTS, "__builtin_cpu_supports",
2518 RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
2519
2275a11d 2520BU_SPECIAL_X (RS6000_BUILTIN_NANQ, "__builtin_nanq",
2521 RS6000_BTM_FLOAT128, RS6000_BTC_CONST)
2522
2523BU_SPECIAL_X (RS6000_BUILTIN_NANSQ, "__builtin_nansq",
2524 RS6000_BTM_FLOAT128, RS6000_BTC_CONST)
2525
2526BU_SPECIAL_X (RS6000_BUILTIN_INFQ, "__builtin_infq",
2527 RS6000_BTM_FLOAT128, RS6000_BTC_CONST)
2528
2529BU_SPECIAL_X (RS6000_BUILTIN_HUGE_VALQ, "__builtin_huge_valq",
2530 RS6000_BTM_FLOAT128, RS6000_BTC_CONST)
2531
820c090b 2532/* Darwin CfString builtin. */
34c34d94 2533BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS,
0375b229 2534 RS6000_BTC_MISC)