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