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