xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/rs6000/rs6000-builtin.def (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1/* Builtin functions for rs6000/powerpc.
2   Copyright (C) 2009-2015 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_1 -- 1 arg builtins
28   RS6000_BUILTIN_2 -- 2 arg builtins
29   RS6000_BUILTIN_3 -- 3 arg builtins
30   RS6000_BUILTIN_A -- ABS builtins
31   RS6000_BUILTIN_D -- DST builtins
32   RS6000_BUILTIN_E -- SPE EVSEL builtins.
33   RS6000_BUILTIN_H -- HTM builtins
34   RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins
35   RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
36   RS6000_BUILTIN_S -- SPE predicate builtins
37   RS6000_BUILTIN_X -- special builtins
38
39   Each of the above macros takes 4 arguments:
40	ENUM	Enumeration name
41	NAME	String literal for the name
42	MASK	Mask of bits that indicate which options enables the builtin
43	ATTR	builtin attribute information.
44	ICODE	Insn code of the function that implents the builtin.  */
45
46#ifndef RS6000_BUILTIN_1
47  #error "RS6000_BUILTIN_1 is not defined."
48#endif
49
50#ifndef RS6000_BUILTIN_2
51  #error "RS6000_BUILTIN_2 is not defined."
52#endif
53
54#ifndef RS6000_BUILTIN_3
55  #error "RS6000_BUILTIN_3 is not defined."
56#endif
57
58#ifndef RS6000_BUILTIN_A
59  #error "RS6000_BUILTIN_A is not defined."
60#endif
61
62#ifndef RS6000_BUILTIN_D
63  #error "RS6000_BUILTIN_D is not defined."
64#endif
65
66#ifndef RS6000_BUILTIN_E
67  #error "RS6000_BUILTIN_E is not defined."
68#endif
69
70#ifndef RS6000_BUILTIN_H
71  #error "RS6000_BUILTIN_H is not defined."
72#endif
73
74#ifndef RS6000_BUILTIN_P
75  #error "RS6000_BUILTIN_P is not defined."
76#endif
77
78#ifndef RS6000_BUILTIN_Q
79  #error "RS6000_BUILTIN_Q is not defined."
80#endif
81
82#ifndef RS6000_BUILTIN_S
83  #error "RS6000_BUILTIN_S is not defined."
84#endif
85
86#ifndef RS6000_BUILTIN_X
87  #error "RS6000_BUILTIN_X is not defined."
88#endif
89
90#ifndef BU_AV_1
91/* Define convenience macros using token pasting to allow fitting everything in
92   one line.  */
93
94/* Altivec convenience macros.  */
95#define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE)				\
96  RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
97		    "__builtin_altivec_" NAME,		/* NAME */	\
98		    RS6000_BTM_ALTIVEC,			/* MASK */	\
99		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
100		     | RS6000_BTC_UNARY),				\
101		    CODE_FOR_ ## ICODE)			/* ICODE */
102
103#define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE)				\
104  RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
105		    "__builtin_altivec_" NAME,		/* NAME */	\
106		    RS6000_BTM_ALTIVEC,			/* MASK */	\
107		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
108		     | RS6000_BTC_BINARY),				\
109		    CODE_FOR_ ## ICODE)			/* ICODE */
110
111#define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE)				\
112  RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
113		    "__builtin_altivec_" NAME,		/* NAME */	\
114		    RS6000_BTM_ALTIVEC,			/* MASK */	\
115		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
116		     | RS6000_BTC_TERNARY),				\
117		    CODE_FOR_ ## ICODE)			/* ICODE */
118
119#define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE)				\
120  RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
121		    "__builtin_altivec_" NAME,		/* NAME */	\
122		    RS6000_BTM_ALTIVEC,			/* MASK */	\
123		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
124		     | RS6000_BTC_ABS),					\
125		    CODE_FOR_ ## ICODE)			/* ICODE */
126
127#define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE)				\
128  RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
129		    "__builtin_altivec_" NAME,		/* NAME */	\
130		    RS6000_BTM_ALTIVEC,			/* MASK */	\
131		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
132		     | RS6000_BTC_DST),					\
133		    CODE_FOR_ ## ICODE)			/* ICODE */
134
135#define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE)				\
136  RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
137		    "__builtin_altivec_" NAME,		/* NAME */	\
138		    RS6000_BTM_ALTIVEC,			/* MASK */	\
139		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
140		     | RS6000_BTC_PREDICATE),				\
141		    CODE_FOR_ ## ICODE)			/* ICODE */
142
143#define BU_ALTIVEC_X(ENUM, NAME, ATTR)					\
144  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
145		    "__builtin_altivec_" NAME,		/* NAME */	\
146		    RS6000_BTM_ALTIVEC,			/* MASK */	\
147		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
148		     | RS6000_BTC_SPECIAL),				\
149		    CODE_FOR_nothing)			/* ICODE */
150
151#define BU_ALTIVEC_C(ENUM, NAME, ATTR)					\
152  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM,		/* ENUM */	\
153		    "__builtin_altivec_" NAME,		/* NAME */	\
154		    (RS6000_BTM_ALTIVEC			/* MASK */	\
155		     | RS6000_BTM_CELL),				\
156		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
157		     | RS6000_BTC_SPECIAL),				\
158		    CODE_FOR_nothing)			/* ICODE */
159
160/* Altivec overloaded builtin function macros.  */
161#define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME)				\
162  RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
163		    "__builtin_vec_" NAME,		/* NAME */	\
164		    RS6000_BTM_ALTIVEC,			/* MASK */	\
165		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
166		     | RS6000_BTC_UNARY),				\
167		    CODE_FOR_nothing)			/* ICODE */
168
169#define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME)				\
170  RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
171		    "__builtin_vec_" NAME,		/* NAME */	\
172		    RS6000_BTM_ALTIVEC,			/* MASK */	\
173		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
174		     | RS6000_BTC_BINARY),				\
175		    CODE_FOR_nothing)			/* ICODE */
176
177#define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME)				\
178  RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
179		    "__builtin_vec_" NAME,		/* NAME */	\
180		    RS6000_BTM_ALTIVEC,			/* MASK */	\
181		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
182		     | RS6000_BTC_TERNARY),				\
183		    CODE_FOR_nothing)			/* ICODE */
184
185#define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME)				\
186  RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
187		    "__builtin_vec_" NAME,		/* NAME */	\
188		    RS6000_BTM_ALTIVEC,			/* MASK */	\
189		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
190		     | RS6000_BTC_ABS),					\
191		    CODE_FOR_nothing)			/* ICODE */
192
193#define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME)				\
194  RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
195		    "__builtin_vec_" NAME,		/* NAME */	\
196		    RS6000_BTM_ALTIVEC,			/* MASK */	\
197		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
198		     | RS6000_BTC_DST),					\
199		    CODE_FOR_nothing)			/* ICODE */
200
201#define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME)				\
202  RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
203		    "__builtin_vec_" NAME,		/* NAME */	\
204		    RS6000_BTM_ALTIVEC,			/* MASK */	\
205		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
206		     | RS6000_BTC_PREDICATE),				\
207		    CODE_FOR_nothing)			/* ICODE */
208
209#define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME)				\
210  RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM,	/* ENUM */	\
211		    "__builtin_vec_" NAME,		/* NAME */	\
212		    RS6000_BTM_ALTIVEC,			/* MASK */	\
213		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
214		     | RS6000_BTC_SPECIAL),				\
215		    CODE_FOR_nothing)			/* ICODE */
216
217/* VSX convenience macros.  */
218#define BU_VSX_1(ENUM, NAME, ATTR, ICODE)				\
219  RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
220		    "__builtin_vsx_" NAME,		/* NAME */	\
221		    RS6000_BTM_VSX,			/* MASK */	\
222		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
223		     | RS6000_BTC_UNARY),				\
224		    CODE_FOR_ ## ICODE)			/* ICODE */
225
226#define BU_VSX_2(ENUM, NAME, ATTR, ICODE)				\
227  RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
228		    "__builtin_vsx_" NAME,		/* NAME */	\
229		    RS6000_BTM_VSX,			/* MASK */	\
230		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
231		     | RS6000_BTC_BINARY),				\
232		    CODE_FOR_ ## ICODE)			/* ICODE */
233
234#define BU_VSX_3(ENUM, NAME, ATTR, ICODE)				\
235  RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
236		    "__builtin_vsx_" NAME,		/* NAME */	\
237		    RS6000_BTM_VSX,			/* MASK */	\
238		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
239		     | RS6000_BTC_TERNARY),				\
240		    CODE_FOR_ ## ICODE)			/* ICODE */
241
242#define BU_VSX_A(ENUM, NAME, ATTR, ICODE)				\
243  RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
244		    "__builtin_vsx_" NAME,		/* NAME */	\
245		    RS6000_BTM_VSX,			/* MASK */	\
246		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
247		     | RS6000_BTC_ABS),					\
248		    CODE_FOR_ ## ICODE)			/* ICODE */
249
250#define BU_VSX_P(ENUM, NAME, ATTR, ICODE)				\
251  RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
252		    "__builtin_vsx_" NAME,		/* NAME */	\
253		    RS6000_BTM_VSX,			/* MASK */	\
254		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
255		     | RS6000_BTC_PREDICATE),				\
256		    CODE_FOR_ ## ICODE)			/* ICODE */
257
258#define BU_VSX_X(ENUM, NAME, ATTR)					\
259  RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM,		/* ENUM */	\
260		    "__builtin_vsx_" NAME,		/* NAME */	\
261		    RS6000_BTM_VSX,			/* MASK */	\
262		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
263		     | RS6000_BTC_SPECIAL),				\
264		    CODE_FOR_nothing)			/* ICODE */
265
266/* VSX overloaded builtin function macros.  */
267#define BU_VSX_OVERLOAD_1(ENUM, NAME)					\
268  RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
269		    "__builtin_vec_" NAME,		/* NAME */	\
270		    RS6000_BTM_VSX,			/* MASK */	\
271		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
272		     | RS6000_BTC_UNARY),				\
273		    CODE_FOR_nothing)			/* ICODE */
274
275#define BU_VSX_OVERLOAD_2(ENUM, NAME)					\
276  RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
277		    "__builtin_vec_" NAME,		/* NAME */	\
278		    RS6000_BTM_VSX,			/* MASK */	\
279		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
280		     | RS6000_BTC_BINARY),				\
281		    CODE_FOR_nothing)			/* ICODE */
282
283#define BU_VSX_OVERLOAD_3(ENUM, NAME)					\
284  RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
285		    "__builtin_vec_" NAME,		/* NAME */	\
286		    RS6000_BTM_VSX,			/* MASK */	\
287		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
288		     | RS6000_BTC_TERNARY),				\
289		    CODE_FOR_nothing)			/* ICODE */
290
291/* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names
292   instead of __builtin_vec.  */
293#define BU_VSX_OVERLOAD_3V(ENUM, NAME)					\
294  RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
295		    "__builtin_vsx_" NAME,		/* NAME */	\
296		    RS6000_BTM_VSX,			/* MASK */	\
297		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
298		     | RS6000_BTC_TERNARY),				\
299		    CODE_FOR_nothing)			/* ICODE */
300
301#define BU_VSX_OVERLOAD_X(ENUM, NAME)					\
302  RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
303		    "__builtin_vec_" NAME,		/* NAME */	\
304		    RS6000_BTM_VSX,			/* MASK */	\
305		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
306		     | RS6000_BTC_SPECIAL),				\
307		    CODE_FOR_nothing)			/* ICODE */
308
309/* ISA 2.07 (power8) vector convenience macros.  */
310/* For the instructions that are encoded as altivec instructions use
311   __builtin_altivec_ as the builtin name.  */
312#define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE)				\
313  RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM,		/* ENUM */	\
314		    "__builtin_altivec_" NAME,		/* NAME */	\
315		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
316		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
317		     | RS6000_BTC_UNARY),				\
318		    CODE_FOR_ ## ICODE)			/* ICODE */
319
320#define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE)				\
321  RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM,		/* ENUM */	\
322		    "__builtin_altivec_" NAME,		/* NAME */	\
323		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
324		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
325		     | RS6000_BTC_BINARY),				\
326		    CODE_FOR_ ## ICODE)			/* ICODE */
327
328#define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE)				\
329  RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM,		/* ENUM */	\
330		    "__builtin_altivec_" NAME,		/* NAME */	\
331		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
332		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
333		     | RS6000_BTC_TERNARY),				\
334		    CODE_FOR_ ## ICODE)			/* ICODE */
335
336#define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE)				\
337  RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM,		/* ENUM */	\
338		    "__builtin_altivec_" NAME,		/* NAME */	\
339		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
340		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
341		     | RS6000_BTC_PREDICATE),				\
342		    CODE_FOR_ ## ICODE)			/* ICODE */
343
344/* For the instructions encoded as VSX instructions use __builtin_vsx as the
345   builtin name.  */
346#define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE)				\
347  RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM,		/* ENUM */	\
348		    "__builtin_vsx_" NAME,		/* NAME */	\
349		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
350		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
351		     | RS6000_BTC_UNARY),				\
352		    CODE_FOR_ ## ICODE)			/* ICODE */
353
354#define BU_P8V_OVERLOAD_1(ENUM, NAME)					\
355  RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
356		    "__builtin_vec_" NAME,		/* NAME */	\
357		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
358		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
359		     | RS6000_BTC_UNARY),				\
360		    CODE_FOR_nothing)			/* ICODE */
361
362#define BU_P8V_OVERLOAD_2(ENUM, NAME)					\
363  RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
364		    "__builtin_vec_" NAME,		/* NAME */	\
365		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
366		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
367		     | RS6000_BTC_BINARY),				\
368		    CODE_FOR_nothing)			/* ICODE */
369
370#define BU_P8V_OVERLOAD_3(ENUM, NAME)					\
371  RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM,		/* ENUM */	\
372		    "__builtin_vec_" NAME,		/* NAME */	\
373		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
374		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
375		     | RS6000_BTC_TERNARY),				\
376		    CODE_FOR_nothing)			/* ICODE */
377
378/* Crypto convenience macros.  */
379#define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE)				\
380  RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
381		    "__builtin_crypto_" NAME,		/* NAME */	\
382		    RS6000_BTM_CRYPTO,			/* MASK */	\
383		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
384		     | RS6000_BTC_UNARY),				\
385		    CODE_FOR_ ## ICODE)			/* ICODE */
386
387#define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE)				\
388  RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
389		    "__builtin_crypto_" NAME,		/* NAME */	\
390		    RS6000_BTM_CRYPTO,			/* MASK */	\
391		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
392		     | RS6000_BTC_BINARY),				\
393		    CODE_FOR_ ## ICODE)			/* ICODE */
394
395#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE)				\
396  RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
397		    "__builtin_crypto_" NAME,		/* NAME */	\
398		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
399		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
400		     | RS6000_BTC_BINARY),				\
401		    CODE_FOR_ ## ICODE)			/* ICODE */
402
403#define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE)				\
404  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
405		    "__builtin_crypto_" NAME,		/* NAME */	\
406		    RS6000_BTM_CRYPTO,			/* MASK */	\
407		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
408		     | RS6000_BTC_TERNARY),				\
409		    CODE_FOR_ ## ICODE)			/* ICODE */
410
411#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE)				\
412  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
413		    "__builtin_crypto_" NAME,		/* NAME */	\
414		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
415		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
416		     | RS6000_BTC_TERNARY),				\
417		    CODE_FOR_ ## ICODE)			/* ICODE */
418
419#define BU_CRYPTO_OVERLOAD_1(ENUM, NAME)				\
420  RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
421		    "__builtin_crypto_" NAME,		/* NAME */	\
422		    RS6000_BTM_CRYPTO,			/* MASK */	\
423		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
424		     | RS6000_BTC_UNARY),				\
425		    CODE_FOR_nothing)			/* ICODE */
426
427#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME)				\
428  RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
429		    "__builtin_crypto_" NAME,		/* NAME */	\
430		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
431		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
432		     | RS6000_BTC_BINARY),				\
433		    CODE_FOR_nothing)			/* ICODE */
434
435#define BU_CRYPTO_OVERLOAD_3(ENUM, NAME)				\
436  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
437		    "__builtin_crypto_" NAME,		/* NAME */	\
438		    RS6000_BTM_CRYPTO,			/* MASK */	\
439		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
440		     | RS6000_BTC_TERNARY),				\
441		    CODE_FOR_nothing)			/* ICODE */
442
443#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME)				\
444  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,		/* ENUM */	\
445		    "__builtin_crypto_" NAME,		/* NAME */	\
446		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
447		    (RS6000_BTC_OVERLOADED		/* ATTR */	\
448		     | RS6000_BTC_TERNARY),				\
449		    CODE_FOR_nothing)			/* ICODE */
450
451/* HTM convenience macros.  */
452#define BU_HTM_0(ENUM, NAME, ATTR, ICODE)				\
453  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,		/* ENUM */	\
454		    "__builtin_" NAME,			/* NAME */	\
455		    RS6000_BTM_HTM,			/* MASK */	\
456		    RS6000_BTC_ ## ATTR,		/* ATTR */	\
457		    CODE_FOR_ ## ICODE)			/* ICODE */
458
459#define BU_HTM_1(ENUM, NAME, ATTR, ICODE)				\
460  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,		/* ENUM */	\
461		    "__builtin_" NAME,			/* NAME */	\
462		    RS6000_BTM_HTM,			/* MASK */	\
463		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
464		     | RS6000_BTC_UNARY),				\
465		    CODE_FOR_ ## ICODE)			/* ICODE */
466
467#define BU_HTM_2(ENUM, NAME, ATTR, ICODE)				\
468  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,		/* ENUM */	\
469		    "__builtin_" NAME,			/* NAME */	\
470		    RS6000_BTM_HTM,			/* MASK */	\
471		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
472		     | RS6000_BTC_BINARY),				\
473		    CODE_FOR_ ## ICODE)			/* ICODE */
474
475#define BU_HTM_3(ENUM, NAME, ATTR, ICODE)				\
476  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,		/* ENUM */	\
477		    "__builtin_" NAME,			/* NAME */	\
478		    RS6000_BTM_HTM,			/* MASK */	\
479		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
480		     | RS6000_BTC_TERNARY),				\
481		    CODE_FOR_ ## ICODE)			/* ICODE */
482
483#define BU_HTM_V1(ENUM, NAME, ATTR, ICODE)				\
484  RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,		/* ENUM */	\
485		    "__builtin_" NAME,			/* NAME */	\
486		    RS6000_BTM_HTM,			/* MASK */	\
487		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
488		     | RS6000_BTC_UNARY					\
489		     | RS6000_BTC_VOID),				\
490		    CODE_FOR_ ## ICODE)			/* ICODE */
491
492/* SPE convenience macros.  */
493#define BU_SPE_1(ENUM, NAME, ATTR, ICODE)				\
494  RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
495		    "__builtin_spe_" NAME,		/* NAME */	\
496		    RS6000_BTM_SPE,			/* MASK */	\
497		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
498		     | RS6000_BTC_UNARY),				\
499		    CODE_FOR_ ## ICODE)			/* ICODE */
500
501#define BU_SPE_2(ENUM, NAME, ATTR, ICODE)				\
502  RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
503		    "__builtin_spe_" NAME,		/* NAME */	\
504		    RS6000_BTM_SPE,			/* MASK */	\
505		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
506		     | RS6000_BTC_BINARY),				\
507		    CODE_FOR_ ## ICODE)			/* ICODE */
508
509#define BU_SPE_3(ENUM, NAME, ATTR, ICODE)				\
510  RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
511		    "__builtin_spe_" NAME,		/* NAME */	\
512		    RS6000_BTM_SPE,			/* MASK */	\
513		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
514		     | RS6000_BTC_TERNARY),				\
515		    CODE_FOR_ ## ICODE)			/* ICODE */
516
517#define BU_SPE_E(ENUM, NAME, ATTR, ICODE)				\
518  RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
519		    "__builtin_spe_" NAME,		/* NAME */	\
520		    RS6000_BTM_SPE,			/* MASK */	\
521		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
522		     | RS6000_BTC_EVSEL),				\
523		    CODE_FOR_ ## ICODE)			/* ICODE */
524
525#define BU_SPE_P(ENUM, NAME, ATTR, ICODE)				\
526  RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
527		    "__builtin_spe_" NAME,		/* NAME */	\
528		    RS6000_BTM_SPE,			/* MASK */	\
529		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
530		     | RS6000_BTC_PREDICATE),				\
531		    CODE_FOR_ ## ICODE)			/* ICODE */
532
533#define BU_SPE_X(ENUM, NAME, ATTR)					\
534  RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM,		/* ENUM */	\
535		    "__builtin_spe_" NAME,		/* NAME */	\
536		    RS6000_BTM_SPE,			/* MASK */	\
537		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
538		     | RS6000_BTC_SPECIAL),				\
539		    CODE_FOR_nothing)			/* ICODE */
540
541/* Paired floating point convenience macros.  */
542#define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE)				\
543  RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM,		/* ENUM */	\
544		    "__builtin_paired_" NAME,		/* NAME */	\
545		    RS6000_BTM_PAIRED,			/* MASK */	\
546		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
547		     | RS6000_BTC_UNARY),				\
548		    CODE_FOR_ ## ICODE)			/* ICODE */
549
550#define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE)				\
551  RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM,		/* ENUM */	\
552		    "__builtin_paired_" NAME,		/* NAME */	\
553		    RS6000_BTM_PAIRED,			/* MASK */	\
554		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
555		     | RS6000_BTC_BINARY),				\
556		    CODE_FOR_ ## ICODE)			/* ICODE */
557
558#define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE)				\
559  RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM,		/* ENUM */	\
560		    "__builtin_paired_" NAME,		/* NAME */	\
561		    RS6000_BTM_PAIRED,			/* MASK */	\
562		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
563		     | RS6000_BTC_TERNARY),				\
564		    CODE_FOR_ ## ICODE)			/* ICODE */
565
566#define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE)				\
567  RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM,		/* ENUM */	\
568		    "__builtin_paired_" NAME,		/* NAME */	\
569		    RS6000_BTM_PAIRED,			/* MASK */	\
570		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
571		     | RS6000_BTC_PREDICATE),				\
572		    CODE_FOR_ ## ICODE)			/* ICODE */
573
574#define BU_PAIRED_X(ENUM, NAME, ATTR)					\
575  RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM,		/* ENUM */	\
576		    "__builtin_paired_" NAME,		/* NAME */	\
577		    RS6000_BTM_PAIRED,			/* MASK */	\
578		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
579		     | RS6000_BTC_SPECIAL),				\
580		    CODE_FOR_nothing)			/* ICODE */
581
582#define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR)				\
583  RS6000_BUILTIN_X (ENUM,				/* ENUM */	\
584		    NAME,				/* NAME */	\
585		    MASK,				/* MASK */	\
586		    (ATTR | RS6000_BTC_SPECIAL),	/* ATTR */	\
587		    CODE_FOR_nothing)			/* ICODE */
588
589
590/* Decimal floating point builtins for instructions.  */
591#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE)				\
592  RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
593		    "__builtin_" NAME,			/* NAME */	\
594		    RS6000_BTM_DFP,			/* MASK */	\
595		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
596		     | RS6000_BTC_UNARY),				\
597		    CODE_FOR_ ## ICODE)			/* ICODE */
598
599#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE)				\
600  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
601		    "__builtin_" NAME,			/* NAME */	\
602		    RS6000_BTM_DFP,			/* MASK */	\
603		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
604		     | RS6000_BTC_BINARY),				\
605		    CODE_FOR_ ## ICODE)			/* ICODE */
606
607
608/* Miscellaneous builtins for instructions added in ISA 2.06.  These
609   instructions don't require either the DFP or VSX options, just the basic ISA
610   2.06 (popcntd) enablement since they operate on general purpose
611   registers.  */
612#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE)				\
613  RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
614		    "__builtin_" NAME,			/* NAME */	\
615		    RS6000_BTM_POPCNTD,			/* MASK */	\
616		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
617		     | RS6000_BTC_UNARY),				\
618		    CODE_FOR_ ## ICODE)			/* ICODE */
619
620#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE)				\
621  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
622		    "__builtin_" NAME,			/* NAME */	\
623		    RS6000_BTM_POPCNTD,			/* MASK */	\
624		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
625		     | RS6000_BTC_BINARY),				\
626		    CODE_FOR_ ## ICODE)			/* ICODE */
627
628
629/* Miscellaneous builtins for instructions added in ISA 2.07.  These
630   instructions do require the ISA 2.07 vector support, but they aren't vector
631   instructions.  */
632#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE)				\
633  RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
634		    "__builtin_" NAME,			/* NAME */	\
635		    RS6000_BTM_P8_VECTOR,		/* MASK */	\
636		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
637		     | RS6000_BTC_TERNARY),				\
638		    CODE_FOR_ ## ICODE)			/* ICODE */
639
640/* 128-bit long double floating point builtins.  */
641#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE)				\
642  RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,		/* ENUM */	\
643		    "__builtin_" NAME,			/* NAME */	\
644		    (RS6000_BTM_HARD_FLOAT		/* MASK */	\
645		     | RS6000_BTM_LDBL128),				\
646		    (RS6000_BTC_ ## ATTR		/* ATTR */	\
647		     | RS6000_BTC_BINARY),				\
648		    CODE_FOR_ ## ICODE)			/* ICODE */
649
650#endif
651
652/* Insure 0 is not a legitimate index.  */
653BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC)
654
655/* 3 argument Altivec builtins.  */
656BU_ALTIVEC_3 (VMADDFP,        "vmaddfp",        FP,    	fmav4sf4)
657BU_ALTIVEC_3 (VMHADDSHS,      "vmhaddshs",      SAT,   	altivec_vmhaddshs)
658BU_ALTIVEC_3 (VMHRADDSHS,     "vmhraddshs",     SAT,   	altivec_vmhraddshs)
659BU_ALTIVEC_3 (VMLADDUHM,      "vmladduhm",      CONST, 	altivec_vmladduhm)
660BU_ALTIVEC_3 (VMSUMUBM,       "vmsumubm",       CONST, 	altivec_vmsumubm)
661BU_ALTIVEC_3 (VMSUMMBM,       "vmsummbm",       CONST, 	altivec_vmsummbm)
662BU_ALTIVEC_3 (VMSUMUHM,       "vmsumuhm",       CONST, 	altivec_vmsumuhm)
663BU_ALTIVEC_3 (VMSUMSHM,       "vmsumshm",       CONST, 	altivec_vmsumshm)
664BU_ALTIVEC_3 (VMSUMUHS,       "vmsumuhs",       SAT,   	altivec_vmsumuhs)
665BU_ALTIVEC_3 (VMSUMSHS,       "vmsumshs",       SAT,   	altivec_vmsumshs)
666BU_ALTIVEC_3 (VNMSUBFP,       "vnmsubfp",       FP,    	nfmsv4sf4)
667BU_ALTIVEC_3 (VPERM_1TI,      "vperm_1ti",      CONST, 	altivec_vperm_v1ti)
668BU_ALTIVEC_3 (VPERM_2DF,      "vperm_2df",      CONST, 	altivec_vperm_v2df)
669BU_ALTIVEC_3 (VPERM_2DI,      "vperm_2di",      CONST, 	altivec_vperm_v2di)
670BU_ALTIVEC_3 (VPERM_4SF,      "vperm_4sf",      CONST, 	altivec_vperm_v4sf)
671BU_ALTIVEC_3 (VPERM_4SI,      "vperm_4si",      CONST, 	altivec_vperm_v4si)
672BU_ALTIVEC_3 (VPERM_8HI,      "vperm_8hi",      CONST, 	altivec_vperm_v8hi)
673BU_ALTIVEC_3 (VPERM_16QI,     "vperm_16qi",     CONST, 	altivec_vperm_v16qi_uns)
674BU_ALTIVEC_3 (VPERM_1TI_UNS,  "vperm_1ti_uns",  CONST, 	altivec_vperm_v1ti_uns)
675BU_ALTIVEC_3 (VPERM_2DI_UNS,  "vperm_2di_uns",  CONST, 	altivec_vperm_v2di_uns)
676BU_ALTIVEC_3 (VPERM_4SI_UNS,  "vperm_4si_uns",  CONST, 	altivec_vperm_v4si_uns)
677BU_ALTIVEC_3 (VPERM_8HI_UNS,  "vperm_8hi_uns",  CONST, 	altivec_vperm_v8hi_uns)
678BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, 	altivec_vperm_v16qi_uns)
679BU_ALTIVEC_3 (VSEL_4SF,       "vsel_4sf",       CONST, 	vector_select_v4sf)
680BU_ALTIVEC_3 (VSEL_4SI,       "vsel_4si",       CONST, 	vector_select_v4si)
681BU_ALTIVEC_3 (VSEL_8HI,       "vsel_8hi",       CONST, 	vector_select_v8hi)
682BU_ALTIVEC_3 (VSEL_16QI,      "vsel_16qi",      CONST, 	vector_select_v16qi)
683BU_ALTIVEC_3 (VSEL_2DF,       "vsel_2df",       CONST, 	vector_select_v2df)
684BU_ALTIVEC_3 (VSEL_2DI,       "vsel_2di",       CONST, 	vector_select_v2di)
685BU_ALTIVEC_3 (VSEL_1TI,       "vsel_1ti",       CONST, 	vector_select_v1ti)
686BU_ALTIVEC_3 (VSEL_4SI_UNS,   "vsel_4si_uns",   CONST, 	vector_select_v4si_uns)
687BU_ALTIVEC_3 (VSEL_8HI_UNS,   "vsel_8hi_uns",   CONST, 	vector_select_v8hi_uns)
688BU_ALTIVEC_3 (VSEL_16QI_UNS,  "vsel_16qi_uns",  CONST, 	vector_select_v16qi_uns)
689BU_ALTIVEC_3 (VSEL_2DI_UNS,   "vsel_2di_uns",   CONST, 	vector_select_v2di_uns)
690BU_ALTIVEC_3 (VSEL_1TI_UNS,   "vsel_1ti_uns",   CONST, 	vector_select_v1ti_uns)
691BU_ALTIVEC_3 (VSLDOI_16QI,    "vsldoi_16qi",    CONST, 	altivec_vsldoi_v16qi)
692BU_ALTIVEC_3 (VSLDOI_8HI,     "vsldoi_8hi",     CONST, 	altivec_vsldoi_v8hi)
693BU_ALTIVEC_3 (VSLDOI_4SI,     "vsldoi_4si",     CONST, 	altivec_vsldoi_v4si)
694BU_ALTIVEC_3 (VSLDOI_4SF,     "vsldoi_4sf",     CONST, 	altivec_vsldoi_v4sf)
695
696/* Altivec DST builtins.  */
697BU_ALTIVEC_D (DST,	      "dst",		MISC,  	altivec_dst)
698BU_ALTIVEC_D (DSTT,	      "dstt",		MISC,  	altivec_dstt)
699BU_ALTIVEC_D (DSTST,	      "dstst",		MISC,  	altivec_dstst)
700BU_ALTIVEC_D (DSTSTT,	      "dststt",		MISC,  	altivec_dststt)
701
702/* Altivec 2 argument builtin functions.  */
703BU_ALTIVEC_2 (VADDUBM,        "vaddubm",	CONST,	addv16qi3)
704BU_ALTIVEC_2 (VADDUHM,	      "vadduhm",	CONST,	addv8hi3)
705BU_ALTIVEC_2 (VADDUWM,	      "vadduwm",	CONST,	addv4si3)
706BU_ALTIVEC_2 (VADDFP,	      "vaddfp",		CONST,	addv4sf3)
707BU_ALTIVEC_2 (VADDCUW,	      "vaddcuw",	CONST,	altivec_vaddcuw)
708BU_ALTIVEC_2 (VADDUBS,	      "vaddubs",	CONST,	altivec_vaddubs)
709BU_ALTIVEC_2 (VADDSBS,	      "vaddsbs",	CONST,	altivec_vaddsbs)
710BU_ALTIVEC_2 (VADDUHS,	      "vadduhs",	CONST,	altivec_vadduhs)
711BU_ALTIVEC_2 (VADDSHS,	      "vaddshs",	CONST,	altivec_vaddshs)
712BU_ALTIVEC_2 (VADDUWS,	      "vadduws",	CONST,	altivec_vadduws)
713BU_ALTIVEC_2 (VADDSWS,	      "vaddsws",	CONST,	altivec_vaddsws)
714BU_ALTIVEC_2 (VAND,	      "vand",		CONST,	andv4si3)
715BU_ALTIVEC_2 (VANDC,	      "vandc",		CONST,	andcv4si3)
716BU_ALTIVEC_2 (VAVGUB,	      "vavgub",		CONST,	altivec_vavgub)
717BU_ALTIVEC_2 (VAVGSB,	      "vavgsb",		CONST,	altivec_vavgsb)
718BU_ALTIVEC_2 (VAVGUH,	      "vavguh",		CONST,	altivec_vavguh)
719BU_ALTIVEC_2 (VAVGSH,	      "vavgsh",		CONST,	altivec_vavgsh)
720BU_ALTIVEC_2 (VAVGUW,	      "vavguw",		CONST,	altivec_vavguw)
721BU_ALTIVEC_2 (VAVGSW,	      "vavgsw",		CONST,	altivec_vavgsw)
722BU_ALTIVEC_2 (VCFUX,	      "vcfux",		CONST,	altivec_vcfux)
723BU_ALTIVEC_2 (VCFSX,	      "vcfsx",		CONST,	altivec_vcfsx)
724BU_ALTIVEC_2 (VCMPBFP,	      "vcmpbfp",	CONST,	altivec_vcmpbfp)
725BU_ALTIVEC_2 (VCMPEQUB,	      "vcmpequb",	CONST,	vector_eqv16qi)
726BU_ALTIVEC_2 (VCMPEQUH,	      "vcmpequh",	CONST,	vector_eqv8hi)
727BU_ALTIVEC_2 (VCMPEQUW,	      "vcmpequw",	CONST,	vector_eqv4si)
728BU_ALTIVEC_2 (VCMPEQFP,	      "vcmpeqfp",	CONST,	vector_eqv4sf)
729BU_ALTIVEC_2 (VCMPGEFP,	      "vcmpgefp",	CONST,	vector_gev4sf)
730BU_ALTIVEC_2 (VCMPGTUB,	      "vcmpgtub",	CONST,	vector_gtuv16qi)
731BU_ALTIVEC_2 (VCMPGTSB,	      "vcmpgtsb",	CONST,	vector_gtv16qi)
732BU_ALTIVEC_2 (VCMPGTUH,	      "vcmpgtuh",	CONST,	vector_gtuv8hi)
733BU_ALTIVEC_2 (VCMPGTSH,	      "vcmpgtsh",	CONST,	vector_gtv8hi)
734BU_ALTIVEC_2 (VCMPGTUW,	      "vcmpgtuw",	CONST,	vector_gtuv4si)
735BU_ALTIVEC_2 (VCMPGTSW,	      "vcmpgtsw",	CONST,	vector_gtv4si)
736BU_ALTIVEC_2 (VCMPGTFP,	      "vcmpgtfp",	CONST,	vector_gtv4sf)
737BU_ALTIVEC_2 (VCTSXS,	      "vctsxs",		CONST,	altivec_vctsxs)
738BU_ALTIVEC_2 (VCTUXS,	      "vctuxs",		CONST,	altivec_vctuxs)
739BU_ALTIVEC_2 (VMAXUB,	      "vmaxub",		CONST,	umaxv16qi3)
740BU_ALTIVEC_2 (VMAXSB,	      "vmaxsb",		CONST,	smaxv16qi3)
741BU_ALTIVEC_2 (VMAXUH,	      "vmaxuh",		CONST,	umaxv8hi3)
742BU_ALTIVEC_2 (VMAXSH,	      "vmaxsh",		CONST,	smaxv8hi3)
743BU_ALTIVEC_2 (VMAXUW,	      "vmaxuw",		CONST,	umaxv4si3)
744BU_ALTIVEC_2 (VMAXSW,	      "vmaxsw",		CONST,	smaxv4si3)
745BU_ALTIVEC_2 (VMAXFP,	      "vmaxfp",		CONST,	smaxv4sf3)
746BU_ALTIVEC_2 (VMRGHB,	      "vmrghb",		CONST,	altivec_vmrghb)
747BU_ALTIVEC_2 (VMRGHH,	      "vmrghh",		CONST,	altivec_vmrghh)
748BU_ALTIVEC_2 (VMRGHW,	      "vmrghw",		CONST,	altivec_vmrghw)
749BU_ALTIVEC_2 (VMRGLB,	      "vmrglb",		CONST,	altivec_vmrglb)
750BU_ALTIVEC_2 (VMRGLH,	      "vmrglh",		CONST,	altivec_vmrglh)
751BU_ALTIVEC_2 (VMRGLW,	      "vmrglw",		CONST,	altivec_vmrglw)
752BU_ALTIVEC_2 (VMINUB,	      "vminub",		CONST,	uminv16qi3)
753BU_ALTIVEC_2 (VMINSB,	      "vminsb",		CONST,	sminv16qi3)
754BU_ALTIVEC_2 (VMINUH,	      "vminuh",		CONST,	uminv8hi3)
755BU_ALTIVEC_2 (VMINSH,	      "vminsh",		CONST,	sminv8hi3)
756BU_ALTIVEC_2 (VMINUW,	      "vminuw",		CONST,	uminv4si3)
757BU_ALTIVEC_2 (VMINSW,	      "vminsw",		CONST,	sminv4si3)
758BU_ALTIVEC_2 (VMINFP,	      "vminfp",		CONST,	sminv4sf3)
759BU_ALTIVEC_2 (VMULEUB,	      "vmuleub",	CONST,	vec_widen_umult_even_v16qi)
760BU_ALTIVEC_2 (VMULEUB_UNS,    "vmuleub_uns",	CONST,	vec_widen_umult_even_v16qi)
761BU_ALTIVEC_2 (VMULESB,	      "vmulesb",	CONST,	vec_widen_smult_even_v16qi)
762BU_ALTIVEC_2 (VMULEUH,	      "vmuleuh",	CONST,	vec_widen_umult_even_v8hi)
763BU_ALTIVEC_2 (VMULEUH_UNS,    "vmuleuh_uns",	CONST,	vec_widen_umult_even_v8hi)
764BU_ALTIVEC_2 (VMULESH,	      "vmulesh",	CONST,	vec_widen_smult_even_v8hi)
765BU_ALTIVEC_2 (VMULOUB,	      "vmuloub",	CONST,	vec_widen_umult_odd_v16qi)
766BU_ALTIVEC_2 (VMULOUB_UNS,    "vmuloub_uns",	CONST,	vec_widen_umult_odd_v16qi)
767BU_ALTIVEC_2 (VMULOSB,	      "vmulosb",	CONST,	vec_widen_smult_odd_v16qi)
768BU_ALTIVEC_2 (VMULOUH,	      "vmulouh",	CONST,	vec_widen_umult_odd_v8hi)
769BU_ALTIVEC_2 (VMULOUH_UNS,    "vmulouh_uns",	CONST,	vec_widen_umult_odd_v8hi)
770BU_ALTIVEC_2 (VMULOSH,	      "vmulosh",	CONST,	vec_widen_smult_odd_v8hi)
771BU_ALTIVEC_2 (VNOR,	      "vnor",		CONST,	norv4si3)
772BU_ALTIVEC_2 (VOR,	      "vor",		CONST,	iorv4si3)
773BU_ALTIVEC_2 (VPKUHUM,	      "vpkuhum",	CONST,	altivec_vpkuhum)
774BU_ALTIVEC_2 (VPKUWUM,	      "vpkuwum",	CONST,	altivec_vpkuwum)
775BU_ALTIVEC_2 (VPKPX,	      "vpkpx",		CONST,	altivec_vpkpx)
776BU_ALTIVEC_2 (VPKSHSS,	      "vpkshss",	CONST,	altivec_vpkshss)
777BU_ALTIVEC_2 (VPKSWSS,	      "vpkswss",	CONST,	altivec_vpkswss)
778BU_ALTIVEC_2 (VPKUHUS,	      "vpkuhus",	CONST,	altivec_vpkuhus)
779BU_ALTIVEC_2 (VPKSHUS,	      "vpkshus",	CONST,	altivec_vpkshus)
780BU_ALTIVEC_2 (VPKUWUS,	      "vpkuwus",	CONST,	altivec_vpkuwus)
781BU_ALTIVEC_2 (VPKSWUS,	      "vpkswus",	CONST,	altivec_vpkswus)
782BU_ALTIVEC_2 (VRECIPFP,	      "vrecipdivfp",	CONST,	recipv4sf3)
783BU_ALTIVEC_2 (VRLB,	      "vrlb",		CONST,	vrotlv16qi3)
784BU_ALTIVEC_2 (VRLH,	      "vrlh",		CONST,	vrotlv8hi3)
785BU_ALTIVEC_2 (VRLW,	      "vrlw",		CONST,	vrotlv4si3)
786BU_ALTIVEC_2 (VSLB,	      "vslb",		CONST,	vashlv16qi3)
787BU_ALTIVEC_2 (VSLH,	      "vslh",		CONST,	vashlv8hi3)
788BU_ALTIVEC_2 (VSLW,	      "vslw",		CONST,	vashlv4si3)
789BU_ALTIVEC_2 (VSL,	      "vsl",		CONST,	altivec_vsl)
790BU_ALTIVEC_2 (VSLO,	      "vslo",		CONST,	altivec_vslo)
791BU_ALTIVEC_2 (VSPLTB,	      "vspltb",		CONST,	altivec_vspltb)
792BU_ALTIVEC_2 (VSPLTH,	      "vsplth",		CONST,	altivec_vsplth)
793BU_ALTIVEC_2 (VSPLTW,	      "vspltw",		CONST,	altivec_vspltw)
794BU_ALTIVEC_2 (VSRB,	      "vsrb",		CONST,	vlshrv16qi3)
795BU_ALTIVEC_2 (VSRH,	      "vsrh",		CONST,	vlshrv8hi3)
796BU_ALTIVEC_2 (VSRW,	      "vsrw",		CONST,	vlshrv4si3)
797BU_ALTIVEC_2 (VSRAB,	      "vsrab",		CONST,	vashrv16qi3)
798BU_ALTIVEC_2 (VSRAH,	      "vsrah",		CONST,	vashrv8hi3)
799BU_ALTIVEC_2 (VSRAW,	      "vsraw",		CONST,	vashrv4si3)
800BU_ALTIVEC_2 (VSR,	      "vsr",		CONST,	altivec_vsr)
801BU_ALTIVEC_2 (VSRO,	      "vsro",		CONST,	altivec_vsro)
802BU_ALTIVEC_2 (VSUBUBM,	      "vsububm",	CONST,	subv16qi3)
803BU_ALTIVEC_2 (VSUBUHM,	      "vsubuhm",	CONST,	subv8hi3)
804BU_ALTIVEC_2 (VSUBUWM,	      "vsubuwm",	CONST,	subv4si3)
805BU_ALTIVEC_2 (VSUBFP,	      "vsubfp",		CONST,	subv4sf3)
806BU_ALTIVEC_2 (VSUBCUW,	      "vsubcuw",	CONST,	altivec_vsubcuw)
807BU_ALTIVEC_2 (VSUBUBS,	      "vsububs",	CONST,	altivec_vsububs)
808BU_ALTIVEC_2 (VSUBSBS,	      "vsubsbs",	CONST,	altivec_vsubsbs)
809BU_ALTIVEC_2 (VSUBUHS,	      "vsubuhs",	CONST,	altivec_vsubuhs)
810BU_ALTIVEC_2 (VSUBSHS,	      "vsubshs",	CONST,	altivec_vsubshs)
811BU_ALTIVEC_2 (VSUBUWS,	      "vsubuws",	CONST,	altivec_vsubuws)
812BU_ALTIVEC_2 (VSUBSWS,	      "vsubsws",	CONST,	altivec_vsubsws)
813BU_ALTIVEC_2 (VSUM4UBS,	      "vsum4ubs",	CONST,	altivec_vsum4ubs)
814BU_ALTIVEC_2 (VSUM4SBS,	      "vsum4sbs",	CONST,	altivec_vsum4sbs)
815BU_ALTIVEC_2 (VSUM4SHS,	      "vsum4shs",	CONST,	altivec_vsum4shs)
816BU_ALTIVEC_2 (VSUM2SWS,	      "vsum2sws",	CONST,	altivec_vsum2sws)
817BU_ALTIVEC_2 (VSUMSWS,	      "vsumsws",	CONST,	altivec_vsumsws)
818BU_ALTIVEC_2 (VXOR,	      "vxor",		CONST,	xorv4si3)
819BU_ALTIVEC_2 (COPYSIGN_V4SF,  "copysignfp",	CONST,	vector_copysignv4sf3)
820
821/* Altivec ABS functions.  */
822BU_ALTIVEC_A (ABS_V4SI,	      "abs_v4si",	CONST,	absv4si2)
823BU_ALTIVEC_A (ABS_V8HI,	      "abs_v8hi",	CONST,	absv8hi2)
824BU_ALTIVEC_A (ABS_V4SF,	      "abs_v4sf",	CONST,	absv4sf2)
825BU_ALTIVEC_A (ABS_V16QI,      "abs_v16qi",	CONST,	absv16qi2)
826BU_ALTIVEC_A (ABSS_V4SI,      "abss_v4si",	SAT,	altivec_abss_v4si)
827BU_ALTIVEC_A (ABSS_V8HI,      "abss_v8hi",	SAT,	altivec_abss_v8hi)
828BU_ALTIVEC_A (ABSS_V16QI,     "abss_v16qi",	SAT,	altivec_abss_v16qi)
829
830/* 1 argument Altivec builtin functions.  */
831BU_ALTIVEC_1 (VEXPTEFP,	      "vexptefp",	FP,	altivec_vexptefp)
832BU_ALTIVEC_1 (VLOGEFP,	      "vlogefp",	FP,	altivec_vlogefp)
833BU_ALTIVEC_1 (VREFP,	      "vrefp",		FP,	rev4sf2)
834BU_ALTIVEC_1 (VRFIM,	      "vrfim",		FP,	vector_floorv4sf2)
835BU_ALTIVEC_1 (VRFIN,	      "vrfin",		FP,	altivec_vrfin)
836BU_ALTIVEC_1 (VRFIP,	      "vrfip",		FP,	vector_ceilv4sf2)
837BU_ALTIVEC_1 (VRFIZ,	      "vrfiz",		FP,	vector_btruncv4sf2)
838BU_ALTIVEC_1 (VRSQRTFP,	      "vrsqrtfp",	FP,	rsqrtv4sf2)
839BU_ALTIVEC_1 (VRSQRTEFP,      "vrsqrtefp",	FP,	rsqrtev4sf2)
840BU_ALTIVEC_1 (VSPLTISB,	      "vspltisb",	CONST,	altivec_vspltisb)
841BU_ALTIVEC_1 (VSPLTISH,	      "vspltish",	CONST,	altivec_vspltish)
842BU_ALTIVEC_1 (VSPLTISW,	      "vspltisw",	CONST,	altivec_vspltisw)
843BU_ALTIVEC_1 (VUPKHSB,	      "vupkhsb",	CONST,	altivec_vupkhsb)
844BU_ALTIVEC_1 (VUPKHPX,	      "vupkhpx",	CONST,	altivec_vupkhpx)
845BU_ALTIVEC_1 (VUPKHSH,	      "vupkhsh",	CONST,	altivec_vupkhsh)
846BU_ALTIVEC_1 (VUPKLSB,	      "vupklsb",	CONST,	altivec_vupklsb)
847BU_ALTIVEC_1 (VUPKLPX,	      "vupklpx",	CONST,	altivec_vupklpx)
848BU_ALTIVEC_1 (VUPKLSH,	      "vupklsh",	CONST,	altivec_vupklsh)
849
850BU_ALTIVEC_1 (FLOAT_V4SI_V4SF,    "float_sisf",	    FP,	floatv4siv4sf2)
851BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2)
852BU_ALTIVEC_1 (FIX_V4SF_V4SI,      "fix_sfsi",       FP, fix_truncv4sfv4si2)
853BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI,   "fixuns_sfsi",    FP, fixuns_truncv4sfv4si2)
854
855/* Altivec predicate functions.  */
856BU_ALTIVEC_P (VCMPBFP_P,      "vcmpbfp_p",	CONST,	altivec_vcmpbfp_p)
857BU_ALTIVEC_P (VCMPEQFP_P,     "vcmpeqfp_p",	CONST,	vector_eq_v4sf_p)
858BU_ALTIVEC_P (VCMPGEFP_P,     "vcmpgefp_p",	CONST,	vector_ge_v4sf_p)
859BU_ALTIVEC_P (VCMPGTFP_P,     "vcmpgtfp_p",	CONST,	vector_gt_v4sf_p)
860BU_ALTIVEC_P (VCMPEQUW_P,     "vcmpequw_p",	CONST,	vector_eq_v4si_p)
861BU_ALTIVEC_P (VCMPGTSW_P,     "vcmpgtsw_p",	CONST,	vector_gt_v4si_p)
862BU_ALTIVEC_P (VCMPGTUW_P,     "vcmpgtuw_p",	CONST,	vector_gtu_v4si_p)
863BU_ALTIVEC_P (VCMPEQUH_P,     "vcmpequh_p",	CONST,	vector_eq_v8hi_p)
864BU_ALTIVEC_P (VCMPGTSH_P,     "vcmpgtsh_p",	CONST,	vector_gt_v8hi_p)
865BU_ALTIVEC_P (VCMPGTUH_P,     "vcmpgtuh_p",	CONST,	vector_gtu_v8hi_p)
866BU_ALTIVEC_P (VCMPEQUB_P,     "vcmpequb_p",	CONST,	vector_eq_v16qi_p)
867BU_ALTIVEC_P (VCMPGTSB_P,     "vcmpgtsb_p",	CONST,	vector_gt_v16qi_p)
868BU_ALTIVEC_P (VCMPGTUB_P,     "vcmpgtub_p",	CONST,	vector_gtu_v16qi_p)
869
870/* AltiVec builtins that are handled as special cases.  */
871BU_ALTIVEC_X (ST_INTERNAL_4si,  "st_internal_4si",  MEM)
872BU_ALTIVEC_X (LD_INTERNAL_4si,  "ld_internal_4si",  MEM)
873BU_ALTIVEC_X (ST_INTERNAL_8hi,	"st_internal_8hi",  MEM)
874BU_ALTIVEC_X (LD_INTERNAL_8hi,	"ld_internal_8hi",  MEM)
875BU_ALTIVEC_X (ST_INTERNAL_16qi,	"st_internal_16qi", MEM)
876BU_ALTIVEC_X (LD_INTERNAL_16qi,	"ld_internal_16qi", MEM)
877BU_ALTIVEC_X (ST_INTERNAL_4sf,	"st_internal_16qi", MEM)
878BU_ALTIVEC_X (LD_INTERNAL_4sf,	"ld_internal_4sf",  MEM)
879BU_ALTIVEC_X (ST_INTERNAL_2df,	"st_internal_4sf",  MEM)
880BU_ALTIVEC_X (LD_INTERNAL_2df,	"ld_internal_2df",  MEM)
881BU_ALTIVEC_X (ST_INTERNAL_2di,	"st_internal_2di",  MEM)
882BU_ALTIVEC_X (LD_INTERNAL_2di,	"ld_internal_2di",  MEM)
883BU_ALTIVEC_X (ST_INTERNAL_1ti,	"st_internal_1ti",  MEM)
884BU_ALTIVEC_X (LD_INTERNAL_1ti,	"ld_internal_1ti",  MEM)
885BU_ALTIVEC_X (MTVSCR,		"mtvscr",	    MISC)
886BU_ALTIVEC_X (MFVSCR,		"mfvscr",	    MISC)
887BU_ALTIVEC_X (DSSALL,		"dssall",	    MISC)
888BU_ALTIVEC_X (DSS,		"dss",		    MISC)
889BU_ALTIVEC_X (LVSL,		"lvsl",		    MEM)
890BU_ALTIVEC_X (LVSR,		"lvsr",		    MEM)
891BU_ALTIVEC_X (LVEBX,		"lvebx",	    MEM)
892BU_ALTIVEC_X (LVEHX,		"lvehx",	    MEM)
893BU_ALTIVEC_X (LVEWX,		"lvewx",	    MEM)
894BU_ALTIVEC_X (LVXL,		"lvxl",		    MEM)
895BU_ALTIVEC_X (LVXL_V2DF,	"lvxl_v2df",	    MEM)
896BU_ALTIVEC_X (LVXL_V2DI,	"lvxl_v2di",	    MEM)
897BU_ALTIVEC_X (LVXL_V4SF,	"lvxl_v4sf",	    MEM)
898BU_ALTIVEC_X (LVXL_V4SI,	"lvxl_v4si",	    MEM)
899BU_ALTIVEC_X (LVXL_V8HI,	"lvxl_v8hi",	    MEM)
900BU_ALTIVEC_X (LVXL_V16QI,	"lvxl_v16qi",	    MEM)
901BU_ALTIVEC_X (LVX,		"lvx",		    MEM)
902BU_ALTIVEC_X (LVX_V2DF,		"lvx_v2df",	    MEM)
903BU_ALTIVEC_X (LVX_V2DI,		"lvx_v2di",	    MEM)
904BU_ALTIVEC_X (LVX_V4SF,		"lvx_v4sf",	    MEM)
905BU_ALTIVEC_X (LVX_V4SI,		"lvx_v4si",	    MEM)
906BU_ALTIVEC_X (LVX_V8HI,		"lvx_v8hi",	    MEM)
907BU_ALTIVEC_X (LVX_V16QI,	"lvx_v16qi",	    MEM)
908BU_ALTIVEC_X (STVX,		"stvx",		    MEM)
909BU_ALTIVEC_X (STVX_V2DF,	"stvx_v2df",	    MEM)
910BU_ALTIVEC_X (STVX_V2DI,	"stvx_v2di",	    MEM)
911BU_ALTIVEC_X (STVX_V4SF,	"stvx_v4sf",	    MEM)
912BU_ALTIVEC_X (STVX_V4SI,	"stvx_v4si",	    MEM)
913BU_ALTIVEC_X (STVX_V8HI,	"stvx_v8hi",	    MEM)
914BU_ALTIVEC_X (STVX_V16QI,	"stvx_v16qi",	    MEM)
915BU_ALTIVEC_C (LVLX,		"lvlx",		    MEM)
916BU_ALTIVEC_C (LVLXL,		"lvlxl",	    MEM)
917BU_ALTIVEC_C (LVRX,		"lvrx",		    MEM)
918BU_ALTIVEC_C (LVRXL,		"lvrxl",	    MEM)
919BU_ALTIVEC_X (STVEBX,		"stvebx",	    MEM)
920BU_ALTIVEC_X (STVEHX,		"stvehx",	    MEM)
921BU_ALTIVEC_X (STVEWX,		"stvewx",	    MEM)
922BU_ALTIVEC_X (STVXL,		"stvxl",	    MEM)
923BU_ALTIVEC_X (STVXL_V2DF,	"stvxl_v2df",	    MEM)
924BU_ALTIVEC_X (STVXL_V2DI,	"stvxl_v2di",	    MEM)
925BU_ALTIVEC_X (STVXL_V4SF,	"stvxl_v4sf",	    MEM)
926BU_ALTIVEC_X (STVXL_V4SI,	"stvxl_v4si",	    MEM)
927BU_ALTIVEC_X (STVXL_V8HI,	"stvxl_v8hi",	    MEM)
928BU_ALTIVEC_X (STVXL_V16QI,	"stvxl_v16qi",	    MEM)
929BU_ALTIVEC_C (STVLX,		"stvlx",	    MEM)
930BU_ALTIVEC_C (STVLXL,		"stvlxl",	    MEM)
931BU_ALTIVEC_C (STVRX,		"stvrx",	    MEM)
932BU_ALTIVEC_C (STVRXL,		"stvrxl",	    MEM)
933BU_ALTIVEC_X (MASK_FOR_LOAD,	"mask_for_load",    MISC)
934BU_ALTIVEC_X (MASK_FOR_STORE,	"mask_for_store",   MISC)
935BU_ALTIVEC_X (VEC_INIT_V4SI,	"vec_init_v4si",    CONST)
936BU_ALTIVEC_X (VEC_INIT_V8HI,	"vec_init_v8hi",    CONST)
937BU_ALTIVEC_X (VEC_INIT_V16QI,	"vec_init_v16qi",   CONST)
938BU_ALTIVEC_X (VEC_INIT_V4SF,	"vec_init_v4sf",    CONST)
939BU_ALTIVEC_X (VEC_SET_V4SI,	"vec_set_v4si",     CONST)
940BU_ALTIVEC_X (VEC_SET_V8HI,	"vec_set_v8hi",     CONST)
941BU_ALTIVEC_X (VEC_SET_V16QI,	"vec_set_v16qi",    CONST)
942BU_ALTIVEC_X (VEC_SET_V4SF,	"vec_set_v4sf",     CONST)
943BU_ALTIVEC_X (VEC_EXT_V4SI,	"vec_ext_v4si",     CONST)
944BU_ALTIVEC_X (VEC_EXT_V8HI,	"vec_ext_v8hi",     CONST)
945BU_ALTIVEC_X (VEC_EXT_V16QI,	"vec_ext_v16qi",    CONST)
946BU_ALTIVEC_X (VEC_EXT_V4SF,	"vec_ext_v4sf",     CONST)
947
948/* Altivec overloaded builtins.  */
949/* For now, don't set the classification for overloaded functions.
950   The function should be converted to the type specific instruction
951   before we get to the point about classifying the builtin type.  */
952
953/* 3 argument Altivec overloaded builtins.  */
954BU_ALTIVEC_OVERLOAD_3 (MADD,       "madd")
955BU_ALTIVEC_OVERLOAD_3 (MADDS,      "madds")
956BU_ALTIVEC_OVERLOAD_3 (MLADD,      "mladd")
957BU_ALTIVEC_OVERLOAD_3 (MRADDS,     "mradds")
958BU_ALTIVEC_OVERLOAD_3 (MSUM,       "msum")
959BU_ALTIVEC_OVERLOAD_3 (MSUMS,      "msums")
960BU_ALTIVEC_OVERLOAD_3 (NMSUB,      "nmsub")
961BU_ALTIVEC_OVERLOAD_3 (PERM,       "perm")
962BU_ALTIVEC_OVERLOAD_3 (SEL,        "sel")
963BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM,   "vmsummbm")
964BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM,   "vmsumshm")
965BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS,   "vmsumshs")
966BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM,   "vmsumubm")
967BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM,   "vmsumuhm")
968BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS,   "vmsumuhs")
969
970/* Altivec DST overloaded builtins.  */
971BU_ALTIVEC_OVERLOAD_D (DST,	   "dst")
972BU_ALTIVEC_OVERLOAD_D (DSTT,	   "dstt")
973BU_ALTIVEC_OVERLOAD_D (DSTST,	   "dstst")
974BU_ALTIVEC_OVERLOAD_D (DSTSTT,	   "dststt")
975
976/* 2 argument Altivec overloaded builtins.  */
977BU_ALTIVEC_OVERLOAD_2 (ADD,	   "add")
978BU_ALTIVEC_OVERLOAD_2 (ADDC,	   "addc")
979BU_ALTIVEC_OVERLOAD_2 (ADDS,	   "adds")
980BU_ALTIVEC_OVERLOAD_2 (AND,	   "and")
981BU_ALTIVEC_OVERLOAD_2 (ANDC,	   "andc")
982BU_ALTIVEC_OVERLOAD_2 (AVG,	   "avg")
983BU_ALTIVEC_OVERLOAD_2 (CMPB,	   "cmpb")
984BU_ALTIVEC_OVERLOAD_2 (CMPEQ,	   "cmpeq")
985BU_ALTIVEC_OVERLOAD_2 (CMPGE,	   "cmpge")
986BU_ALTIVEC_OVERLOAD_2 (CMPGT,	   "cmpgt")
987BU_ALTIVEC_OVERLOAD_2 (CMPLE,	   "cmple")
988BU_ALTIVEC_OVERLOAD_2 (CMPLT,	   "cmplt")
989BU_ALTIVEC_OVERLOAD_2 (COPYSIGN,   "copysign")
990BU_ALTIVEC_OVERLOAD_2 (MAX,	   "max")
991BU_ALTIVEC_OVERLOAD_2 (MERGEH,	   "mergeh")
992BU_ALTIVEC_OVERLOAD_2 (MERGEL,	   "mergel")
993BU_ALTIVEC_OVERLOAD_2 (MIN,	   "min")
994BU_ALTIVEC_OVERLOAD_2 (MULE,	   "mule")
995BU_ALTIVEC_OVERLOAD_2 (MULO,	   "mulo")
996BU_ALTIVEC_OVERLOAD_2 (NOR,	   "nor")
997BU_ALTIVEC_OVERLOAD_2 (OR,	   "or")
998BU_ALTIVEC_OVERLOAD_2 (PACK,	   "pack")
999BU_ALTIVEC_OVERLOAD_2 (PACKPX,	   "packpx")
1000BU_ALTIVEC_OVERLOAD_2 (PACKS,	   "packs")
1001BU_ALTIVEC_OVERLOAD_2 (PACKSU,	   "packsu")
1002BU_ALTIVEC_OVERLOAD_2 (RECIP,	   "recipdiv")
1003BU_ALTIVEC_OVERLOAD_2 (RL,	   "rl")
1004BU_ALTIVEC_OVERLOAD_2 (SL,	   "sl")
1005BU_ALTIVEC_OVERLOAD_2 (SLL,	   "sll")
1006BU_ALTIVEC_OVERLOAD_2 (SLO,	   "slo")
1007BU_ALTIVEC_OVERLOAD_2 (SR,	   "sr")
1008BU_ALTIVEC_OVERLOAD_2 (SRA,	   "sra")
1009BU_ALTIVEC_OVERLOAD_2 (SRL,	   "srl")
1010BU_ALTIVEC_OVERLOAD_2 (SRO,	   "sro")
1011BU_ALTIVEC_OVERLOAD_2 (SUB,	   "sub")
1012BU_ALTIVEC_OVERLOAD_2 (SUBC,	   "subc")
1013BU_ALTIVEC_OVERLOAD_2 (SUBS,	   "subs")
1014BU_ALTIVEC_OVERLOAD_2 (SUM2S,	   "sum2s")
1015BU_ALTIVEC_OVERLOAD_2 (SUM4S,	   "sum4s")
1016BU_ALTIVEC_OVERLOAD_2 (SUMS,	   "sums")
1017BU_ALTIVEC_OVERLOAD_2 (VADDFP,	   "vaddfp")
1018BU_ALTIVEC_OVERLOAD_2 (VADDSBS,	   "vaddsbs")
1019BU_ALTIVEC_OVERLOAD_2 (VADDSHS,	   "vaddshs")
1020BU_ALTIVEC_OVERLOAD_2 (VADDSWS,	   "vaddsws")
1021BU_ALTIVEC_OVERLOAD_2 (VADDUBM,	   "vaddubm")
1022BU_ALTIVEC_OVERLOAD_2 (VADDUBS,	   "vaddubs")
1023BU_ALTIVEC_OVERLOAD_2 (VADDUHM,	   "vadduhm")
1024BU_ALTIVEC_OVERLOAD_2 (VADDUHS,	   "vadduhs")
1025BU_ALTIVEC_OVERLOAD_2 (VADDUWM,	   "vadduwm")
1026BU_ALTIVEC_OVERLOAD_2 (VADDUWS,	   "vadduws")
1027BU_ALTIVEC_OVERLOAD_2 (VAVGSB,	   "vavgsb")
1028BU_ALTIVEC_OVERLOAD_2 (VAVGSH,	   "vavgsh")
1029BU_ALTIVEC_OVERLOAD_2 (VAVGSW,	   "vavgsw")
1030BU_ALTIVEC_OVERLOAD_2 (VAVGUB,	   "vavgub")
1031BU_ALTIVEC_OVERLOAD_2 (VAVGUH,	   "vavguh")
1032BU_ALTIVEC_OVERLOAD_2 (VAVGUW,	   "vavguw")
1033BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP,   "vcmpeqfp")
1034BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB,   "vcmpequb")
1035BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH,   "vcmpequh")
1036BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW,   "vcmpequw")
1037BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP,   "vcmpgtfp")
1038BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB,   "vcmpgtsb")
1039BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH,   "vcmpgtsh")
1040BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW,   "vcmpgtsw")
1041BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB,   "vcmpgtub")
1042BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH,   "vcmpgtuh")
1043BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW,   "vcmpgtuw")
1044BU_ALTIVEC_OVERLOAD_2 (VMAXFP,	   "vmaxfp")
1045BU_ALTIVEC_OVERLOAD_2 (VMAXSB,	   "vmaxsb")
1046BU_ALTIVEC_OVERLOAD_2 (VMAXSH,	   "vmaxsh")
1047BU_ALTIVEC_OVERLOAD_2 (VMAXSW,	   "vmaxsw")
1048BU_ALTIVEC_OVERLOAD_2 (VMAXUB,	   "vmaxub")
1049BU_ALTIVEC_OVERLOAD_2 (VMAXUH,	   "vmaxuh")
1050BU_ALTIVEC_OVERLOAD_2 (VMAXUW,	   "vmaxuw")
1051BU_ALTIVEC_OVERLOAD_2 (VMINFP,	   "vminfp")
1052BU_ALTIVEC_OVERLOAD_2 (VMINSB,	   "vminsb")
1053BU_ALTIVEC_OVERLOAD_2 (VMINSH,	   "vminsh")
1054BU_ALTIVEC_OVERLOAD_2 (VMINSW,	   "vminsw")
1055BU_ALTIVEC_OVERLOAD_2 (VMINUB,	   "vminub")
1056BU_ALTIVEC_OVERLOAD_2 (VMINUH,	   "vminuh")
1057BU_ALTIVEC_OVERLOAD_2 (VMINUW,	   "vminuw")
1058BU_ALTIVEC_OVERLOAD_2 (VMRGHB,	   "vmrghb")
1059BU_ALTIVEC_OVERLOAD_2 (VMRGHH,	   "vmrghh")
1060BU_ALTIVEC_OVERLOAD_2 (VMRGHW,	   "vmrghw")
1061BU_ALTIVEC_OVERLOAD_2 (VMRGLB,	   "vmrglb")
1062BU_ALTIVEC_OVERLOAD_2 (VMRGLH,	   "vmrglh")
1063BU_ALTIVEC_OVERLOAD_2 (VMRGLW,	   "vmrglw")
1064BU_ALTIVEC_OVERLOAD_2 (VMULESB,	   "vmulesb")
1065BU_ALTIVEC_OVERLOAD_2 (VMULESH,	   "vmulesh")
1066BU_ALTIVEC_OVERLOAD_2 (VMULEUB,	   "vmuleub")
1067BU_ALTIVEC_OVERLOAD_2 (VMULEUH,	   "vmuleuh")
1068BU_ALTIVEC_OVERLOAD_2 (VMULOSB,	   "vmulosb")
1069BU_ALTIVEC_OVERLOAD_2 (VMULOSH,	   "vmulosh")
1070BU_ALTIVEC_OVERLOAD_2 (VMULOUB,	   "vmuloub")
1071BU_ALTIVEC_OVERLOAD_2 (VMULOUH,	   "vmulouh")
1072BU_ALTIVEC_OVERLOAD_2 (VPKSHSS,	   "vpkshss")
1073BU_ALTIVEC_OVERLOAD_2 (VPKSHUS,	   "vpkshus")
1074BU_ALTIVEC_OVERLOAD_2 (VPKSWSS,	   "vpkswss")
1075BU_ALTIVEC_OVERLOAD_2 (VPKSWUS,	   "vpkswus")
1076BU_ALTIVEC_OVERLOAD_2 (VPKUHUM,	   "vpkuhum")
1077BU_ALTIVEC_OVERLOAD_2 (VPKUHUS,	   "vpkuhus")
1078BU_ALTIVEC_OVERLOAD_2 (VPKUWUM,	   "vpkuwum")
1079BU_ALTIVEC_OVERLOAD_2 (VPKUWUS,	   "vpkuwus")
1080BU_ALTIVEC_OVERLOAD_2 (VRLB,	   "vrlb")
1081BU_ALTIVEC_OVERLOAD_2 (VRLH,	   "vrlh")
1082BU_ALTIVEC_OVERLOAD_2 (VRLW,	   "vrlw")
1083BU_ALTIVEC_OVERLOAD_2 (VSLB,	   "vslb")
1084BU_ALTIVEC_OVERLOAD_2 (VSLH,	   "vslh")
1085BU_ALTIVEC_OVERLOAD_2 (VSLW,	   "vslw")
1086BU_ALTIVEC_OVERLOAD_2 (VSRAB,	   "vsrab")
1087BU_ALTIVEC_OVERLOAD_2 (VSRAH,	   "vsrah")
1088BU_ALTIVEC_OVERLOAD_2 (VSRAW,	   "vsraw")
1089BU_ALTIVEC_OVERLOAD_2 (VSRB,	   "vsrb")
1090BU_ALTIVEC_OVERLOAD_2 (VSRH,	   "vsrh")
1091BU_ALTIVEC_OVERLOAD_2 (VSRW,	   "vsrw")
1092BU_ALTIVEC_OVERLOAD_2 (VSUBFP,	   "vsubfp")
1093BU_ALTIVEC_OVERLOAD_2 (VSUBSBS,	   "vsubsbs")
1094BU_ALTIVEC_OVERLOAD_2 (VSUBSHS,	   "vsubshs")
1095BU_ALTIVEC_OVERLOAD_2 (VSUBSWS,	   "vsubsws")
1096BU_ALTIVEC_OVERLOAD_2 (VSUBUBM,	   "vsububm")
1097BU_ALTIVEC_OVERLOAD_2 (VSUBUBS,	   "vsububs")
1098BU_ALTIVEC_OVERLOAD_2 (VSUBUHM,	   "vsubuhm")
1099BU_ALTIVEC_OVERLOAD_2 (VSUBUHS,	   "vsubuhs")
1100BU_ALTIVEC_OVERLOAD_2 (VSUBUWM,	   "vsubuwm")
1101BU_ALTIVEC_OVERLOAD_2 (VSUBUWS,	   "vsubuws")
1102BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS,   "vsum4sbs")
1103BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS,   "vsum4shs")
1104BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS,   "vsum4ubs")
1105BU_ALTIVEC_OVERLOAD_2 (XOR,	   "xor")
1106
1107/* 1 argument Altivec overloaded functions.  */
1108BU_ALTIVEC_OVERLOAD_1 (ABS,	   "abs")
1109BU_ALTIVEC_OVERLOAD_1 (ABSS,	   "abss")
1110BU_ALTIVEC_OVERLOAD_1 (CEIL,	   "ceil")
1111BU_ALTIVEC_OVERLOAD_1 (EXPTE,	   "expte")
1112BU_ALTIVEC_OVERLOAD_1 (FLOOR,	   "floor")
1113BU_ALTIVEC_OVERLOAD_1 (LOGE,	   "loge")
1114BU_ALTIVEC_OVERLOAD_1 (MTVSCR,	   "mtvscr")
1115BU_ALTIVEC_OVERLOAD_1 (NEARBYINT,  "nearbyint")
1116BU_ALTIVEC_OVERLOAD_1 (RE,	   "re")
1117BU_ALTIVEC_OVERLOAD_1 (RINT,       "rint")
1118BU_ALTIVEC_OVERLOAD_1 (ROUND,	   "round")
1119BU_ALTIVEC_OVERLOAD_1 (RSQRT,	   "rsqrt")
1120BU_ALTIVEC_OVERLOAD_1 (RSQRTE,	   "rsqrte")
1121BU_ALTIVEC_OVERLOAD_1 (SQRT,       "sqrt")
1122BU_ALTIVEC_OVERLOAD_1 (TRUNC,	   "trunc")
1123BU_ALTIVEC_OVERLOAD_1 (UNPACKH,	   "unpackh")
1124BU_ALTIVEC_OVERLOAD_1 (UNPACKL,	   "unpackl")
1125BU_ALTIVEC_OVERLOAD_1 (VUPKHPX,	   "vupkhpx")
1126BU_ALTIVEC_OVERLOAD_1 (VUPKHSB,	   "vupkhsb")
1127BU_ALTIVEC_OVERLOAD_1 (VUPKHSH,	   "vupkhsh")
1128BU_ALTIVEC_OVERLOAD_1 (VUPKLPX,	   "vupklpx")
1129BU_ALTIVEC_OVERLOAD_1 (VUPKLSB,	   "vupklsb")
1130BU_ALTIVEC_OVERLOAD_1 (VUPKLSH,	   "vupklsh")
1131
1132/* Overloaded altivec predicates.  */
1133BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P,   "vcmpeq_p")
1134BU_ALTIVEC_OVERLOAD_P (VCMPGT_P,   "vcmpgt_p")
1135BU_ALTIVEC_OVERLOAD_P (VCMPGE_P,   "vcmpge_p")
1136
1137/* Overloaded Altivec builtins that are handled as special cases.  */
1138BU_ALTIVEC_OVERLOAD_X (CTF,	   "ctf")
1139BU_ALTIVEC_OVERLOAD_X (CTS,	   "cts")
1140BU_ALTIVEC_OVERLOAD_X (CTU,	   "ctu")
1141BU_ALTIVEC_OVERLOAD_X (EXTRACT,	   "extract")
1142BU_ALTIVEC_OVERLOAD_X (INSERT,	   "insert")
1143BU_ALTIVEC_OVERLOAD_X (LD,	   "ld")
1144BU_ALTIVEC_OVERLOAD_X (LDE,	   "lde")
1145BU_ALTIVEC_OVERLOAD_X (LDL,	   "ldl")
1146BU_ALTIVEC_OVERLOAD_X (LVEBX,	   "lvebx")
1147BU_ALTIVEC_OVERLOAD_X (LVEHX,	   "lvehx")
1148BU_ALTIVEC_OVERLOAD_X (LVEWX,	   "lvewx")
1149BU_ALTIVEC_OVERLOAD_X (LVLX,	   "lvlx")
1150BU_ALTIVEC_OVERLOAD_X (LVLXL,	   "lvlxl")
1151BU_ALTIVEC_OVERLOAD_X (LVRX,	   "lvrx")
1152BU_ALTIVEC_OVERLOAD_X (LVRXL,	   "lvrxl")
1153BU_ALTIVEC_OVERLOAD_X (LVSL,	   "lvsl")
1154BU_ALTIVEC_OVERLOAD_X (LVSR,	   "lvsr")
1155BU_ALTIVEC_OVERLOAD_X (PROMOTE,	   "promote")
1156BU_ALTIVEC_OVERLOAD_X (SLD,	   "sld")
1157BU_ALTIVEC_OVERLOAD_X (SPLAT,	   "splat")
1158BU_ALTIVEC_OVERLOAD_X (SPLATS,	   "splats")
1159BU_ALTIVEC_OVERLOAD_X (ST,	   "st")
1160BU_ALTIVEC_OVERLOAD_X (STE,	   "ste")
1161BU_ALTIVEC_OVERLOAD_X (STEP,	   "step")
1162BU_ALTIVEC_OVERLOAD_X (STL,	   "stl")
1163BU_ALTIVEC_OVERLOAD_X (STVEBX,	   "stvebx")
1164BU_ALTIVEC_OVERLOAD_X (STVEHX,	   "stvehx")
1165BU_ALTIVEC_OVERLOAD_X (STVEWX,	   "stvewx")
1166BU_ALTIVEC_OVERLOAD_X (STVLX,	   "stvlx")
1167BU_ALTIVEC_OVERLOAD_X (STVLXL,	   "stvlxl")
1168BU_ALTIVEC_OVERLOAD_X (STVRX,	   "stvrx")
1169BU_ALTIVEC_OVERLOAD_X (STVRXL,	   "stvrxl")
1170BU_ALTIVEC_OVERLOAD_X (VCFSX,	   "vcfsx")
1171BU_ALTIVEC_OVERLOAD_X (VCFUX,	   "vcfux")
1172BU_ALTIVEC_OVERLOAD_X (VSPLTB,	   "vspltb")
1173BU_ALTIVEC_OVERLOAD_X (VSPLTH,	   "vsplth")
1174BU_ALTIVEC_OVERLOAD_X (VSPLTW,	   "vspltw")
1175
1176/* 3 argument VSX builtins.  */
1177BU_VSX_3 (XVMADDSP,           "xvmaddsp",       CONST, 	fmav4sf4)
1178BU_VSX_3 (XVMSUBSP,           "xvmsubsp",       CONST, 	fmsv4sf4)
1179BU_VSX_3 (XVNMADDSP,          "xvnmaddsp",      CONST, 	nfmav4sf4)
1180BU_VSX_3 (XVNMSUBSP,          "xvnmsubsp",      CONST, 	nfmsv4sf4)
1181
1182BU_VSX_3 (XVMADDDP,           "xvmadddp",       CONST, 	fmav2df4)
1183BU_VSX_3 (XVMSUBDP,           "xvmsubdp",       CONST, 	fmsv2df4)
1184BU_VSX_3 (XVNMADDDP,          "xvnmadddp",      CONST, 	nfmav2df4)
1185BU_VSX_3 (XVNMSUBDP,          "xvnmsubdp",      CONST, 	nfmsv2df4)
1186
1187BU_VSX_3 (XXSEL_1TI,          "xxsel_1ti",      CONST, 	vector_select_v1ti)
1188BU_VSX_3 (XXSEL_2DI,          "xxsel_2di",      CONST, 	vector_select_v2di)
1189BU_VSX_3 (XXSEL_2DF,          "xxsel_2df",      CONST, 	vector_select_v2df)
1190BU_VSX_3 (XXSEL_4SF,          "xxsel_4sf",      CONST, 	vector_select_v4sf)
1191BU_VSX_3 (XXSEL_4SI,          "xxsel_4si",      CONST, 	vector_select_v4si)
1192BU_VSX_3 (XXSEL_8HI,          "xxsel_8hi",      CONST, 	vector_select_v8hi)
1193BU_VSX_3 (XXSEL_16QI,         "xxsel_16qi",     CONST, 	vector_select_v16qi)
1194BU_VSX_3 (XXSEL_1TI_UNS,      "xxsel_1ti_uns",  CONST, 	vector_select_v1ti_uns)
1195BU_VSX_3 (XXSEL_2DI_UNS,      "xxsel_2di_uns",  CONST, 	vector_select_v2di_uns)
1196BU_VSX_3 (XXSEL_4SI_UNS,      "xxsel_4si_uns",  CONST, 	vector_select_v4si_uns)
1197BU_VSX_3 (XXSEL_8HI_UNS,      "xxsel_8hi_uns",  CONST, 	vector_select_v8hi_uns)
1198BU_VSX_3 (XXSEL_16QI_UNS,     "xxsel_16qi_uns", CONST, 	vector_select_v16qi_uns)
1199
1200BU_VSX_3 (VPERM_1TI,          "vperm_1ti",      CONST, 	altivec_vperm_v1ti)
1201BU_VSX_3 (VPERM_2DI,          "vperm_2di",      CONST, 	altivec_vperm_v2di)
1202BU_VSX_3 (VPERM_2DF,          "vperm_2df",      CONST, 	altivec_vperm_v2df)
1203BU_VSX_3 (VPERM_4SF,          "vperm_4sf",      CONST, 	altivec_vperm_v4sf)
1204BU_VSX_3 (VPERM_4SI,          "vperm_4si",      CONST, 	altivec_vperm_v4si)
1205BU_VSX_3 (VPERM_8HI,          "vperm_8hi",      CONST, 	altivec_vperm_v8hi)
1206BU_VSX_3 (VPERM_16QI,         "vperm_16qi",     CONST, 	altivec_vperm_v16qi)
1207BU_VSX_3 (VPERM_1TI_UNS,      "vperm_1ti_uns",  CONST, 	altivec_vperm_v1ti_uns)
1208BU_VSX_3 (VPERM_2DI_UNS,      "vperm_2di_uns",  CONST, 	altivec_vperm_v2di_uns)
1209BU_VSX_3 (VPERM_4SI_UNS,      "vperm_4si_uns",  CONST, 	altivec_vperm_v4si_uns)
1210BU_VSX_3 (VPERM_8HI_UNS,      "vperm_8hi_uns",  CONST, 	altivec_vperm_v8hi_uns)
1211BU_VSX_3 (VPERM_16QI_UNS,     "vperm_16qi_uns", CONST, 	altivec_vperm_v16qi_uns)
1212
1213BU_VSX_3 (XXPERMDI_1TI,       "xxpermdi_1ti",   CONST, 	vsx_xxpermdi_v1ti)
1214BU_VSX_3 (XXPERMDI_2DF,       "xxpermdi_2df",   CONST, 	vsx_xxpermdi_v2df)
1215BU_VSX_3 (XXPERMDI_2DI,       "xxpermdi_2di",   CONST, 	vsx_xxpermdi_v2di)
1216BU_VSX_3 (XXPERMDI_4SF,       "xxpermdi_4sf",   CONST, 	vsx_xxpermdi_v4sf)
1217BU_VSX_3 (XXPERMDI_4SI,       "xxpermdi_4si",   CONST, 	vsx_xxpermdi_v4si)
1218BU_VSX_3 (XXPERMDI_8HI,       "xxpermdi_8hi",   CONST, 	vsx_xxpermdi_v8hi)
1219BU_VSX_3 (XXPERMDI_16QI,      "xxpermdi_16qi",  CONST, 	vsx_xxpermdi_v16qi)
1220BU_VSX_3 (SET_1TI,            "set_1ti",        CONST, 	vsx_set_v1ti)
1221BU_VSX_3 (SET_2DF,            "set_2df",        CONST, 	vsx_set_v2df)
1222BU_VSX_3 (SET_2DI,            "set_2di",        CONST, 	vsx_set_v2di)
1223BU_VSX_3 (XXSLDWI_2DI,        "xxsldwi_2di",    CONST, 	vsx_xxsldwi_v2di)
1224BU_VSX_3 (XXSLDWI_2DF,        "xxsldwi_2df",    CONST, 	vsx_xxsldwi_v2df)
1225BU_VSX_3 (XXSLDWI_4SF,        "xxsldwi_4sf",    CONST, 	vsx_xxsldwi_v4sf)
1226BU_VSX_3 (XXSLDWI_4SI,        "xxsldwi_4si",    CONST, 	vsx_xxsldwi_v4si)
1227BU_VSX_3 (XXSLDWI_8HI,        "xxsldwi_8hi",    CONST, 	vsx_xxsldwi_v8hi)
1228BU_VSX_3 (XXSLDWI_16QI,       "xxsldwi_16qi",   CONST, 	vsx_xxsldwi_v16qi)
1229
1230/* 2 argument VSX builtins.  */
1231BU_VSX_2 (XVADDDP,	      "xvadddp",	FP,	addv2df3)
1232BU_VSX_2 (XVSUBDP,	      "xvsubdp",	FP,	subv2df3)
1233BU_VSX_2 (XVMULDP,	      "xvmuldp",	FP,	mulv2df3)
1234BU_VSX_2 (XVDIVDP,	      "xvdivdp",	FP,	divv2df3)
1235BU_VSX_2 (RECIP_V2DF,	      "xvrecipdivdp",	FP,	recipv2df3)
1236BU_VSX_2 (XVMINDP,	      "xvmindp",	CONST,	sminv2df3)
1237BU_VSX_2 (XVMAXDP,	      "xvmaxdp",	CONST,	smaxv2df3)
1238BU_VSX_2 (XVTDIVDP_FE,	      "xvtdivdp_fe",	CONST,	vsx_tdivv2df3_fe)
1239BU_VSX_2 (XVTDIVDP_FG,	      "xvtdivdp_fg",	CONST,	vsx_tdivv2df3_fg)
1240BU_VSX_2 (XVCMPEQDP,	      "xvcmpeqdp",	CONST,	vector_eqv2df)
1241BU_VSX_2 (XVCMPGTDP,	      "xvcmpgtdp",	CONST,	vector_gtv2df)
1242BU_VSX_2 (XVCMPGEDP,	      "xvcmpgedp",	CONST,	vector_gev2df)
1243
1244BU_VSX_2 (XVADDSP,	      "xvaddsp",	FP,	addv4sf3)
1245BU_VSX_2 (XVSUBSP,	      "xvsubsp",	FP,	subv4sf3)
1246BU_VSX_2 (XVMULSP,	      "xvmulsp",	FP,	mulv4sf3)
1247BU_VSX_2 (XVDIVSP,	      "xvdivsp",	FP,	divv4sf3)
1248BU_VSX_2 (RECIP_V4SF,	      "xvrecipdivsp",	FP,	recipv4sf3)
1249BU_VSX_2 (XVMINSP,	      "xvminsp",	CONST,	sminv4sf3)
1250BU_VSX_2 (XVMAXSP,	      "xvmaxsp",	CONST,	smaxv4sf3)
1251BU_VSX_2 (XVTDIVSP_FE,	      "xvtdivsp_fe",	CONST,	vsx_tdivv4sf3_fe)
1252BU_VSX_2 (XVTDIVSP_FG,	      "xvtdivsp_fg",	CONST,	vsx_tdivv4sf3_fg)
1253BU_VSX_2 (XVCMPEQSP,	      "xvcmpeqsp",	CONST,	vector_eqv4sf)
1254BU_VSX_2 (XVCMPGTSP,	      "xvcmpgtsp",	CONST,	vector_gtv4sf)
1255BU_VSX_2 (XVCMPGESP,	      "xvcmpgesp",	CONST,	vector_gev4sf)
1256
1257BU_VSX_2 (XSMINDP,	      "xsmindp",	CONST,	smindf3)
1258BU_VSX_2 (XSMAXDP,	      "xsmaxdp",	CONST,	smaxdf3)
1259BU_VSX_2 (XSTDIVDP_FE,	      "xstdivdp_fe",	CONST,	vsx_tdivdf3_fe)
1260BU_VSX_2 (XSTDIVDP_FG,	      "xstdivdp_fg",	CONST,	vsx_tdivdf3_fg)
1261BU_VSX_2 (CPSGNDP,	      "cpsgndp",	CONST,	vector_copysignv2df3)
1262BU_VSX_2 (CPSGNSP,	      "cpsgnsp",	CONST,	vector_copysignv4sf3)
1263
1264BU_VSX_2 (CONCAT_2DF,	      "concat_2df",	CONST,	vsx_concat_v2df)
1265BU_VSX_2 (CONCAT_2DI,	      "concat_2di",	CONST,	vsx_concat_v2di)
1266BU_VSX_2 (SPLAT_2DF,	      "splat_2df",	CONST,	vsx_splat_v2df)
1267BU_VSX_2 (SPLAT_2DI,	      "splat_2di",	CONST,	vsx_splat_v2di)
1268BU_VSX_2 (XXMRGHW_4SF,	      "xxmrghw",	CONST,	vsx_xxmrghw_v4sf)
1269BU_VSX_2 (XXMRGHW_4SI,	      "xxmrghw_4si",	CONST,	vsx_xxmrghw_v4si)
1270BU_VSX_2 (XXMRGLW_4SF,	      "xxmrglw",	CONST,	vsx_xxmrglw_v4sf)
1271BU_VSX_2 (XXMRGLW_4SI,	      "xxmrglw_4si",	CONST,	vsx_xxmrglw_v4si)
1272BU_VSX_2 (VEC_MERGEL_V2DF,    "mergel_2df",	CONST,	vsx_mergel_v2df)
1273BU_VSX_2 (VEC_MERGEL_V2DI,    "mergel_2di",	CONST,	vsx_mergel_v2di)
1274BU_VSX_2 (VEC_MERGEH_V2DF,    "mergeh_2df",	CONST,	vsx_mergeh_v2df)
1275BU_VSX_2 (VEC_MERGEH_V2DI,    "mergeh_2di",	CONST,	vsx_mergeh_v2di)
1276BU_VSX_2 (XXSPLTD_V2DF,       "xxspltd_2df",    CONST,  vsx_xxspltd_v2df)
1277BU_VSX_2 (XXSPLTD_V2DI,       "xxspltd_2di",    CONST,  vsx_xxspltd_v2di)
1278BU_VSX_2 (DIV_V2DI,           "div_2di",        CONST,  vsx_div_v2di)
1279BU_VSX_2 (UDIV_V2DI,          "udiv_2di",       CONST,  vsx_udiv_v2di)
1280BU_VSX_2 (MUL_V2DI,           "mul_2di",        CONST,  vsx_mul_v2di)
1281
1282BU_VSX_2 (XVCVSXDDP_SCALE,    "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale)
1283BU_VSX_2 (XVCVUXDDP_SCALE,    "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale)
1284BU_VSX_2 (XVCVDPSXDS_SCALE,   "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale)
1285BU_VSX_2 (XVCVDPUXDS_SCALE,   "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale)
1286
1287/* VSX abs builtin functions.  */
1288BU_VSX_A (XVABSDP,	      "xvabsdp",	CONST,	absv2df2)
1289BU_VSX_A (XVNABSDP,	      "xvnabsdp",	CONST,	vsx_nabsv2df2)
1290BU_VSX_A (XVABSSP,	      "xvabssp",	CONST,	absv4sf2)
1291BU_VSX_A (XVNABSSP,	      "xvnabssp",	CONST,	vsx_nabsv4sf2)
1292
1293/* 1 argument VSX builtin functions.  */
1294BU_VSX_1 (XVNEGDP,	      "xvnegdp",	CONST,	negv2df2)
1295BU_VSX_1 (XVSQRTDP,	      "xvsqrtdp",	CONST,	sqrtv2df2)
1296BU_VSX_1 (RSQRT_2DF,	      "xvrsqrtdp",	CONST,	rsqrtv2df2)
1297BU_VSX_1 (XVRSQRTEDP,	      "xvrsqrtedp",	CONST,	rsqrtev2df2)
1298BU_VSX_1 (XVTSQRTDP_FE,	      "xvtsqrtdp_fe",	CONST,	vsx_tsqrtv2df2_fe)
1299BU_VSX_1 (XVTSQRTDP_FG,	      "xvtsqrtdp_fg",	CONST,	vsx_tsqrtv2df2_fg)
1300BU_VSX_1 (XVREDP,	      "xvredp",		CONST,	vsx_frev2df2)
1301
1302BU_VSX_1 (XVNEGSP,	      "xvnegsp",	CONST,	negv4sf2)
1303BU_VSX_1 (XVSQRTSP,	      "xvsqrtsp",	CONST,	sqrtv4sf2)
1304BU_VSX_1 (RSQRT_4SF,          "xvrsqrtsp",	CONST,	rsqrtv4sf2)
1305BU_VSX_1 (XVRSQRTESP,	      "xvrsqrtesp",	CONST,	rsqrtev4sf2)
1306BU_VSX_1 (XVTSQRTSP_FE,	      "xvtsqrtsp_fe",	CONST,	vsx_tsqrtv4sf2_fe)
1307BU_VSX_1 (XVTSQRTSP_FG,	      "xvtsqrtsp_fg",	CONST,	vsx_tsqrtv4sf2_fg)
1308BU_VSX_1 (XVRESP,	      "xvresp",		CONST,	vsx_frev4sf2)
1309
1310BU_VSX_1 (XSCVDPSP,	      "xscvdpsp",	CONST,	vsx_xscvdpsp)
1311BU_VSX_1 (XSCVSPDP,	      "xscvspdp",	CONST,	vsx_xscvspdp)
1312BU_VSX_1 (XVCVDPSP,	      "xvcvdpsp",	CONST,	vsx_xvcvdpsp)
1313BU_VSX_1 (XVCVSPDP,	      "xvcvspdp",	CONST,	vsx_xvcvspdp)
1314BU_VSX_1 (XSTSQRTDP_FE,	      "xstsqrtdp_fe",	CONST,	vsx_tsqrtdf2_fe)
1315BU_VSX_1 (XSTSQRTDP_FG,	      "xstsqrtdp_fg",	CONST,	vsx_tsqrtdf2_fg)
1316
1317BU_VSX_1 (XVCVDPSXDS,	      "xvcvdpsxds",	CONST,	vsx_fix_truncv2dfv2di2)
1318BU_VSX_1 (XVCVDPUXDS,	      "xvcvdpuxds",	CONST,	vsx_fixuns_truncv2dfv2di2)
1319BU_VSX_1 (XVCVDPUXDS_UNS,     "xvcvdpuxds_uns",	CONST,	vsx_fixuns_truncv2dfv2di2)
1320BU_VSX_1 (XVCVSXDDP,	      "xvcvsxddp",	CONST,	vsx_floatv2div2df2)
1321BU_VSX_1 (XVCVUXDDP,	      "xvcvuxddp",	CONST,	vsx_floatunsv2div2df2)
1322BU_VSX_1 (XVCVUXDDP_UNS,       "xvcvuxddp_uns",	CONST,	vsx_floatunsv2div2df2)
1323
1324BU_VSX_1 (XVCVSPSXWS,	      "xvcvspsxws",	CONST,	vsx_fix_truncv4sfv4si2)
1325BU_VSX_1 (XVCVSPUXWS,	      "xvcvspuxws",	CONST,	vsx_fixuns_truncv4sfv4si2)
1326BU_VSX_1 (XVCVSXWSP,	      "xvcvsxwsp",	CONST,	vsx_floatv4siv4sf2)
1327BU_VSX_1 (XVCVUXWSP,	      "xvcvuxwsp",	CONST,	vsx_floatunsv4siv4sf2)
1328
1329BU_VSX_1 (XVCVDPSXWS,	      "xvcvdpsxws",	CONST,	vsx_xvcvdpsxws)
1330BU_VSX_1 (XVCVDPUXWS,	      "xvcvdpuxws",	CONST,	vsx_xvcvdpuxws)
1331BU_VSX_1 (XVCVSXWDP,	      "xvcvsxwdp",	CONST,	vsx_xvcvsxwdp)
1332BU_VSX_1 (XVCVUXWDP,	      "xvcvuxwdp",	CONST,	vsx_xvcvuxwdp)
1333BU_VSX_1 (XVRDPI,	      "xvrdpi",		CONST,	vsx_xvrdpi)
1334BU_VSX_1 (XVRDPIC,	      "xvrdpic",	CONST,	vsx_xvrdpic)
1335BU_VSX_1 (XVRDPIM,	      "xvrdpim",	CONST,	vsx_floorv2df2)
1336BU_VSX_1 (XVRDPIP,	      "xvrdpip",	CONST,	vsx_ceilv2df2)
1337BU_VSX_1 (XVRDPIZ,	      "xvrdpiz",	CONST,	vsx_btruncv2df2)
1338
1339BU_VSX_1 (XVCVSPSXDS,	      "xvcvspsxds",	CONST,	vsx_xvcvspsxds)
1340BU_VSX_1 (XVCVSPUXDS,	      "xvcvspuxds",	CONST,	vsx_xvcvspuxds)
1341BU_VSX_1 (XVCVSXDSP,	      "xvcvsxdsp",	CONST,	vsx_xvcvsxdsp)
1342BU_VSX_1 (XVCVUXDSP,	      "xvcvuxdsp",	CONST,	vsx_xvcvuxdsp)
1343BU_VSX_1 (XVRSPI,	      "xvrspi",		CONST,	vsx_xvrspi)
1344BU_VSX_1 (XVRSPIC,	      "xvrspic",	CONST,	vsx_xvrspic)
1345BU_VSX_1 (XVRSPIM,	      "xvrspim",	CONST,	vsx_floorv4sf2)
1346BU_VSX_1 (XVRSPIP,	      "xvrspip",	CONST,	vsx_ceilv4sf2)
1347BU_VSX_1 (XVRSPIZ,	      "xvrspiz",	CONST,	vsx_btruncv4sf2)
1348
1349BU_VSX_1 (XSRDPI,	      "xsrdpi",		CONST,	vsx_xsrdpi)
1350BU_VSX_1 (XSRDPIC,	      "xsrdpic",	CONST,	vsx_xsrdpic)
1351BU_VSX_1 (XSRDPIM,	      "xsrdpim",	CONST,	floordf2)
1352BU_VSX_1 (XSRDPIP,	      "xsrdpip",	CONST,	ceildf2)
1353BU_VSX_1 (XSRDPIZ,	      "xsrdpiz",	CONST,	btruncdf2)
1354
1355/* VSX predicate functions.  */
1356BU_VSX_P (XVCMPEQSP_P,	      "xvcmpeqsp_p",	CONST,	vector_eq_v4sf_p)
1357BU_VSX_P (XVCMPGESP_P,	      "xvcmpgesp_p",	CONST,	vector_ge_v4sf_p)
1358BU_VSX_P (XVCMPGTSP_P,	      "xvcmpgtsp_p",	CONST,	vector_gt_v4sf_p)
1359BU_VSX_P (XVCMPEQDP_P,	      "xvcmpeqdp_p",	CONST,	vector_eq_v2df_p)
1360BU_VSX_P (XVCMPGEDP_P,	      "xvcmpgedp_p",	CONST,	vector_ge_v2df_p)
1361BU_VSX_P (XVCMPGTDP_P,	      "xvcmpgtdp_p",	CONST,	vector_gt_v2df_p)
1362
1363/* VSX builtins that are handled as special cases.  */
1364BU_VSX_X (LXSDX,	      "lxsdx",		MEM)
1365BU_VSX_X (LXVD2X_V1TI,	      "lxvd2x_v1ti",	MEM)
1366BU_VSX_X (LXVD2X_V2DF,	      "lxvd2x_v2df",	MEM)
1367BU_VSX_X (LXVD2X_V2DI,	      "lxvd2x_v2di",	MEM)
1368BU_VSX_X (LXVDSX,	      "lxvdsx",		MEM)
1369BU_VSX_X (LXVW4X_V4SF,	      "lxvw4x_v4sf",	MEM)
1370BU_VSX_X (LXVW4X_V4SI,        "lxvw4x_v4si",	MEM)
1371BU_VSX_X (LXVW4X_V8HI,        "lxvw4x_v8hi",	MEM)
1372BU_VSX_X (LXVW4X_V16QI,	      "lxvw4x_v16qi",	MEM)
1373BU_VSX_X (STXSDX,	      "stxsdx",		MEM)
1374BU_VSX_X (STXVD2X_V1TI,	      "stxvd2x_v1ti",	MEM)
1375BU_VSX_X (STXVD2X_V2DF,	      "stxvd2x_v2df",	MEM)
1376BU_VSX_X (STXVD2X_V2DI,	      "stxvd2x_v2di",	MEM)
1377BU_VSX_X (STXVW4X_V4SF,	      "stxvw4x_v4sf",	MEM)
1378BU_VSX_X (STXVW4X_V4SI,	      "stxvw4x_v4si",	MEM)
1379BU_VSX_X (STXVW4X_V8HI,	      "stxvw4x_v8hi",	MEM)
1380BU_VSX_X (STXVW4X_V16QI,      "stxvw4x_v16qi",	MEM)
1381BU_VSX_X (XSABSDP,	      "xsabsdp",	CONST)
1382BU_VSX_X (XSADDDP,	      "xsadddp",	FP)
1383BU_VSX_X (XSCMPODP,	      "xscmpodp",	FP)
1384BU_VSX_X (XSCMPUDP,	      "xscmpudp",	FP)
1385BU_VSX_X (XSCVDPSXDS,	      "xscvdpsxds",	FP)
1386BU_VSX_X (XSCVDPSXWS,	      "xscvdpsxws",	FP)
1387BU_VSX_X (XSCVDPUXDS,	      "xscvdpuxds",	FP)
1388BU_VSX_X (XSCVDPUXWS,	      "xscvdpuxws",	FP)
1389BU_VSX_X (XSCVSXDDP,	      "xscvsxddp",	FP)
1390BU_VSX_X (XSCVUXDDP,	      "xscvuxddp",	FP)
1391BU_VSX_X (XSDIVDP,	      "xsdivdp",	FP)
1392BU_VSX_X (XSMADDADP,	      "xsmaddadp",	FP)
1393BU_VSX_X (XSMADDMDP,	      "xsmaddmdp",	FP)
1394BU_VSX_X (XSMOVDP,	      "xsmovdp",	FP)
1395BU_VSX_X (XSMSUBADP,	      "xsmsubadp",	FP)
1396BU_VSX_X (XSMSUBMDP,	      "xsmsubmdp",	FP)
1397BU_VSX_X (XSMULDP,	      "xsmuldp",	FP)
1398BU_VSX_X (XSNABSDP,	      "xsnabsdp",	FP)
1399BU_VSX_X (XSNEGDP,	      "xsnegdp",	FP)
1400BU_VSX_X (XSNMADDADP,	      "xsnmaddadp",	FP)
1401BU_VSX_X (XSNMADDMDP,	      "xsnmaddmdp",	FP)
1402BU_VSX_X (XSNMSUBADP,	      "xsnmsubadp",	FP)
1403BU_VSX_X (XSNMSUBMDP,	      "xsnmsubmdp",	FP)
1404BU_VSX_X (XSSUBDP,	      "xssubdp",	FP)
1405BU_VSX_X (VEC_INIT_V1TI,      "vec_init_v1ti",	CONST)
1406BU_VSX_X (VEC_INIT_V2DF,      "vec_init_v2df",	CONST)
1407BU_VSX_X (VEC_INIT_V2DI,      "vec_init_v2di",	CONST)
1408BU_VSX_X (VEC_SET_V1TI,	      "vec_set_v1ti",	CONST)
1409BU_VSX_X (VEC_SET_V2DF,	      "vec_set_v2df",	CONST)
1410BU_VSX_X (VEC_SET_V2DI,	      "vec_set_v2di",	CONST)
1411BU_VSX_X (VEC_EXT_V1TI,	      "vec_ext_v1ti",	CONST)
1412BU_VSX_X (VEC_EXT_V2DF,	      "vec_ext_v2df",	CONST)
1413BU_VSX_X (VEC_EXT_V2DI,	      "vec_ext_v2di",	CONST)
1414
1415/* VSX overloaded builtins, add the overloaded functions not present in
1416   Altivec.  */
1417
1418/* 3 argument VSX overloaded builtins.  */
1419BU_VSX_OVERLOAD_3  (MSUB,     "msub")
1420BU_VSX_OVERLOAD_3  (NMADD,    "nmadd")
1421BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi")
1422BU_VSX_OVERLOAD_3V (XXSLDWI,  "xxsldwi")
1423
1424/* 2 argument VSX overloaded builtin functions.  */
1425BU_VSX_OVERLOAD_2 (MUL,	     "mul")
1426BU_VSX_OVERLOAD_2 (DIV,	     "div")
1427BU_VSX_OVERLOAD_2 (XXMRGHW,  "xxmrghw")
1428BU_VSX_OVERLOAD_2 (XXMRGLW,  "xxmrglw")
1429BU_VSX_OVERLOAD_2 (XXSPLTD,  "xxspltd")
1430BU_VSX_OVERLOAD_2 (XXSPLTW,  "xxspltw")
1431
1432/* VSX builtins that are handled as special cases.  */
1433BU_VSX_OVERLOAD_X (LD,	     "ld")
1434BU_VSX_OVERLOAD_X (ST,	     "st")
1435
1436/* 1 argument VSX instructions added in ISA 2.07.  */
1437BU_P8V_VSX_1 (XSCVSPDPN,      "xscvspdpn",	CONST,	vsx_xscvspdpn)
1438BU_P8V_VSX_1 (XSCVDPSPN,      "xscvdpspn",	CONST,	vsx_xscvdpspn)
1439
1440/* 1 argument altivec instructions added in ISA 2.07.  */
1441BU_P8V_AV_1 (ABS_V2DI,	      "abs_v2di",	CONST,	absv2di2)
1442BU_P8V_AV_1 (VUPKHSW,	      "vupkhsw",	CONST,	altivec_vupkhsw)
1443BU_P8V_AV_1 (VUPKLSW,	      "vupklsw",	CONST,	altivec_vupklsw)
1444BU_P8V_AV_1 (VCLZB,	      "vclzb",		CONST,  clzv16qi2)
1445BU_P8V_AV_1 (VCLZH,	      "vclzh",		CONST,  clzv8hi2)
1446BU_P8V_AV_1 (VCLZW,	      "vclzw",		CONST,  clzv4si2)
1447BU_P8V_AV_1 (VCLZD,	      "vclzd",		CONST,  clzv2di2)
1448BU_P8V_AV_1 (VPOPCNTB,	      "vpopcntb",	CONST,  popcountv16qi2)
1449BU_P8V_AV_1 (VPOPCNTH,	      "vpopcnth",	CONST,  popcountv8hi2)
1450BU_P8V_AV_1 (VPOPCNTW,	      "vpopcntw",	CONST,  popcountv4si2)
1451BU_P8V_AV_1 (VPOPCNTD,	      "vpopcntd",	CONST,  popcountv2di2)
1452BU_P8V_AV_1 (VGBBD,	      "vgbbd",		CONST,  p8v_vgbbd)
1453
1454/* 2 argument altivec instructions added in ISA 2.07.  */
1455BU_P8V_AV_2 (VADDCUQ,		"vaddcuq",	CONST,	altivec_vaddcuq)
1456BU_P8V_AV_2 (VADDUDM,		"vaddudm",	CONST,	addv2di3)
1457BU_P8V_AV_2 (VADDUQM,		"vadduqm",	CONST,	altivec_vadduqm)
1458BU_P8V_AV_2 (VMINSD,		"vminsd",	CONST,	sminv2di3)
1459BU_P8V_AV_2 (VMAXSD,		"vmaxsd",	CONST,	smaxv2di3)
1460BU_P8V_AV_2 (VMINUD,		"vminud",	CONST,	uminv2di3)
1461BU_P8V_AV_2 (VMAXUD,		"vmaxud",	CONST,	umaxv2di3)
1462BU_P8V_AV_2 (VMRGEW,		"vmrgew",	CONST,	p8_vmrgew)
1463BU_P8V_AV_2 (VMRGOW,		"vmrgow",	CONST,	p8_vmrgow)
1464BU_P8V_AV_2 (VBPERMQ,		"vbpermq",	CONST,	altivec_vbpermq)
1465BU_P8V_AV_2 (VPKUDUM,		"vpkudum",	CONST,	altivec_vpkudum)
1466BU_P8V_AV_2 (VPKSDSS,		"vpksdss",	CONST,	altivec_vpksdss)
1467BU_P8V_AV_2 (VPKUDUS,		"vpkudus",	CONST,	altivec_vpkudus)
1468BU_P8V_AV_2 (VPKSDUS,		"vpksdus",	CONST,	altivec_vpksdus)
1469BU_P8V_AV_2 (VRLD,		"vrld",		CONST,	vrotlv2di3)
1470BU_P8V_AV_2 (VSLD,		"vsld",		CONST,	vashlv2di3)
1471BU_P8V_AV_2 (VSRD,		"vsrd",		CONST,	vlshrv2di3)
1472BU_P8V_AV_2 (VSRAD,		"vsrad",	CONST,	vashrv2di3)
1473BU_P8V_AV_2 (VSUBCUQ,		"vsubcuq",	CONST,	altivec_vsubcuq)
1474BU_P8V_AV_2 (VSUBUDM,		"vsubudm",	CONST,	subv2di3)
1475BU_P8V_AV_2 (VSUBUQM,		"vsubuqm",	CONST,	altivec_vsubuqm)
1476
1477BU_P8V_AV_2 (EQV_V16QI,		"eqv_v16qi",	CONST,	eqvv16qi3)
1478BU_P8V_AV_2 (EQV_V8HI,		"eqv_v8hi",	CONST,	eqvv8hi3)
1479BU_P8V_AV_2 (EQV_V4SI,		"eqv_v4si",	CONST,	eqvv4si3)
1480BU_P8V_AV_2 (EQV_V2DI,		"eqv_v2di",	CONST,	eqvv2di3)
1481BU_P8V_AV_2 (EQV_V1TI,		"eqv_v1ti",	CONST,	eqvv1ti3)
1482BU_P8V_AV_2 (EQV_V4SF,		"eqv_v4sf",	CONST,	eqvv4sf3)
1483BU_P8V_AV_2 (EQV_V2DF,		"eqv_v2df",	CONST,	eqvv2df3)
1484
1485BU_P8V_AV_2 (NAND_V16QI,	"nand_v16qi",	CONST,	nandv16qi3)
1486BU_P8V_AV_2 (NAND_V8HI,		"nand_v8hi",	CONST,	nandv8hi3)
1487BU_P8V_AV_2 (NAND_V4SI,		"nand_v4si",	CONST,	nandv4si3)
1488BU_P8V_AV_2 (NAND_V2DI,		"nand_v2di",	CONST,	nandv2di3)
1489BU_P8V_AV_2 (NAND_V1TI,		"nand_v1ti",	CONST,	nandv1ti3)
1490BU_P8V_AV_2 (NAND_V4SF,		"nand_v4sf",	CONST,	nandv4sf3)
1491BU_P8V_AV_2 (NAND_V2DF,		"nand_v2df",	CONST,	nandv2df3)
1492
1493BU_P8V_AV_2 (ORC_V16QI,		"orc_v16qi",	CONST,	orcv16qi3)
1494BU_P8V_AV_2 (ORC_V8HI,		"orc_v8hi",	CONST,	orcv8hi3)
1495BU_P8V_AV_2 (ORC_V4SI,		"orc_v4si",	CONST,	orcv4si3)
1496BU_P8V_AV_2 (ORC_V2DI,		"orc_v2di",	CONST,	orcv2di3)
1497BU_P8V_AV_2 (ORC_V1TI,		"orc_v1ti",	CONST,	orcv1ti3)
1498BU_P8V_AV_2 (ORC_V4SF,		"orc_v4sf",	CONST,	orcv4sf3)
1499BU_P8V_AV_2 (ORC_V2DF,		"orc_v2df",	CONST,	orcv2df3)
1500
1501/* 3 argument altivec instructions added in ISA 2.07.  */
1502BU_P8V_AV_3 (VADDEUQM,		"vaddeuqm",	CONST,	altivec_vaddeuqm)
1503BU_P8V_AV_3 (VADDECUQ,		"vaddecuq",	CONST,	altivec_vaddecuq)
1504BU_P8V_AV_3 (VSUBEUQM,		"vsubeuqm",	CONST,	altivec_vsubeuqm)
1505BU_P8V_AV_3 (VSUBECUQ,		"vsubecuq",	CONST,	altivec_vsubecuq)
1506
1507/* Vector comparison instructions added in ISA 2.07.  */
1508BU_P8V_AV_2 (VCMPEQUD,		"vcmpequd",	CONST,	vector_eqv2di)
1509BU_P8V_AV_2 (VCMPGTSD,		"vcmpgtsd",	CONST,	vector_gtv2di)
1510BU_P8V_AV_2 (VCMPGTUD,		"vcmpgtud",	CONST,	vector_gtuv2di)
1511
1512/* Vector comparison predicate instructions added in ISA 2.07.  */
1513BU_P8V_AV_P (VCMPEQUD_P,	"vcmpequd_p",	CONST,	vector_eq_v2di_p)
1514BU_P8V_AV_P (VCMPGTSD_P,	"vcmpgtsd_p",	CONST,	vector_gt_v2di_p)
1515BU_P8V_AV_P (VCMPGTUD_P,	"vcmpgtud_p",	CONST,	vector_gtu_v2di_p)
1516
1517/* ISA 2.07 vector overloaded 1 argument functions.  */
1518BU_P8V_OVERLOAD_1 (VUPKHSW,	"vupkhsw")
1519BU_P8V_OVERLOAD_1 (VUPKLSW,	"vupklsw")
1520BU_P8V_OVERLOAD_1 (VCLZ,	"vclz")
1521BU_P8V_OVERLOAD_1 (VCLZB,	"vclzb")
1522BU_P8V_OVERLOAD_1 (VCLZH,	"vclzh")
1523BU_P8V_OVERLOAD_1 (VCLZW,	"vclzw")
1524BU_P8V_OVERLOAD_1 (VCLZD,	"vclzd")
1525BU_P8V_OVERLOAD_1 (VPOPCNT,	"vpopcnt")
1526BU_P8V_OVERLOAD_1 (VPOPCNTB,	"vpopcntb")
1527BU_P8V_OVERLOAD_1 (VPOPCNTH,	"vpopcnth")
1528BU_P8V_OVERLOAD_1 (VPOPCNTW,	"vpopcntw")
1529BU_P8V_OVERLOAD_1 (VPOPCNTD,	"vpopcntd")
1530BU_P8V_OVERLOAD_1 (VGBBD,	"vgbbd")
1531
1532/* ISA 2.07 vector overloaded 2 argument functions.  */
1533BU_P8V_OVERLOAD_2 (EQV,		"eqv")
1534BU_P8V_OVERLOAD_2 (NAND,	"nand")
1535BU_P8V_OVERLOAD_2 (ORC,		"orc")
1536BU_P8V_OVERLOAD_2 (VADDCUQ,	"vaddcuq")
1537BU_P8V_OVERLOAD_2 (VADDUDM,	"vaddudm")
1538BU_P8V_OVERLOAD_2 (VADDUQM,	"vadduqm")
1539BU_P8V_OVERLOAD_2 (VBPERMQ,	"vbpermq")
1540BU_P8V_OVERLOAD_2 (VMAXSD,	"vmaxsd")
1541BU_P8V_OVERLOAD_2 (VMAXUD,	"vmaxud")
1542BU_P8V_OVERLOAD_2 (VMINSD,	"vminsd")
1543BU_P8V_OVERLOAD_2 (VMINUD,	"vminud")
1544BU_P8V_OVERLOAD_2 (VMRGEW,	"vmrgew")
1545BU_P8V_OVERLOAD_2 (VMRGOW,	"vmrgow")
1546BU_P8V_OVERLOAD_2 (VPKSDSS,	"vpksdss")
1547BU_P8V_OVERLOAD_2 (VPKSDUS,	"vpksdus")
1548BU_P8V_OVERLOAD_2 (VPKUDUM,	"vpkudum")
1549BU_P8V_OVERLOAD_2 (VPKUDUS,	"vpkudus")
1550BU_P8V_OVERLOAD_2 (VRLD,	"vrld")
1551BU_P8V_OVERLOAD_2 (VSLD,	"vsld")
1552BU_P8V_OVERLOAD_2 (VSRAD,	"vsrad")
1553BU_P8V_OVERLOAD_2 (VSRD,	"vsrd")
1554BU_P8V_OVERLOAD_2 (VSUBCUQ,	"vsubcuq")
1555BU_P8V_OVERLOAD_2 (VSUBUDM,	"vsubudm")
1556BU_P8V_OVERLOAD_2 (VSUBUQM,	"vsubuqm")
1557
1558/* ISA 2.07 vector overloaded 3 argument functions.  */
1559BU_P8V_OVERLOAD_3 (VADDECUQ,	"vaddecuq")
1560BU_P8V_OVERLOAD_3 (VADDEUQM,	"vaddeuqm")
1561BU_P8V_OVERLOAD_3 (VSUBECUQ,	"vsubecuq")
1562BU_P8V_OVERLOAD_3 (VSUBEUQM,	"vsubeuqm")
1563
1564
1565/* 2 argument extended divide functions added in ISA 2.06.  */
1566BU_P7_MISC_2 (DIVWE,		"divwe",	CONST,	dive_si)
1567BU_P7_MISC_2 (DIVWEO,		"divweo",	CONST,	diveo_si)
1568BU_P7_MISC_2 (DIVWEU,		"divweu",	CONST,	diveu_si)
1569BU_P7_MISC_2 (DIVWEUO,		"divweuo",	CONST,	diveuo_si)
1570BU_P7_MISC_2 (DIVDE,		"divde",	CONST,	dive_di)
1571BU_P7_MISC_2 (DIVDEO,		"divdeo",	CONST,	diveo_di)
1572BU_P7_MISC_2 (DIVDEU,		"divdeu",	CONST,	diveu_di)
1573BU_P7_MISC_2 (DIVDEUO,		"divdeuo",	CONST,	diveuo_di)
1574
1575/* 1 argument DFP (decimal floating point) functions added in ISA 2.05.  */
1576BU_DFP_MISC_1 (DXEX,		"dxex",		CONST,	dfp_dxex_dd)
1577BU_DFP_MISC_1 (DXEXQ,		"dxexq",	CONST,	dfp_dxex_td)
1578
1579/* 2 argument DFP (decimal floating point) functions added in ISA 2.05.  */
1580BU_DFP_MISC_2 (DDEDPD,		"ddedpd",	CONST,	dfp_ddedpd_dd)
1581BU_DFP_MISC_2 (DDEDPDQ,		"ddedpdq",	CONST,	dfp_ddedpd_td)
1582BU_DFP_MISC_2 (DENBCD,		"denbcd",	CONST,	dfp_denbcd_dd)
1583BU_DFP_MISC_2 (DENBCDQ,		"denbcdq",	CONST,	dfp_denbcd_td)
1584BU_DFP_MISC_2 (DIEX,		"diex",		CONST,	dfp_diex_dd)
1585BU_DFP_MISC_2 (DIEXQ,		"diexq",	CONST,	dfp_diex_td)
1586BU_DFP_MISC_2 (DSCLI,		"dscli",	CONST,	dfp_dscli_dd)
1587BU_DFP_MISC_2 (DSCLIQ,		"dscliq",	CONST,	dfp_dscli_td)
1588BU_DFP_MISC_2 (DSCRI,		"dscri",	CONST,	dfp_dscri_dd)
1589BU_DFP_MISC_2 (DSCRIQ,		"dscriq",	CONST,	dfp_dscri_td)
1590
1591/* 1 argument BCD functions added in ISA 2.06.  */
1592BU_P7_MISC_1 (CDTBCD,		"cdtbcd",	CONST,	cdtbcd)
1593BU_P7_MISC_1 (CBCDTD,		"cbcdtd",	CONST,	cbcdtd)
1594
1595/* 2 argument BCD functions added in ISA 2.06.  */
1596BU_P7_MISC_2 (ADDG6S,		"addg6s",	CONST,	addg6s)
1597
1598/* 3 argument BCD functions added in ISA 2.07.  */
1599BU_P8V_MISC_3 (BCDADD,		"bcdadd",	CONST,	bcdadd)
1600BU_P8V_MISC_3 (BCDADD_LT,	"bcdadd_lt",	CONST,	bcdadd_lt)
1601BU_P8V_MISC_3 (BCDADD_EQ,	"bcdadd_eq",	CONST,	bcdadd_eq)
1602BU_P8V_MISC_3 (BCDADD_GT,	"bcdadd_gt",	CONST,	bcdadd_gt)
1603BU_P8V_MISC_3 (BCDADD_OV,	"bcdadd_ov",	CONST,	bcdadd_unordered)
1604BU_P8V_MISC_3 (BCDSUB,		"bcdsub",	CONST,	bcdsub)
1605BU_P8V_MISC_3 (BCDSUB_LT,	"bcdsub_lt",	CONST,	bcdsub_lt)
1606BU_P8V_MISC_3 (BCDSUB_EQ,	"bcdsub_eq",	CONST,	bcdsub_eq)
1607BU_P8V_MISC_3 (BCDSUB_GT,	"bcdsub_gt",	CONST,	bcdsub_gt)
1608BU_P8V_MISC_3 (BCDSUB_OV,	"bcdsub_ov",	CONST,	bcdsub_unordered)
1609
1610/* 2 argument pack/unpack 128-bit floating point types.  */
1611BU_DFP_MISC_2 (PACK_TD,		"pack_dec128",		CONST,	packtd)
1612BU_DFP_MISC_2 (UNPACK_TD,	"unpack_dec128",	CONST,	unpacktd)
1613
1614BU_LDBL128_2 (PACK_TF,		"pack_longdouble",	CONST,	packtf)
1615BU_LDBL128_2 (UNPACK_TF,	"unpack_longdouble",	CONST,	unpacktf)
1616
1617BU_P7_MISC_2 (PACK_V1TI,	"pack_vector_int128",	CONST,	packv1ti)
1618BU_P7_MISC_2 (UNPACK_V1TI,	"unpack_vector_int128",	CONST,	unpackv1ti)
1619
1620
1621/* 1 argument crypto functions.  */
1622BU_CRYPTO_1 (VSBOX,		"vsbox",	  CONST, crypto_vsbox)
1623
1624/* 2 argument crypto functions.  */
1625BU_CRYPTO_2 (VCIPHER,		"vcipher",	  CONST, crypto_vcipher)
1626BU_CRYPTO_2 (VCIPHERLAST,	"vcipherlast",	  CONST, crypto_vcipherlast)
1627BU_CRYPTO_2 (VNCIPHER,		"vncipher",	  CONST, crypto_vncipher)
1628BU_CRYPTO_2 (VNCIPHERLAST,	"vncipherlast",	  CONST, crypto_vncipherlast)
1629BU_CRYPTO_2A (VPMSUMB,		"vpmsumb",	  CONST, crypto_vpmsumb)
1630BU_CRYPTO_2A (VPMSUMH,		"vpmsumh",	  CONST, crypto_vpmsumh)
1631BU_CRYPTO_2A (VPMSUMW,		"vpmsumw",	  CONST, crypto_vpmsumw)
1632BU_CRYPTO_2A (VPMSUMD,		"vpmsumd",	  CONST, crypto_vpmsumd)
1633
1634/* 3 argument crypto functions.  */
1635BU_CRYPTO_3A (VPERMXOR_V2DI,	"vpermxor_v2di",  CONST, crypto_vpermxor_v2di)
1636BU_CRYPTO_3A (VPERMXOR_V4SI,	"vpermxor_v4si",  CONST, crypto_vpermxor_v4si)
1637BU_CRYPTO_3A (VPERMXOR_V8HI,	"vpermxor_v8hi",  CONST, crypto_vpermxor_v8hi)
1638BU_CRYPTO_3A (VPERMXOR_V16QI,	"vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
1639BU_CRYPTO_3 (VSHASIGMAW,	"vshasigmaw",	  CONST, crypto_vshasigmaw)
1640BU_CRYPTO_3 (VSHASIGMAD,	"vshasigmad",	  CONST, crypto_vshasigmad)
1641
1642/* 2 argument crypto overloaded functions.  */
1643BU_CRYPTO_OVERLOAD_2A (VPMSUM,	 "vpmsum")
1644
1645/* 3 argument crypto overloaded functions.  */
1646BU_CRYPTO_OVERLOAD_3A (VPERMXOR,	 "vpermxor")
1647BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
1648
1649
1650/* HTM functions.  */
1651BU_HTM_1  (TABORT,	"tabort",	CR,	tabort)
1652BU_HTM_3  (TABORTDC,	"tabortdc",	CR,	tabortdc)
1653BU_HTM_3  (TABORTDCI,	"tabortdci",	CR,	tabortdci)
1654BU_HTM_3  (TABORTWC,	"tabortwc",	CR,	tabortwc)
1655BU_HTM_3  (TABORTWCI,	"tabortwci",	CR,	tabortwci)
1656BU_HTM_1  (TBEGIN,	"tbegin",	CR,	tbegin)
1657BU_HTM_0  (TCHECK,	"tcheck",	CR,	tcheck)
1658BU_HTM_1  (TEND,	"tend",		CR,	tend)
1659BU_HTM_0  (TENDALL,	"tendall",	CR,	tend)
1660BU_HTM_0  (TRECHKPT,	"trechkpt",	CR,	trechkpt)
1661BU_HTM_1  (TRECLAIM,	"treclaim",	CR,	treclaim)
1662BU_HTM_0  (TRESUME,	"tresume",	CR,	tsr)
1663BU_HTM_0  (TSUSPEND,	"tsuspend",	CR,	tsr)
1664BU_HTM_1  (TSR,		"tsr",		CR,	tsr)
1665BU_HTM_0  (TTEST,	"ttest",	CR,	ttest)
1666
1667BU_HTM_0  (GET_TFHAR,	"get_tfhar",	SPR,	nothing)
1668BU_HTM_V1 (SET_TFHAR,	"set_tfhar",	SPR,	nothing)
1669BU_HTM_0  (GET_TFIAR,	"get_tfiar",	SPR,	nothing)
1670BU_HTM_V1 (SET_TFIAR,	"set_tfiar",	SPR,	nothing)
1671BU_HTM_0  (GET_TEXASR,	"get_texasr",	SPR,	nothing)
1672BU_HTM_V1 (SET_TEXASR,	"set_texasr",	SPR,	nothing)
1673BU_HTM_0  (GET_TEXASRU,	"get_texasru",	SPR,	nothing)
1674BU_HTM_V1 (SET_TEXASRU,	"set_texasru",	SPR,	nothing)
1675
1676
1677/* 3 argument paired floating point builtins.  */
1678BU_PAIRED_3 (MSUB,            "msub",           FP, 	fmsv2sf4)
1679BU_PAIRED_3 (MADD,            "madd",           FP, 	fmav2sf4)
1680BU_PAIRED_3 (MADDS0,          "madds0",         FP, 	paired_madds0)
1681BU_PAIRED_3 (MADDS1,          "madds1",         FP, 	paired_madds1)
1682BU_PAIRED_3 (NMSUB,           "nmsub",          FP, 	nfmsv2sf4)
1683BU_PAIRED_3 (NMADD,           "nmadd",          FP, 	nfmav2sf4)
1684BU_PAIRED_3 (SUM0,            "sum0",           FP, 	paired_sum0)
1685BU_PAIRED_3 (SUM1,            "sum1",           FP, 	paired_sum1)
1686BU_PAIRED_3 (SELV2SF4,        "selv2sf4",       CONST, 	selv2sf4)
1687
1688/* 2 argument paired floating point builtins.  */
1689BU_PAIRED_2 (DIVV2SF3,	      "divv2sf3",	FP,	paired_divv2sf3)
1690BU_PAIRED_2 (ADDV2SF3,	      "addv2sf3",	FP,	paired_addv2sf3)
1691BU_PAIRED_2 (SUBV2SF3,	      "subv2sf3",	FP,	paired_subv2sf3)
1692BU_PAIRED_2 (MULV2SF3,	      "mulv2sf3",	FP,	paired_mulv2sf3)
1693BU_PAIRED_2 (MULS0,	      "muls0",		FP,	paired_muls0)
1694BU_PAIRED_2 (MULS1,	      "muls1",		FP,	paired_muls1)
1695BU_PAIRED_2 (MERGE00,	      "merge00",	CONST,	paired_merge00)
1696BU_PAIRED_2 (MERGE01,	      "merge01",	CONST,	paired_merge01)
1697BU_PAIRED_2 (MERGE10,	      "merge10",	CONST,	paired_merge10)
1698BU_PAIRED_2 (MERGE11,	      "merge11",	CONST,	paired_merge11)
1699
1700/* 1 argument paired floating point builtin functions.  */
1701BU_PAIRED_1 (ABSV2SF2,	      "absv2sf2",	CONST,	paired_absv2sf2)
1702BU_PAIRED_1 (NABSV2SF2,	      "nabsv2sf2",	CONST,	nabsv2sf2)
1703BU_PAIRED_1 (NEGV2SF2,	      "negv2sf2",	CONST,	paired_negv2sf2)
1704BU_PAIRED_1 (SQRTV2SF2,	      "sqrtv2sf2",	FP,	sqrtv2sf2)
1705BU_PAIRED_1 (RESV2SF,	      "resv2sf2",	FP,	resv2sf2)
1706
1707/* PAIRED builtins that are handled as special cases.  */
1708BU_PAIRED_X (STX,	      "stx",		MISC)
1709BU_PAIRED_X (LX,	      "lx",		MISC)
1710
1711/* Paired predicates.  */
1712BU_PAIRED_P (CMPU0,	"cmpu0",	CONST,	paired_cmpu0)
1713BU_PAIRED_P (CMPU1,	"cmpu1",	CONST,	paired_cmpu1)
1714
1715/* PowerPC E500 builtins (SPE).  */
1716
1717BU_SPE_2 (EVADDW,	"evaddw",	MISC,	addv2si3)
1718BU_SPE_2 (EVAND,	"evand",	MISC,	andv2si3)
1719BU_SPE_2 (EVANDC,	"evandc",	MISC,	spe_evandc)
1720BU_SPE_2 (EVDIVWS,	"evdivws",	MISC,	divv2si3)
1721BU_SPE_2 (EVDIVWU,	"evdivwu",	MISC,	spe_evdivwu)
1722BU_SPE_2 (EVEQV,	"eveqv",	MISC,	spe_eveqv)
1723BU_SPE_2 (EVFSADD,	"evfsadd",	MISC,	spe_evfsadd)
1724BU_SPE_2 (EVFSDIV,	"evfsdiv",	MISC,	spe_evfsdiv)
1725BU_SPE_2 (EVFSMUL,	"evfsmul",	MISC,	spe_evfsmul)
1726BU_SPE_2 (EVFSSUB,	"evfssub",	MISC,	spe_evfssub)
1727BU_SPE_2 (EVMERGEHI,	"evmergehi",	MISC,	spe_evmergehi)
1728BU_SPE_2 (EVMERGEHILO,	"evmergehilo",	MISC,	spe_evmergehilo)
1729BU_SPE_2 (EVMERGELO,	"evmergelo",	MISC,	spe_evmergelo)
1730BU_SPE_2 (EVMERGELOHI,	"evmergelohi",	MISC,	spe_evmergelohi)
1731BU_SPE_2 (EVMHEGSMFAA,	"evmhegsmfaa",	MISC,	spe_evmhegsmfaa)
1732BU_SPE_2 (EVMHEGSMFAN,	"evmhegsmfan",	MISC,	spe_evmhegsmfan)
1733BU_SPE_2 (EVMHEGSMIAA,	"evmhegsmiaa",	MISC,	spe_evmhegsmiaa)
1734BU_SPE_2 (EVMHEGSMIAN,	"evmhegsmian",	MISC,	spe_evmhegsmian)
1735BU_SPE_2 (EVMHEGUMIAA,	"evmhegumiaa",	MISC,	spe_evmhegumiaa)
1736BU_SPE_2 (EVMHEGUMIAN,	"evmhegumian",	MISC,	spe_evmhegumian)
1737BU_SPE_2 (EVMHESMF,	"evmhesmf",	MISC,	spe_evmhesmf)
1738BU_SPE_2 (EVMHESMFA,	"evmhesmfa",	MISC,	spe_evmhesmfa)
1739BU_SPE_2 (EVMHESMFAAW,	"evmhesmfaaw",	MISC,	spe_evmhesmfaaw)
1740BU_SPE_2 (EVMHESMFANW,	"evmhesmfanw",	MISC,	spe_evmhesmfanw)
1741BU_SPE_2 (EVMHESMI,	"evmhesmi",	MISC,	spe_evmhesmi)
1742BU_SPE_2 (EVMHESMIA,	"evmhesmia",	MISC,	spe_evmhesmia)
1743BU_SPE_2 (EVMHESMIAAW,	"evmhesmiaaw",	MISC,	spe_evmhesmiaaw)
1744BU_SPE_2 (EVMHESMIANW,	"evmhesmianw",	MISC,	spe_evmhesmianw)
1745BU_SPE_2 (EVMHESSF,	"evmhessf",	MISC,	spe_evmhessf)
1746BU_SPE_2 (EVMHESSFA,	"evmhessfa",	MISC,	spe_evmhessfa)
1747BU_SPE_2 (EVMHESSFAAW,	"evmhessfaaw",	MISC,	spe_evmhessfaaw)
1748BU_SPE_2 (EVMHESSFANW,	"evmhessfanw",	MISC,	spe_evmhessfanw)
1749BU_SPE_2 (EVMHESSIAAW,	"evmhessiaaw",	MISC,	spe_evmhessiaaw)
1750BU_SPE_2 (EVMHESSIANW,	"evmhessianw",	MISC,	spe_evmhessianw)
1751BU_SPE_2 (EVMHEUMI,	"evmheumi",	MISC,	spe_evmheumi)
1752BU_SPE_2 (EVMHEUMIA,	"evmheumia",	MISC,	spe_evmheumia)
1753BU_SPE_2 (EVMHEUMIAAW,	"evmheumiaaw",	MISC,	spe_evmheumiaaw)
1754BU_SPE_2 (EVMHEUMIANW,	"evmheumianw",	MISC,	spe_evmheumianw)
1755BU_SPE_2 (EVMHEUSIAAW,	"evmheusiaaw",	MISC,	spe_evmheusiaaw)
1756BU_SPE_2 (EVMHEUSIANW,	"evmheusianw",	MISC,	spe_evmheusianw)
1757BU_SPE_2 (EVMHOGSMFAA,	"evmhogsmfaa",	MISC,	spe_evmhogsmfaa)
1758BU_SPE_2 (EVMHOGSMFAN,	"evmhogsmfan",	MISC,	spe_evmhogsmfan)
1759BU_SPE_2 (EVMHOGSMIAA,	"evmhogsmiaa",	MISC,	spe_evmhogsmiaa)
1760BU_SPE_2 (EVMHOGSMIAN,	"evmhogsmian",	MISC,	spe_evmhogsmian)
1761BU_SPE_2 (EVMHOGUMIAA,	"evmhogumiaa",	MISC,	spe_evmhogumiaa)
1762BU_SPE_2 (EVMHOGUMIAN,	"evmhogumian",	MISC,	spe_evmhogumian)
1763BU_SPE_2 (EVMHOSMF,	"evmhosmf",	MISC,	spe_evmhosmf)
1764BU_SPE_2 (EVMHOSMFA,	"evmhosmfa",	MISC,	spe_evmhosmfa)
1765BU_SPE_2 (EVMHOSMFAAW,	"evmhosmfaaw",	MISC,	spe_evmhosmfaaw)
1766BU_SPE_2 (EVMHOSMFANW,	"evmhosmfanw",	MISC,	spe_evmhosmfanw)
1767BU_SPE_2 (EVMHOSMI,	"evmhosmi",	MISC,	spe_evmhosmi)
1768BU_SPE_2 (EVMHOSMIA,	"evmhosmia",	MISC,	spe_evmhosmia)
1769BU_SPE_2 (EVMHOSMIAAW,	"evmhosmiaaw",	MISC,	spe_evmhosmiaaw)
1770BU_SPE_2 (EVMHOSMIANW,	"evmhosmianw",	MISC,	spe_evmhosmianw)
1771BU_SPE_2 (EVMHOSSF,	"evmhossf",	MISC,	spe_evmhossf)
1772BU_SPE_2 (EVMHOSSFA,	"evmhossfa",	MISC,	spe_evmhossfa)
1773BU_SPE_2 (EVMHOSSFAAW,	"evmhossfaaw",	MISC,	spe_evmhossfaaw)
1774BU_SPE_2 (EVMHOSSFANW,	"evmhossfanw",	MISC,	spe_evmhossfanw)
1775BU_SPE_2 (EVMHOSSIAAW,	"evmhossiaaw",	MISC,	spe_evmhossiaaw)
1776BU_SPE_2 (EVMHOSSIANW,	"evmhossianw",	MISC,	spe_evmhossianw)
1777BU_SPE_2 (EVMHOUMI,	"evmhoumi",	MISC,	spe_evmhoumi)
1778BU_SPE_2 (EVMHOUMIA,	"evmhoumia",	MISC,	spe_evmhoumia)
1779BU_SPE_2 (EVMHOUMIAAW,	"evmhoumiaaw",	MISC,	spe_evmhoumiaaw)
1780BU_SPE_2 (EVMHOUMIANW,	"evmhoumianw",	MISC,	spe_evmhoumianw)
1781BU_SPE_2 (EVMHOUSIAAW,	"evmhousiaaw",	MISC,	spe_evmhousiaaw)
1782BU_SPE_2 (EVMHOUSIANW,	"evmhousianw",	MISC,	spe_evmhousianw)
1783BU_SPE_2 (EVMWHSMF,	"evmwhsmf",	MISC,	spe_evmwhsmf)
1784BU_SPE_2 (EVMWHSMFA,	"evmwhsmfa",	MISC,	spe_evmwhsmfa)
1785BU_SPE_2 (EVMWHSMI,	"evmwhsmi",	MISC,	spe_evmwhsmi)
1786BU_SPE_2 (EVMWHSMIA,	"evmwhsmia",	MISC,	spe_evmwhsmia)
1787BU_SPE_2 (EVMWHSSF,	"evmwhssf",	MISC,	spe_evmwhssf)
1788BU_SPE_2 (EVMWHSSFA,	"evmwhssfa",	MISC,	spe_evmwhssfa)
1789BU_SPE_2 (EVMWHUMI,	"evmwhumi",	MISC,	spe_evmwhumi)
1790BU_SPE_2 (EVMWHUMIA,	"evmwhumia",	MISC,	spe_evmwhumia)
1791BU_SPE_2 (EVMWLSMIAAW,	"evmwlsmiaaw",	MISC,	spe_evmwlsmiaaw)
1792BU_SPE_2 (EVMWLSMIANW,	"evmwlsmianw",	MISC,	spe_evmwlsmianw)
1793BU_SPE_2 (EVMWLSSIAAW,	"evmwlssiaaw",	MISC,	spe_evmwlssiaaw)
1794BU_SPE_2 (EVMWLSSIANW,	"evmwlssianw",	MISC,	spe_evmwlssianw)
1795BU_SPE_2 (EVMWLUMI,	"evmwlumi",	MISC,	spe_evmwlumi)
1796BU_SPE_2 (EVMWLUMIA,	"evmwlumia",	MISC,	spe_evmwlumia)
1797BU_SPE_2 (EVMWLUMIAAW,	"evmwlumiaaw",	MISC,	spe_evmwlumiaaw)
1798BU_SPE_2 (EVMWLUMIANW,	"evmwlumianw",	MISC,	spe_evmwlumianw)
1799BU_SPE_2 (EVMWLUSIAAW,	"evmwlusiaaw",	MISC,	spe_evmwlusiaaw)
1800BU_SPE_2 (EVMWLUSIANW,	"evmwlusianw",	MISC,	spe_evmwlusianw)
1801BU_SPE_2 (EVMWSMF,	"evmwsmf",	MISC,	spe_evmwsmf)
1802BU_SPE_2 (EVMWSMFA,	"evmwsmfa",	MISC,	spe_evmwsmfa)
1803BU_SPE_2 (EVMWSMFAA,	"evmwsmfaa",	MISC,	spe_evmwsmfaa)
1804BU_SPE_2 (EVMWSMFAN,	"evmwsmfan",	MISC,	spe_evmwsmfan)
1805BU_SPE_2 (EVMWSMI,	"evmwsmi",	MISC,	spe_evmwsmi)
1806BU_SPE_2 (EVMWSMIA,	"evmwsmia",	MISC,	spe_evmwsmia)
1807BU_SPE_2 (EVMWSMIAA,	"evmwsmiaa",	MISC,	spe_evmwsmiaa)
1808BU_SPE_2 (EVMWSMIAN,	"evmwsmian",	MISC,	spe_evmwsmian)
1809BU_SPE_2 (EVMWSSF,	"evmwssf",	MISC,	spe_evmwssf)
1810BU_SPE_2 (EVMWSSFA,	"evmwssfa",	MISC,	spe_evmwssfa)
1811BU_SPE_2 (EVMWSSFAA,	"evmwssfaa",	MISC,	spe_evmwssfaa)
1812BU_SPE_2 (EVMWSSFAN,	"evmwssfan",	MISC,	spe_evmwssfan)
1813BU_SPE_2 (EVMWUMI,	"evmwumi",	MISC,	spe_evmwumi)
1814BU_SPE_2 (EVMWUMIA,	"evmwumia",	MISC,	spe_evmwumia)
1815BU_SPE_2 (EVMWUMIAA,	"evmwumiaa",	MISC,	spe_evmwumiaa)
1816BU_SPE_2 (EVMWUMIAN,	"evmwumian",	MISC,	spe_evmwumian)
1817BU_SPE_2 (EVNAND,	"evnand",	MISC,	spe_evnand)
1818BU_SPE_2 (EVNOR,	"evnor",	MISC,	spe_evnor)
1819BU_SPE_2 (EVOR,		"evor",		MISC,	spe_evor)
1820BU_SPE_2 (EVORC,	"evorc",	MISC,	spe_evorc)
1821BU_SPE_2 (EVRLW,	"evrlw",	MISC,	spe_evrlw)
1822BU_SPE_2 (EVSLW,	"evslw",	MISC,	spe_evslw)
1823BU_SPE_2 (EVSRWS,	"evsrws",	MISC,	spe_evsrws)
1824BU_SPE_2 (EVSRWU,	"evsrwu",	MISC,	spe_evsrwu)
1825BU_SPE_2 (EVSUBFW,	"evsubfw",	MISC,	subv2si3)
1826
1827/* SPE binary operations expecting a 5-bit unsigned literal.  */
1828BU_SPE_2 (EVADDIW,	"evaddiw",	MISC,	spe_evaddiw)
1829
1830BU_SPE_2 (EVRLWI,	"evrlwi",	MISC,	spe_evrlwi)
1831BU_SPE_2 (EVSLWI,	"evslwi",	MISC,	spe_evslwi)
1832BU_SPE_2 (EVSRWIS,	"evsrwis",	MISC,	spe_evsrwis)
1833BU_SPE_2 (EVSRWIU,	"evsrwiu",	MISC,	spe_evsrwiu)
1834BU_SPE_2 (EVSUBIFW,	"evsubifw",	MISC,	spe_evsubifw)
1835BU_SPE_2 (EVMWHSSFAA,	"evmwhssfaa",	MISC,	spe_evmwhssfaa)
1836BU_SPE_2 (EVMWHSSMAA,	"evmwhssmaa",	MISC,	spe_evmwhssmaa)
1837BU_SPE_2 (EVMWHSMFAA,	"evmwhsmfaa",	MISC,	spe_evmwhsmfaa)
1838BU_SPE_2 (EVMWHSMIAA,	"evmwhsmiaa",	MISC,	spe_evmwhsmiaa)
1839BU_SPE_2 (EVMWHUSIAA,	"evmwhusiaa",	MISC,	spe_evmwhusiaa)
1840BU_SPE_2 (EVMWHUMIAA,	"evmwhumiaa",	MISC,	spe_evmwhumiaa)
1841BU_SPE_2 (EVMWHSSFAN,	"evmwhssfan",	MISC,	spe_evmwhssfan)
1842BU_SPE_2 (EVMWHSSIAN,	"evmwhssian",	MISC,	spe_evmwhssian)
1843BU_SPE_2 (EVMWHSMFAN,	"evmwhsmfan",	MISC,	spe_evmwhsmfan)
1844BU_SPE_2 (EVMWHSMIAN,	"evmwhsmian",	MISC,	spe_evmwhsmian)
1845BU_SPE_2 (EVMWHUSIAN,	"evmwhusian",	MISC,	spe_evmwhusian)
1846BU_SPE_2 (EVMWHUMIAN,	"evmwhumian",	MISC,	spe_evmwhumian)
1847BU_SPE_2 (EVMWHGSSFAA,	"evmwhgssfaa",	MISC,	spe_evmwhgssfaa)
1848BU_SPE_2 (EVMWHGSMFAA,	"evmwhgsmfaa",	MISC,	spe_evmwhgsmfaa)
1849BU_SPE_2 (EVMWHGSMIAA,	"evmwhgsmiaa",	MISC,	spe_evmwhgsmiaa)
1850BU_SPE_2 (EVMWHGUMIAA,	"evmwhgumiaa",	MISC,	spe_evmwhgumiaa)
1851BU_SPE_2 (EVMWHGSSFAN,	"evmwhgssfan",	MISC,	spe_evmwhgssfan)
1852BU_SPE_2 (EVMWHGSMFAN,	"evmwhgsmfan",	MISC,	spe_evmwhgsmfan)
1853BU_SPE_2 (EVMWHGSMIAN,	"evmwhgsmian",	MISC,	spe_evmwhgsmian)
1854BU_SPE_2 (EVMWHGUMIAN,	"evmwhgumian",	MISC,	spe_evmwhgumian)
1855BU_SPE_2 (BRINC,	"brinc",	MISC,	spe_brinc)
1856BU_SPE_2 (EVXOR,	"evxor",	MISC,	xorv2si3)
1857
1858/* SPE predicate builtins.  */
1859BU_SPE_P (EVCMPEQ,	"evcmpeq",	MISC,	spe_evcmpeq)
1860BU_SPE_P (EVCMPGTS,	"evcmpgts",	MISC,	spe_evcmpgts)
1861BU_SPE_P (EVCMPGTU,	"evcmpgtu",	MISC,	spe_evcmpgtu)
1862BU_SPE_P (EVCMPLTS,	"evcmplts",	MISC,	spe_evcmplts)
1863BU_SPE_P (EVCMPLTU,	"evcmpltu",	MISC,	spe_evcmpltu)
1864BU_SPE_P (EVFSCMPEQ,	"evfscmpeq",	MISC,	spe_evfscmpeq)
1865BU_SPE_P (EVFSCMPGT,	"evfscmpgt",	MISC,	spe_evfscmpgt)
1866BU_SPE_P (EVFSCMPLT,	"evfscmplt",	MISC,	spe_evfscmplt)
1867BU_SPE_P (EVFSTSTEQ,	"evfststeq",	MISC,	spe_evfststeq)
1868BU_SPE_P (EVFSTSTGT,	"evfststgt",	MISC,	spe_evfststgt)
1869BU_SPE_P (EVFSTSTLT,	"evfststlt",	MISC,	spe_evfststlt)
1870
1871/* SPE evsel builtins.  */
1872BU_SPE_E (EVSEL_CMPGTS,	 "evsel_gts",	  MISC,	spe_evcmpgts)
1873BU_SPE_E (EVSEL_CMPGTU,	 "evsel_gtu",	  MISC,	spe_evcmpgtu)
1874BU_SPE_E (EVSEL_CMPLTS,	 "evsel_lts",	  MISC,	spe_evcmplts)
1875BU_SPE_E (EVSEL_CMPLTU,	 "evsel_ltu",	  MISC,	spe_evcmpltu)
1876BU_SPE_E (EVSEL_CMPEQ,	 "evsel_eq",	  MISC,	spe_evcmpeq)
1877BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt",	  MISC,	spe_evfscmpgt)
1878BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt",	  MISC,	spe_evfscmplt)
1879BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq",	  MISC,	spe_evfscmpeq)
1880BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC,	spe_evfststgt)
1881BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC,	spe_evfststlt)
1882BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC,	spe_evfststeq)
1883
1884BU_SPE_1 (EVABS,	"evabs",	CONST,	absv2si2)
1885BU_SPE_1 (EVADDSMIAAW,	"evaddsmiaaw",	CONST,	spe_evaddsmiaaw)
1886BU_SPE_1 (EVADDSSIAAW,	"evaddssiaaw",	CONST,	spe_evaddssiaaw)
1887BU_SPE_1 (EVADDUMIAAW,	"evaddumiaaw",	CONST,	spe_evaddumiaaw)
1888BU_SPE_1 (EVADDUSIAAW,	"evaddusiaaw",	CONST,	spe_evaddusiaaw)
1889BU_SPE_1 (EVCNTLSW,	"evcntlsw",	CONST,	spe_evcntlsw)
1890BU_SPE_1 (EVCNTLZW,	"evcntlzw",	CONST,	spe_evcntlzw)
1891BU_SPE_1 (EVEXTSB,	"evextsb",	CONST,	spe_evextsb)
1892BU_SPE_1 (EVEXTSH,	"evextsh",	CONST,	spe_evextsh)
1893BU_SPE_1 (EVFSABS,	"evfsabs",	CONST,	spe_evfsabs)
1894BU_SPE_1 (EVFSCFSF,	"evfscfsf",	CONST,	spe_evfscfsf)
1895BU_SPE_1 (EVFSCFSI,	"evfscfsi",	CONST,	spe_evfscfsi)
1896BU_SPE_1 (EVFSCFUF,	"evfscfuf",	CONST,	spe_evfscfuf)
1897BU_SPE_1 (EVFSCFUI,	"evfscfui",	CONST,	spe_evfscfui)
1898BU_SPE_1 (EVFSCTSF,	"evfsctsf",	CONST,	spe_evfsctsf)
1899BU_SPE_1 (EVFSCTSI,	"evfsctsi",	CONST,	spe_evfsctsi)
1900BU_SPE_1 (EVFSCTSIZ,	"evfsctsiz",	CONST,	spe_evfsctsiz)
1901BU_SPE_1 (EVFSCTUF,	"evfsctuf",	CONST,	spe_evfsctuf)
1902BU_SPE_1 (EVFSCTUI,	"evfsctui",	CONST,	spe_evfsctui)
1903BU_SPE_1 (EVFSCTUIZ,	"evfsctuiz",	CONST,	spe_evfsctuiz)
1904BU_SPE_1 (EVFSNABS,	"evfsnabs",	CONST,	spe_evfsnabs)
1905BU_SPE_1 (EVFSNEG,	"evfsneg",	CONST,	spe_evfsneg)
1906BU_SPE_1 (EVMRA,	"evmra",	CONST,	spe_evmra)
1907BU_SPE_1 (EVNEG,	"evneg",	CONST,	negv2si2)
1908BU_SPE_1 (EVRNDW,	"evrndw",	CONST,	spe_evrndw)
1909BU_SPE_1 (EVSUBFSMIAAW,	"evsubfsmiaaw",	CONST,	spe_evsubfsmiaaw)
1910BU_SPE_1 (EVSUBFSSIAAW,	"evsubfssiaaw",	CONST,	spe_evsubfssiaaw)
1911BU_SPE_1 (EVSUBFUMIAAW,	"evsubfumiaaw",	CONST,	spe_evsubfumiaaw)
1912BU_SPE_1 (EVSUBFUSIAAW,	"evsubfusiaaw",	CONST,	spe_evsubfusiaaw)
1913
1914/* SPE builtins that are handled as special cases.  */
1915BU_SPE_X (EVLDD,	      "evldd",		MISC)
1916BU_SPE_X (EVLDDX,	      "evlddx",		MISC)
1917BU_SPE_X (EVLDH,	      "evldh",		MISC)
1918BU_SPE_X (EVLDHX,	      "evldhx",		MISC)
1919BU_SPE_X (EVLDW,	      "evldw",		MISC)
1920BU_SPE_X (EVLDWX,	      "evldwx",		MISC)
1921BU_SPE_X (EVLHHESPLAT,	      "evlhhesplat",	MISC)
1922BU_SPE_X (EVLHHESPLATX,	      "evlhhesplatx",	MISC)
1923BU_SPE_X (EVLHHOSSPLAT,	      "evlhhossplat",	MISC)
1924BU_SPE_X (EVLHHOSSPLATX,      "evlhhossplatx",	MISC)
1925BU_SPE_X (EVLHHOUSPLAT,	      "evlhhousplat",	MISC)
1926BU_SPE_X (EVLHHOUSPLATX,      "evlhhousplatx",	MISC)
1927BU_SPE_X (EVLWHE,	      "evlwhe",		MISC)
1928BU_SPE_X (EVLWHEX,	      "evlwhex",	MISC)
1929BU_SPE_X (EVLWHOS,	      "evlwhos",	MISC)
1930BU_SPE_X (EVLWHOSX,	      "evlwhosx",	MISC)
1931BU_SPE_X (EVLWHOU,	      "evlwhou",	MISC)
1932BU_SPE_X (EVLWHOUX,	      "evlwhoux",	MISC)
1933BU_SPE_X (EVLWHSPLAT,	      "evlwhsplat",	MISC)
1934BU_SPE_X (EVLWHSPLATX,	      "evlwhsplatx",	MISC)
1935BU_SPE_X (EVLWWSPLAT,	      "evlwwsplat",	MISC)
1936BU_SPE_X (EVLWWSPLATX,	      "evlwwsplatx",	MISC)
1937BU_SPE_X (EVSPLATFI,	      "evsplatfi",	MISC)
1938BU_SPE_X (EVSPLATI,	      "evsplati",	MISC)
1939BU_SPE_X (EVSTDD,	      "evstdd",		MISC)
1940BU_SPE_X (EVSTDDX,	      "evstddx",	MISC)
1941BU_SPE_X (EVSTDH,	      "evstdh",		MISC)
1942BU_SPE_X (EVSTDHX,	      "evstdhx",	MISC)
1943BU_SPE_X (EVSTDW,	      "evstdw",		MISC)
1944BU_SPE_X (EVSTDWX,	      "evstdwx",	MISC)
1945BU_SPE_X (EVSTWHE,	      "evstwhe",	MISC)
1946BU_SPE_X (EVSTWHEX,	      "evstwhex",	MISC)
1947BU_SPE_X (EVSTWHO,	      "evstwho",	MISC)
1948BU_SPE_X (EVSTWHOX,	      "evstwhox",	MISC)
1949BU_SPE_X (EVSTWWE,	      "evstwwe",	MISC)
1950BU_SPE_X (EVSTWWEX,	      "evstwwex",	MISC)
1951BU_SPE_X (EVSTWWO,	      "evstwwo",	MISC)
1952BU_SPE_X (EVSTWWOX,	      "evstwwox",	MISC)
1953BU_SPE_X (MFSPEFSCR,	      "mfspefscr",	MISC)
1954BU_SPE_X (MTSPEFSCR,	      "mtspefscr",	MISC)
1955
1956
1957/* Power7 builtins, that aren't VSX instructions.  */
1958BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
1959	      RS6000_BTC_CONST)
1960
1961/* Miscellaneous builtins.  */
1962BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE,
1963	      RS6000_BTC_FP)
1964
1965BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES,
1966	      RS6000_BTC_FP)
1967
1968BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE,
1969	      RS6000_BTC_FP)
1970
1971BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES,
1972	      RS6000_BTC_FP)
1973
1974BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase",
1975	      RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
1976
1977BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb",
1978	      RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
1979
1980BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs",
1981	      RS6000_BTM_ALWAYS, RS6000_BTC_MISC)
1982
1983RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf",
1984	          RS6000_BTM_ALWAYS,
1985	          RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID,
1986		  CODE_FOR_rs6000_mtfsf)
1987
1988/* Darwin CfString builtin.  */
1989BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS,
1990	      RS6000_BTC_MISC)
1991