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