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