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