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