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