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