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