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