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