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