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