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